谷歌应用商店不过滤x86设备。

3

我使用ndk-build命令生成了一个.so文件,并在Application.mk文件中编写了以下内容:APP_ABI := armeabi。然后,我在另一个应用程序中使用了这个.so文件,但是我发现在谷歌商店中,该应用程序可以在x86设备上被看到。

从文档中可以得知(http://developer.android.com/google/play/filters.html):通过包含使用Android NDK构建的针对特定CPU架构(例如ARM EABI v7或x86)的本地库。

现在我很困惑,我该怎么做才能让我的应用程序在GooglePlay上对x86设备不可见?

我们在GooglePlay中发布了一个应用程序,但该应用程序在x86设备上会崩溃。因此,我们希望将该应用程序对x86设备在GooglePlay中不可见。现在我们的.so文件位于jniLibs目录下的armeabi目录中,但x86设备仍然可以在GooglePlay中找到该应用程序。


我相信Play商店期望所有x86设备都有一个翻译层:https://dev59.com/42cs5IYBdhLWcg3wPxrN - Morrison Chang
@MorrisonChang 你好,我刚刚更新了我的问题。 - lqynydyxf
1个回答

3

谷歌应用商店可能依赖于x86平台的翻译层,该层可以将armeabi代码翻译成x86代码。参见:How does native android code written for ARM run on x86?

虽然我不知道为什么您的特定应用程序无法在x86平台上运行,但一种处理方法是通过旧版API在应用启动时检查CPU / 架构。

Build.CPU_ABI

或在API 21及以上版本上

Build.SUPPORTED_ABI

http://developer.android.com/reference/android/os/Build.html#CPU_ABI

如果一个条件没有满足,例如 CPU 架构,则可以防止用户运行您的应用程序。因此,在启动时,您将检查设备是否正确,并在对话框中降级和/或防止用户访问会导致崩溃的功能。

编辑

如果需要阻止某些设备甚至看到您的应用程序,则必须使用 Google Play 开发者控制台选择哪些设备可以看到您的应用程序。请参见:如何限制 Android 应用程序仅限特定设备型号?https://support.google.com/googleplay/android-developer/answer/1286017?hl=en

当然,随着新的 x86 设备上线,您还需要将它们移除。


谢谢您的回答!我们的应用无法在x86上运行的原因是因为.so文件中的一些本地方法与x86不兼容。这是我们的工程师说的。我不知道技术细节。 - lqynydyxf
在消费级x86设备上,Build.SUPPORTED_API也会报告ARM架构,因为它们通过翻译层得到支持。您可以检查x86是否在列表中,但基于CPU架构黑名单设备可能会让用户感到恼火。为什么不修复您的兼容性问题呢? - ph0b
我们的图形工程师提供了.so文件,他们告诉我修复兼容性问题是一个巨大的项目,所以我必须使应用程序对x86设备不可见。有没有一种方法可以修改Build.SUPPORTED_API? - lqynydyxf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接