谷歌规定:自 2019 年 8 月 1 日起,在 Google Play 上发布的应用必须支持 64 位架构。 64 位 CPU 能够为您的用户提供更快、更丰富的体验。如何查看自己的设备和应用是32位还是64位。
一、查看自己的设备CPU架构类型
手机开启USB调试后,连上电脑,在Windows CMD窗口中输入命令:
1、adb devices
查看设备是否连接上
2、adb shell getprop ro.product.cpu.abi
查看手机的CPU架构类型
总结一下,现在市面上常见的CPU架构类型如下:
1、armeabi-v7a: 第7代及以上的 32位ARM 处理器
2、arm64-v8a: ****第8代、64位ARM处理器
3、armeabi: ****第5代、第6代的32位ARM处理器,早期的手机在使用,现在基本很少了。
4、x86: Intel 32位处理器,在平板、模拟器用得比较多。
5、x86_64: Intel 64位处理器,在平板、模拟器用得比较多。
如何查看应用安装包是32位还是64位
查看应用文件中是否包含相应的库文件即可。对于 ARM 架构,32 位库位于 armeabi-v7a 中。 对应的 64 位库则位于 arm64-v8a 中。
对于 x86 架构,32 位库位于 x86 中,64 位库则位于 x86_64 中。
使用Android studio 打开应用包
查看 lib 文件夹,您可以在其中找到“.so”文件。如果在您的应用中找不到任何“.so”文件,则说明该应用已支持 64 位架构,您无需采取进一步措施。如果您看到 armeabi-v7a 或 x86,则说明您有 32 位库。
如果您看到 32 位和 64 位的库均已打包到软件包中,则可以跳至在 64 位硬件上测试应用。
通过解压缩 APK 查找原生库
APK 文件的结构类似于 ZIP 文件,可以像 ZIP 文件一样解压缩。只需要把apk文件后缀改成zip,然后直接解压,再搜索文件夹内是否存在 armeabi-v7a 库和 arm64-v8a 库即可。
基于向下兼容的原则,64位手机是支持32位和64位应用的。而只支持64位的应用是没有办法在32位手机上面运行的。由于谷歌规定新的应用必须支持64位,所以你的应用可以支持32位也可以不支持,如果你们的应用只支持64位,那么在32位手机上面就无法安装了
如何配置打包不同的so库
在 build.gradle 构建脚本中 , 配置 ndk 编译的动态库 CPU 架构类型 ;
在 " android / defaultConfig / ndk " 层级下 , 配置 abiFilters 选项 , 为其配置需要打包的 动态库 CPU 架构 ;
如果按照 abiFilters “armeabi-v7a”, “arm64-v8a”, “x86”, “x86_64” 配置 , 则打包时会将四种 CPU 架构的动态库都配置到 APK 中 ;
动态库打包配置 :
android {
defaultConfig {
//打包后的应用大小, 可以选择性打包一些库
ndk{
// 打包生成的ARM 指令集的动态库
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
}
打包时 , 如果当前工程资源中 , 有 4 种全架构的动态库 , 系统会将这四个动态库都打包到 APK 安装包中 ;
事实上 , 绝大部分应用都不需要配置全架构的动态库 , 市面上的 x86 手机几乎绝迹 , 另外 “arm64-v8a” 架构的 CPU 可以向下兼容 “armeabi-v7a” 架构的动态库 ;
因此 , 这里只提供 “armeabi-v7a” 架构的动态库即可 , 市面上大部分应用也是这么干的 ; ( 即使是微信也只支持 armeabi 这一个架构 )
注意 : 如果要在电脑上的 Android 模拟器上运行动态库 , 需要支持 “x86” 架构 , 大部分 PC 上的 Android 模拟器都是 x86 架构的 ;
优化打包so库
只支持 “armeabi-v7a” 指令集架构的动态库打包配置 :
android {
defaultConfig {
ndk{
// 只支持 “armeabi-v7a” 指令集架构的动态库打包配置
abiFilters "armeabi-v7a"
}
}
}
打包后apk的大小体积上的减少。