【问题标题】:Is that safe to keep only armeabi-v7a for an android apk只为android apk保留armeabi-v7a是否安全
【发布时间】:2015-07-14 06:44:11
【问题描述】:

我有一个使用原生库 (snappydb) 的 android APK。 本机库占用大量空间,所以我只想为 armeabi-v7a 架构保留 snappydb

我知道为其他架构删除 snappydb 并不是 100% 安全的,所以我的问题是:它有多不安全? (我会失去多少设备/用户?)

仅供参考,我的应用支持的最小 sdk 版本是 16 (JELLY_BEAN)。

【问题讨论】:

  • 您的问题不是很清楚——您的措辞不准确且不清楚。您的意思是您只想为 armeabi-v7a 编译和捆绑 snappydb,而不为其他架构包含相同的库吗? “删除其他原生库”是什么意思——还有哪些其他库?
  • 很抱歉给您带来不便,我的意思是不包括 snappydb 用于其他架构。
  • 我将把它作为评论留下,因为我不能给出一个得到充分支持的答案。据我所知,几乎所有的 Android 设备都是 ARMv5 或 ARMv7(不知道有多少是 v5)。去年有一些 x86 (Intel) 平板电脑,我认为一些 MIPS 设备在几年前就开始出现了,但我没有听到太多关于它们的消息,而且据我所知它们并不受欢迎。如果非 ARM 的市场份额超过 5-10%,我会感到惊讶(但同样,这是轶事,我现在没有任何数据)。但请注意,某些 x86 设备是三星设备。
  • @Laogeodritt 听起来很合理,感谢您提供的信息。所以看起来如果我保留 armeabi-v7a、armeabi、x86,大部分设备都会被覆盖?
  • 您无法在 Android Studio 2.2 中将调试器附加到正在运行的具有 armeabi-v7a 架构的 APK。它根本行不通。

标签: android android-ndk snappydb


【解决方案1】:

我建议使用 Gradle 的 productFlavors 为每个 ABI 生成不同的 APK,因为某些 ABI 可能包含一些汇编代码优化(SSE4、SSE5、Arm Neon 等)

android {
    ...

    flavorDimensions "abi", "version"

    productFlavors {
        freeapp {
            flavorDimension "version"
            ...
        }

        x86 {
            flavorDimension "abi"
            ...
        }
    }
 }

或者,如果您使用的是实验性 Gradle 插件 'com.android.tools.build:gradle-experimental:0.1.0'

android.productFlavors {
        create ("arm7") {
            ndk.abiFilters += "armeabi-v7a"
        }
        create ("arm8") {
            ndk.abiFilters += "arm64-v8a"
        }
        create ("x86-32") {
            ndk.abiFilters += "x86"
        }
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        // build one including all productFlavors
        create("fat")
    }

【讨论】:

  • 非常正确。使用少量架构的成本很小,但对于某些用户而言,无法使用该应用程序。
  • @nabil-hachicha 每个 ABI 的不同 APK 确实是 Google Play 的一个很好的解决方案。但是对于不支持多个 apk 的其他市场,似乎很难找到正确分发我的应用程序的方法。而且更新也是个棘手的问题
【解决方案2】:

您可能不会从 arm-v7a 优化中获得太多收益,目前没有令人信服的理由来包含 64 位构建。但是,如果您保护他们的设备,MIPS 和 X86 所有者会感谢您。

【讨论】:

  • 嗨,Alex,你是什么意思'从 arm-v7a 优化中获得太多'?
  • 通常,为 armeabi 编译的本机代码可以在支持 armeabi-v7a 的设备上正常运行,但在其他情况下则不然。为 armeabi-v7a 编译时,数字运算算法可能更有效,但这与数据库库的相关性要低得多。
猜你喜欢
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2016-07-13
  • 2016-11-23
  • 2019-11-25
  • 2016-01-23
  • 2014-12-08
  • 2011-09-09
相关资源
最近更新 更多