如何制作支持32位和64位架构的Android应用程序?

问题描述 投票:10回答:3

我刚收到并阅读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和架构指南以获取更多信息。

在适用的情况下,我们需要做出哪些实际的改变才能完全符合这一新要求?

android android-ndk google-play 64bit 32-bit
3个回答
13
投票

根据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谈了一点。


7
投票

如果您没有本机(NDK)代码,那就是您只编写Java / Dex代码,那么您不需要做任何事情。

如果您有本机代码(或库),则需要提供其64位版本。


3
投票

根据文档here,如果您的应用程序使用本机代码或外部库,例如,基于本机的域(在下图中),则应提供对64位的支持。如果您的应用程序中任何使用任何C / C ++(本机)的外部库都应具有32位和64位架构支持,否则您应该与库所有者联系。在Android Studio中,我们可以通过Build> Analyze APK检查这两种体系结构的版本是否可用,并显示以下窗口:

Android Studio tab showing avaiable architectures

如果您正在使用NDK并创建本机代码,则应通过在gradle中将它们列入以下内容来为这两种体系结构提供支持:

defaultConfig {  
   ndk.abiFilters = 'armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64'
   }

3
投票

如果您的Android APK不包含64位支持,则无需担心。在Android Studio中转到Build - > Analyze APK。你可以看到APK结构。在lib下,如果你看到armeabi-v7a库,如果你没有任何arm64-v8ax86_64库,那么你的APK不支持64位架构。

只需转到应用级别build.gradle并在abiFilters下的NDK中添加defaultConfig,如下所示:

ndk {
    abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}

1
投票

本机代码:指的是直接编译到运行它的计算机的CPU指令的可执行程序。

非本机代码:指的是一个可执行程序,它被编译为20世纪70年代末和80年代后期原始Tandem架构的CPU指令。运行这样的程序时,它无法直接在运行它的计算机的CPU上执行。 NonStop操作系统包括用于原始Tandem架构的解释器,用于运行此类非本机代码。

如果您的应用程序仅使用用Java编程语言或Kotlin编写的代码,包括任何库或SDK,那么您的应用程序已经为64位设备做好了准备。如果您的应用使用任何原生代码,或者您不确定是否存在,则需要评估您的应用并采取相应措施。

您的应用是否使用本机代码?

首先要检查您的应用是否使用任何本机代码。如果您的应用程序使用本机代码:

  • 在您的应用中使用任何C / C ++(本机)代码。
  • 与任何第三方本机库的链接。
  • 由使用本机库的第三方应用程序构建器构建。

更多信息,visit the docs


1
投票

选项1 - 从APK中删除lib。

第1步 - 将APK转换为ZIP并找到lib文件夹;如果您有lib文件夹,请参阅库依赖项。

第2步 - 从构建Gradle中删除依赖项。

选项2 - 下载64位和32位JAR文件,并在app和build中添加lib文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.