println("")
def v7a = []
def arm64 = []
it.inputs.files.each { file ->
if (file.absolutePath.endsWith("/jni")) {
// println("
" + file.absolutePath)
if (file.isDirectory()) {
file.listFiles().each { soFileDir ->
if (soFileDir.absolutePath.contains(“armeabi-v7a”)) {
if (soFileDir.isDirectory()) {
soFileDir.listFiles().each {
println(it.absolutePath)
v7a.add(it.name)
}
}
}
if (soFileDir.absolutePath.contains(“arm64-v8a”)) {
if (soFileDir.isDirectory()) {
soFileDir.listFiles().each {
println(it.absolutePath)
arm64.add(it.name)
}
}
}
}
}
}
}
println(“v7a size: ${v7a.size()}”)
println(“arm64 size: KaTeX parse error: Expected '}', got 'EOF' at end of input: …t)) { println("it”)
}
}
println("
==========")
}
}
}

然后执行 .\gradlew assembleDebug,这里的 Debug 可以根据实际项目中的 Flavor 进行替换。Demo 工程的输出如下:

Task :app:mergeDebugNativeLibs
==========================================================
xxx\5d0e00f6a703ec622708978bebed0322\mmkv-static-1.2.8\jni\arm64-v8a\libmmkv.so
xxx\5d0e00f6a703ec622708978bebed0322\mmkv-static-1.2.8\jni\armeabi-v7a\libmmkv.so
xxx\7206efbbb5863dbe5969c1c384b81177\openDefault-4.2.7\jni\armeabi-v7a\libweibosdkcore.so
xxx\ccd11b53aab95a933b06ef9e74f9fb44\sentry-android-ndk-3.1.3\jni\arm64-v8a\libsentry-android.so
xxx\ccd11b53aab95a933b06ef9e74f9fb44\sentry-android-ndk-3.1.3\jni\arm64-v8a\libsentry.so
xxx\ccd11b53aab95a933b06ef9e74f9fb44\sentry-android-ndk-3.1.3\jni\armeabi-v7a\libsentry-android.so
xxx\ccd11b53aab95a933b06ef9e74f9fb44\sentry-android-ndk-3.1.3\jni\armeabi-v7a\libsentry.so
v7a size: 4
arm64 size: 3
so in v7a, but not in arm64:
libweibosdkcore.so
==========================================================

从输出可以快速看出哪些已经支持 64 位,找到哪些还不支持 64 位的 so 文件,以及他们所在的路径。

Demo 工程见:github.com/callmepeanu…

适配 64 位

找到不支持 64 位的 so 列表后,如果是第三方库或者从外部引入的 so 文件,需要看是否有适配过 64 位的新版本,或者找提供方获取支持 64 位的版本。 如果是自己项目中的 C/C++ 源码编译出来的,需要在编译
选项和源码层面做对 64 位架构的适配并生成对应架构的 so 库文件。

打包

可以把所有支持的 abi 的 so 都打在一个包里,这样一个安装包就可以适配所有设备,缺点就是包体积会增大,特别是原生库比较多的情况。 目前应用市场提供了分别上传32位兼容包和64位包的能力,所以可以利用构建多个 APK 的能力来打出支持不同 abi 的包,应用市场根据用户手机 CPU 类型分发对应的包,可以减少用户下载包的大小。 支持构建多个 APK 只需要在 build.gradle 中添加如下配置:

android {

splits {
abi {
enable true
reset()
include ‘armeabi-v7a’, ‘arm64-v8a’
universalApk false
}
}
}
生成的安装包如下图所示:
image.png
参考:

niversalApk false
}
}
}
生成的安装包如下图所示:
[外链图片转存中…(img-JW7WHDDY-1643078972498)]
参考:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐