实用AndroidAndroid技术知识

Android 32位 兼容 64位 so处理

2022-04-13  本文已影响0人  zhongjh

最近华为商店平台已经要求App64位才能上架了。在下半年,所有平台都差不多会强制要求。在不久,硬件也只支持64位了,意味着,32位以后将会被淘汰。

好巧不巧,最近处理的以前别人的项目,刚好全是32位的,下手特别狠,可能为了代码量小,直接把64位的so包删掉了。那么直接开门见山,讲重要几点

一:设置64位的代码

    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a"
            // 如果添加armeabi-v7a就必须添加arm64-v8a
            abiFilters "arm64-v8a"
            abiFilters "x86"
            // 添加x86必须添加x86_64
            abiFilters "x86_64"
        }
    }

二:以前32位的设置能兼容64位手机呀?为什么现在不行呢

现在也行,只是平台要求必须设置64位才能上架,包括以后硬件也会淘汰

三:可以把32位的so放在64位包上吗

不行,运行报错

四:我怎么知道so文件来源于哪些库呢

在 app 模块的 build.gradle 中,增加以下代码:

// 列出所有包含有so文件的库信息
tasks.whenTaskAdded { task ->
    task.doFirst {
        println("------------------- find so files start -------------------")
        println("------------------- find so files start -------------------")
        println("------------------- find so files start -------------------")

        it.inputs.files.each { file ->
            printDir(new File(file.absolutePath))
        }

        println("------------------- find so files end -------------------")
        println("------------------- find so files end -------------------")
        println("------------------- find so files end -------------------")
    }
}

def printDir(File file) {
    if (file != null) {
        if (file.isDirectory()) {
            file.listFiles().each {
                printDir(it)
            }
        } else if (file.absolutePath.endsWith(".so")) {
            println "find so file: $file.absolutePath"
        }
    }
}

然后执行 "gradlew assembleDebug"命令,ctrl+F搜索关键字 find so file:

1649845636(1).jpg

后续有什么关于如何处理这个问题的,再更新
欢迎收藏

上一篇下一篇

猜你喜欢

热点阅读