我刚收到并阅读a newsletter from Google Play,提到从明年开始,商店“将要求新的应用程序和应用程序更新与本机库提供64位版本,除了他们的32位版本”。
对于尚未阅读的人,它说:
2019年的64位支持要求
Android 5.0中引入了对64位体系结构的平台支持。今天,超过40%的在线Android设备具有64位支持,同时仍保持32位兼容性。对于使用本机库的应用程序,64位代码通常提供更好的性能,附加寄存器和新指令。
由于预计未来仅支持64位代码的Android设备,Play控制台将要求使用本机库的新应用和应用更新除了提供32位版本之外还提供64位版本。这可以在单个APK内,也可以作为发布的多个APK中的一个。
我们没有删除32位支持。 Google Play将继续支持32位应用和设备。不包含本机代码的应用程序不受影响。
此更改将于2019年8月生效。我们今天提前通知,以便为尚未支持64位的开发人员提供充足的时间来规划转换。请继续关注未来的帖子,我们将深入了解Android上64位本机库的性能优势,并查看NDK的CPU和架构指南以获取更多信息。
在适用的情况下,我们需要做出哪些实际的改变才能完全符合这一新要求?
根据Google Play团队发送的官方电子邮件,所需的操作是:
如果您还没有,我们建议您尽快开始满足64位要求。许多应用程序完全用非本机代码(例如Java编程语言或Kotlin)编写,不需要更改代码。
请注意,我们不会对32位支持的政策进行更改。 Google Play将继续向32位设备提供具有32位本机代码的应用。该要求意味着这些应用程序也需要具有64位版本。
为了帮助您进行转换,我们准备了documentation,了解如何检查您的应用是否已支持64位以及如何成为64位兼容。
我们还在下面提供了一个高级时间表。
因此,链接的文档说明:
如果您的应用程序仅使用用Java编程语言或Kotlin编写的代码,包括任何库或SDK,那么您的应用程序已经为64位设备做好了准备。如果您的应用使用任何原生代码,或者您不确定是否存在,则需要评估您的应用并采取相应措施。
[...]
检查64位库的最简单方法是检查APK文件的结构。构建时,APK将与应用程序所需的任何本机库打包在一起。本机库基于ABI存储在各种文件夹中。它不需要支持每个64位体系结构,但对于您支持的每个本机32位体系结构,您必须包含相应的64位体系结构。
对于ARM体系结构,32位库位于armeabi-v7a中。 64位的等价物是arm64-v8a。
对于x86架构,请查找32位的x86和64位的x86_64。
首先要做的是确保在这两个文件夹中都有本机库。[...]
而且,要构建64位库,您基本上需要按照以下说明操作:
大多数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' // ...
最后,快速说明:
64位版本的应用程序应提供与32位版本相同的质量和功能集。
顺便说一句,this official video谈了一点。
如果您没有本机(NDK)代码,那就是您只编写Java / Dex代码,那么您不需要做任何事情。
如果您有本机代码(或库),则需要提供其64位版本。
根据文档here,如果您的应用程序使用本机代码或外部库,例如,基于本机的域(在下图中),则应提供对64位的支持。如果您的应用程序中任何使用任何C / C ++(本机)的外部库都应具有32位和64位架构支持,否则您应该与库所有者联系。在Android Studio中,我们可以通过Build> Analyze APK检查这两种体系结构的版本是否可用,并显示以下窗口:
如果您正在使用NDK并创建本机代码,则应通过在gradle中将它们列入以下内容来为这两种体系结构提供支持:
defaultConfig {
ndk.abiFilters = 'armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64'
}
如果您的Android APK不包含64位支持,则无需担心。在Android Studio中转到Build - > Analyze APK。你可以看到APK结构。在lib下,如果你看到armeabi-v7a
库,如果你没有任何arm64-v8a
或x86_64
库,那么你的APK不支持64位架构。
只需转到应用级别build.gradle
并在abiFilters
下的NDK中添加defaultConfig
,如下所示:
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
本机代码:指的是直接编译到运行它的计算机的CPU指令的可执行程序。
非本机代码:指的是一个可执行程序,它被编译为20世纪70年代末和80年代后期原始Tandem架构的CPU指令。运行这样的程序时,它无法直接在运行它的计算机的CPU上执行。 NonStop操作系统包括用于原始Tandem架构的解释器,用于运行此类非本机代码。
如果您的应用程序仅使用用Java编程语言或Kotlin编写的代码,包括任何库或SDK,那么您的应用程序已经为64位设备做好了准备。如果您的应用使用任何原生代码,或者您不确定是否存在,则需要评估您的应用并采取相应措施。
您的应用是否使用本机代码?
首先要检查您的应用是否使用任何本机代码。如果您的应用程序使用本机代码:
更多信息,visit the docs。
选项1 - 从APK中删除lib。
第1步 - 将APK转换为ZIP并找到lib文件夹;如果您有lib文件夹,请参阅库依赖项。
第2步 - 从构建Gradle中删除依赖项。
选项2 - 下载64位和32位JAR文件,并在app和build中添加lib文件夹。