最近收到小米、oppo、vivio应用商店的通知,要求上架引用时提供64位的app包
其实从自 2019 年 8 月 1 日起, Google Play 上已经要求发布的应用必须支持64位架构,只是国内的应用商店都还没有要求,那一些老的APP自然也不会进行升级,现在收到通知看来是不得不升级了。(心疼那些委托开发又不在维护的APP,又要淘汰一大批了)
google提供了升级的方法,https://developer.android.com/distribute/best-practices/develop/64-bit#test_your_app_on_64-bit_hardware,相信做Android移动开发的应该都能够翻墙看的,这边简单的描述一下操作步骤。
1.首先检查您的APP是否包含原生库代码
若要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构。在构建时,APK 会与应用所需的所有原生库打包在一起。原生库会根据 ABI 存储在不同的文件夹中。您的应用不一定要支持所有 64 位架构,但对于支持的每种原生 32 位架构,应用都必须包含相应的 64 位架构。
对于 ARM 架构,32 位库位于 armeabi-v7a 中。 对应的 64 位库则位于 arm64-v8a 中。
对于 x86 架构,32 位库位于 x86 中,64 位库则位于 x86_64 中。
首先要确保这两个文件夹中都有原生库。总结如下:
请注意,每个文件夹中的一套库可能完全相同,也可能不完全相同,这取决于应用的具体情况。您应达到的目标是确保您的应用能够在仅支持 64 位架构的环境中正常运行。
通常情况下,同时针对 32 位和 64 位架构构建的 APK 或软件包会具有这两种 ABI 的文件夹,每个文件夹中都有一套相应的原生库。如果您的应用不支持 64 位架构,那么您很可能会看到 32 位 ABI 文件夹,但没有 64 位文件夹。
使用 APK 分析器查找原生库
APK 分析器是一款可用于对构建的 APK 进行各方面评估的工具。针对我们目前所讨论的情况,我们将使用该工具查找原生库,以确定是否具备 64 位库。
1.打开 Android Studio,然后打开任一项目。
2.从菜单中依次选择 Build > Analyze APK…
3.选择您要评估的 APK。
4.查看 lib 文件夹,您可以在其中找到“.so”文件。如果在您的应用中找不到任何“.so”文件,则说明该应用的相应库已准备就绪,您无需采取进一步措施。如果您看到 armeabi-v7a 或 x86,则说明您有 32 位库。
5.检查是否 arm64-v8a 或 x86_64 文件夹中有类似的“.so”文件。
6.如果您没有任何 arm64-v8a 或 x86_64 库,则需要更新构建流程以开始构建并打包 APK 中的这些工件。
7.如果您看到 32 位和 64 位的库均已打包到软件包中,则可以跳至在 64 位硬件上测试应用。
通过解压缩 APK 查找原生库
APK 文件的结构类似于 ZIP 文件,可以像 ZIP 文件一样解压缩。 如果您更喜欢使用命令行或任何其他解压缩工具,也可以采用解压缩 APK 的方法。
只需解压缩 APK 文件(根据您使用的解压缩工具,您可能需要将其重命名为 .zip),然后按照上文中的指南浏览解压缩后的文件,即可确定您的应用是否已经为支持 64 位设备做好准备了。
例如,您可以从命令行中运行如下命令:
:: Command Line
> zipinfo -1 YOUR_APK_FILE.apk | grep \.so$
lib/armeabi-v7a/libmain.so
lib/armeabi-v7a/libmono.so
lib/armeabi-v7a/libunity.so
lib/arm64-v8a/libmain.so
lib/arm64-v8a/libmono.so
lib/arm64-v8a/libunity.so
请注意,此示例中存在 armeabi-v7a 库和 arm64-v8a 库,这表明该应用支持 64 位架构。
2.使用 64 位库构建应用
使用 Android Studio 或 Gradle 进行构建
大多数 Android Studio 项目都使用 Gradle 作为底层构建系统,因此本部分适用于使用这两种工具进行构建的情况。针对原生代码进行构建很简单,只需将 arm64-v8a 和/或 x86_64(视您要支持的架构而定)添加到应用的“build.gradle”文件中的 ndk.abiFilters 设置中即可:
// Your app's build.gradle
apply plugin: 'com.android.app'
android {
compileSdkVersion 27
defaultConfig {
appId "com.google.example.64bit"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
// ...
当然还能使用CMake和使用 ndk-build 进行构建,我的项目没有用到,因此就不赘述了。