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:
:
后续有什么关于如何处理这个问题的,再更新
欢迎收藏