在64位Android设备上从Google Play商店安装应用时,如果该应用支持,该应用是否以64位安装?

时间:2019-02-12 16:48:37

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

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

使用Google Play时是否可能以某种方式安装了32位版本,因此工作正常?我担心我的应用真正以64位安装时实际上可能会遇到问题,因此请您对上述不一致之处进行任何澄清。

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

1 个答案:

答案 0 :(得分: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位臂,可能会导致UI性能下降。您应该切换到其他选项,我建议5。顺便说一句,您可能不是您,它可能是您依赖的某些第三方库。

对于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匹配的正确零件。