【问题标题】:Is it safe to support only armeabi-v7a for Android 4 and above?仅支持 Android 4 及更高版本的 armeabi-v7a 是否安全?
【发布时间】:2015-05-09 16:05:23
【问题描述】:

我开发了一个主要使用 C++ 的应用程序,并像往常一样由 NDK 编译为 .so 库。我们知道,必须为每个 CPU 架构分别构建原生应用程序;所以我有不同的so 文件用于armeabiarmeabi-v7a。 (我故意省略了x86mips,因为发布的具有这些架构的Android 设备并不多。)

但是,大小非常大,每个so 文件占用大约90 MB 空间,我想减少它。

我知道我可以省略 armeabi-v7a,因为向后兼容,但在这种情况下,应用程序会运行得很慢。

考虑到我的应用仅支持 android ICS 及更高版本 (minSdkVersion="14"),我是否可以安全地删除 armeabi 并假设所有这些新设备都使用 armeabi-v7a?或者某些设备可能仍然使用旧的armeabi 而不是armeabi-v7a 架构?

【问题讨论】:

  • 如果您的设备已经有更新的 api 版本,并且您只想在旧设备上测试您的应用程序,请下载 armabi-v7a
  • 您可以“安全地”执行此操作,因为 Play 商店不会向旧设备发送仅支持 ARMv7-A 的应用程序。您承担的唯一风险是切断一定比例的市场。几年前 ARMv6 设备的数量惊人地多,但由于低端廉价 ARMv7-A+ 芯片的可用性,这个数字正在下降。
  • 是的,Play 商店确实会根据设备规格过滤应用程序,但由于我的公司不会通过 Play 商店分发它,所以它没有多大帮助,我必须确保。跨度>
  • 请注意,自 r16 以来 NDK 已弃用 armeabi 和 mips。因此,默认情况下不会生成这些架构的 so 文件。仍然可以通过在 abifilters 中明确提及来获取 so 文件。这实际上意味着 armeabi 和 mips 现在绝对不需要了。

标签: android android-ndk arm


【解决方案1】:

Android 4.0 和更高版本的未经修改的原始 Android 源默认不支持 ARMv5/ARMv6(但可以修改为针对 ARMv5/ARMv6 构建 - 有在 ARMv6 上运行的自定义构建)。我不确定是否可以获得经过认证与此类 Android 版本兼容的 ARMv6 设备,或者它是否仅适用于非官方固件。从 Android 4.4 开始,CDD(兼容性定义)严格要求 ARMv7。有关详细信息,请参阅https://android.stackexchange.com/questions/34958/what-are-the-minimum-hardware-specifications-for-android

所以是的,原则上,如果您的应用需要 Android 4.0,您可以放弃armeabi,但我不确定是否有任何此类官方保证。如果您需要 Android 4.4,那绝对没问题。

【讨论】:

  • 好的,谢谢。现在我知道即使存在这样的设备,它们的数量也不会很多,我认为去掉 armeabi 是最好的,因为它节省了 90 MB 的空间,这是很多!
  • 我使用 ARMv6 运行 Android 4.4.4,也使用 Play Store。让用户选择他们想要的,你也可以为 ARMv6 创建一个单独的版本,并且可能比主版本更新它的频率更低,但停止支持它并不好。
【解决方案2】:

作为 zenfone 2 的拥有者,我会拒绝 - 这些设备运行 ICS+,但采用 x86 微架构。如果您在 google 上搜索 android x86%,您应该能够看到一个统一页面,告诉您不同微架构的市场份额。此外,还有一些小众产品使用基于 MIPS 的 CPU 并运行 ICS+。

虽然确实有一种机制可以让 x86 android 设备运行在没有 so for x86 的情况下编译的 apk,但它还有其他缺点。

【讨论】:

    【解决方案3】:

    没有支持armeabi但不支持armeabi-v7a的Android 4+设备,所以你可以放心地放弃armeabi

    您可以在 Google Play 中自行检查:创建 2 个 APK(1 个支持 armeabi,1 个支持 armeabi-v7a)并尝试将这两个 APK 上传到 Google Play。您会注意到它们支持的设备数量相同。

    如果您在尝试支持两种架构的同时按架构拆分 APK,您甚至会在上传到 Google Play 时遇到错误:

    任何设备都无法下载此应用的 xxx 版本,因为它们 都将收到具有更高版本代码的 APK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 2023-02-18
      相关资源
      最近更新 更多