【问题标题】:When installing an app from the Google Play store on a 64-bit Android device, does the app install as 64-bit if the app supports it?在 64 位 Android 设备上从 Google Play 商店安装应用程序时,如果应用程序支持,该应用程序是否安装为 64 位?
【发布时间】:2019-02-12 16:48:36
【问题描述】:

我问的原因与 Google 最近的通信 https://developer.android.com/distribute/best-practices/develop/64-bit 有关需要支持 64 位设备的应用程序有关。根据文章中提到的建议,我非常有信心我的应用程序支持 64 位设备。当我从 Google Play 安装它时,它完全按预期工作,但是当我在 64 位硬件上使用 ADB 命令在本地测试 APK 时(正如谷歌在本节“在 64 位硬件上测试你的应用程序”中所建议的那样),我的应用程序有 UI 问题。我不确定为什么它的行为不一致。

是否有可能在使用 Google Play 时以某种方式安装了 32 位版本,因此工作正常?我担心我的应用在真正安装为 64 位时可能会出现问题,因此,如果对上述不一致之处进行任何澄清,我们将不胜感激。

我正在测试的设备是运行 Android 7.0 的“Moto X Pure Edition”。它有一个使用ARM架构的Snapdragon 808 CPU。另一方面,我们没有看到 Google 文章建议检查的任何“/lib”文件夹。我们的应用是混合的,使用 Ionic v3 构建。

【问题讨论】:

  • 文章以arm为例。您确定要测试的设备是 arm 设备吗?如果您可以在描述中添加您正在测试的设备,以及您在应用中提供的原生库的架构,那么帮助您会更容易。
  • 感谢您的回复@Pierre!我添加了有关我的设备和我们的应用程序的更多详细信息。是的,我确定它是 ARM 设备。

标签: android google-play apk adb 32bit-64bit


【解决方案1】:

没有“安装为 32 位”或“安装为 64 位”之类的东西。我会尽力解释。这有点复杂,而且您没有提供有关您的应用程序的许多详细信息。您选择构建应用的方式有多种可能性。

  1. 您的应用程序中没有本机代码(没有 .so 库)。它完全用 Java 或 Kotlin 编写,您使用的第三方库也没有使用本机代码。在这种情况下,您的 APK 的 lib/ 子目录应该是空的。
  2. 您的应用程序中确实有本机代码,但您有所有 ABIs 的 .so 文件(库)。在这种情况下,在您的 APK 中,您可能会在 APK 中看到 lib/ 下的多个子目录,其名称类似于 x86armeabi-v7a
  3. 您的应用程序中有本机代码,但您依赖 ABI 兼容性来工作。那就是您的lib/ 目录仅包含armeabi-v7a 作为子目录。 x86、x86-64 和 64 位 ARM 都模拟 32 位 ARM。
  4. 您为应用的每个版本制作了多个 APK,每个 ABI 制作了一个。通常称为multi-APK。所以 64 位 ARM 一个,32 位 ARM 一个,X86 一个,X86 64 位一个,等等。
  5. 您使用 Android App Bundle,并让 Google Play 选择如何交付您的应用。

顺便说一句,我强烈推荐 5 作为一个选项,它更有可能发生正确的事情。

在 1 的情况下,32 位或 64 位无关紧要。任何 UI 问题都是由其他原因引起的。也许 64 位手机分配了更多内存,而您的应用程序在低内存中表现不佳。也许 64 位手机要快一些,并且您已经编写了带有竞争条件的代码。不管是什么,64 位和 32 位都不是根本原因。

在 2 的情况下,Google Play 会为每部手机安装相同的 APK。但是设备本身会根据处理器选择要加载的库(.so 文件)。如果您的某个库在 64 位上存在问题,则可能是问题所在。

在 3 的情况下,这是 Google 最新的博文试图阻止的。不允许为新的 APK 发布此内容。您需要通过添加 64 位本机库来正确支持 64 位设备。如果是这种情况,您可能会通过让设备在 64 位(可能是 X86)设备上模拟 32 位 arm 来获得糟糕的 UI 性能。您应该切换到其他选项,我推荐 5。顺便说一下,这可能不是您,它可能是您依赖的某个 3rd 方库。

在 4 的情况下,Google Play 确实会根据处理器类型将不同的 APK 安装到不同的设备。每个不同的 APK 都有不同的版本代码。具有 64 位处理器的设备将获得带有 64 位库的 APK。如果您通过使用 adb 将 32 位版本代码放在 64 位设备上进行测试,您确实可能会遇到错误。但是,如果您为不同的 API 构建和发布不同的 APK,您就会知道这一点。只需使用adb 安装正确的版本代码。

在 5 的情况下,Google 会将不同的 APK(实际上是多个不同的 APK 拆分)安装到不同的设备上。要对其进行测试,我建议使用Google Play internal test track 进行验证,以检查是否安装了与 Google Play 匹配的正确部件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2016-09-29
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多