【问题标题】:Do we need to upload universal-apk if we are uploading different apk's for each ABI如果我们为每个 ABI 上传不同的 apk,我们是否需要上传 Universal-apk
【发布时间】:2018-01-03 14:02:15
【问题描述】:

我的应用程序大小已达到 117 MB,因为 Play 商店不允许上传大于 100 MB 的 apk。

所以我使用了split,并创建了多个版本的apk,每个版本都基于不同的ABI

如果我分析 universal-apk,我会在 lib 文件夹中找到这些类型的 ABI's

  • armeabi-v7a
  • x86
  • armeabi

我用它为每个abi 创建separate apk

splits {
    abi {
        enable true
        reset()
        include 'x86', 'armeabi-v7a', 'armeabi'
        universalApk true
    }
}

现在我得到了 4 种类型的 apk 结果。 universal-apk 的大小为 117 MB,而armeabi 的大小为 68 MB。

因此很明显,我无法在 Play 商店上传 universal-apk,因此我最终将在 Play 商店上传 3 apk's

现在我的问题是那些cpu architecture 不属于这些类别的用户会发生什么。

我注意到 Galaxy S7 是arm64-v8a,市场上还会有一些其他架构可用,如果universal-apk 不存在,或者armeabi-v7ax86 这些设备会怎样足以针对市场上所有可用的设备。

这会减少目标应用用户吗?我找不到ABI share on Google Play

【问题讨论】:

  • 你能在你的 abi 定义中包含 arm64-v8a 吗?
  • 看起来如果您删除重置并包含然后将构建商店支持的所有 abi。这对您来说是一种有效的方法吗?
  • 是的,我可以包含所有这些,但是所有其他 apk's 的大小都比其他的小,除了 armeab-v7ax86 所有其他架构都没有任何 @987654346 @文件,所以我担心如果为每个文件添加单独的apk会导致崩溃,这就是为什么我问armeab-v7ax86是否足以支持市场上所有可用的设备。
  • 也许其他架构在设备上包含这些依赖项?我不是 abi splits 专家,但鉴于您对 S7 的观察,我想说如果您想支持所有可用设备,则需要包含所有 abis。
  • 让我举个例子,一些外部库需要使用libUnity.so,他们在armeabi-v7ax86文件夹中添加了libUnity.so。所以universal-apk有2个linunity.so文件,它增加了universal-apk的大小,这就是我拆分apk的原因,现在两种架构都只有1个linUnity.so文件。

标签: android performance android-gradle-plugin google-play abi


【解决方案1】:

第一步始终是从数据中工作。在 Play 开发者控制台中查看您现有的用户,了解您的用户的分布情况。

对于没有这些 ABI 之一的用户,他们将收到“此应用与您的设备不兼容”。

但是,x86_64 和 arm64-v8a 向后兼容 x86 和 armeabi-v7a。通过覆盖您选择的那些,它将在几乎所有设备上运行,mips 可能不值得担心。

如果您也添加 x86_64 和 arm64-v8a 变体,您在较新设备上的用户将获得更好的性能,但如果没有这个,它应该可以工作。

armeabi 现在非常罕见,但一些非常古老的设备确实有这个限制。如果您的目标是现代 android 版本(例如 ICS+),您可能会没事。

【讨论】:

  • 谢谢@Nick,还有一个问题,armeabi 设备可以运行armeabi-v7a 文件吗?如果我不为armeabi 设备上传单独的apk 会不会很好,因为所有的我拥有的.so 文件针对的是x86armeabi-v7a 设备。
  • 编辑添加更多细节。如果您有一个相对较新的 min-SDK(例如 ICS+),我猜您只使用 armeabi-v7a 就可以了。但您应该在 Play 控制台的统计信息中查看现有用户。
  • 我有一个问题,如果你不介意的话。 However, x86_64 and arm64-v8a are backwards compatilble with x86 and armeabi-v7a. - 这是否意味着我可以省略 x86 而只添加 x86_64?目前我的 abi 过滤器是 - abiFilters "x86_64", "armeabi-v7a", "arm64-v8a"
【解决方案2】:

可以在此处找到所有受支持的 ABI 的列表:

https://developer.android.com/ndk/guides/abis.html#sa

如果您删除 reset() 选项,则将为每个受支持的 ABI 构建拆分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2011-03-18
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2016-10-20
    相关资源
    最近更新 更多