【问题标题】:Android app bundle generated APK size huge when containing .so files包含 .so 文件时,Android 应用程序包会生成巨大的 APK
【发布时间】:2020-01-13 05:04:21
【问题描述】:

我有一个项目,其中包含几个特定于 cpu 架构的 .so 文件 - 最大的是 xwalk lib,v8a 版本为 60MB,v7a 版本为 37MB。

当我们拆分 APK 时,arm-v7a 应用程序 apk 版本约为 38mb,arm-v8a apk 约为 41mb,这是有道理的 - 压缩 lib 将分别产生 23MB 和 20MB。

使用 app bundle 时,生成的 APK 似乎根本没有被压缩。 60MB 和 37MB 添加到 apk 大小几乎不变,导致 64 位 arm 设备的 apk 为 97MB。

使用 bundletool 为特定设备生成 apk 以及从内部应用测试 Play 商店网站下载时,我得到一致的结果,该网站返回的 apk 也取决于设备。

我在这里遗漏了什么,或者当包含 .so 文件时,应用程序包不是最佳选择,并且最好再次使用拆分 APK?

【问题讨论】:

  • 你是否在 build.gradle 文件中添加了ndk { abiFilters "armeabi-v7a", "arm64-v8a" }
  • @SilverskyTechnology 是的。问题不在于 32 位 lib 最终会出现在 64 位 apk 中,只是生成的 apk 似乎只是一个压缩文件而不是压缩文件

标签: android android-ndk android-app-bundle


【解决方案1】:

重要的不是 APK 的文件大小,而是应用的下载大小和应用的设备大小 .

当您构建 App Bundle 时,默认情况下,Play 会在生成的 APK 中保留未压缩的原生库 (.so)。虽然这会导致更大的 APK 文件,但这会导致:

  • 为用户减少下载量,因为在线压缩可以更有效,
  • 设备上的应用程序更小,因为 Android 平台可以将 .so 文件直接映射到内存中,而无需先将它们提取到目录中(从而将未压缩的 .so 文件的副本保存在磁盘上)。

bundletool 实际上提供了一个命令get-size,它会为您估算下载大小。在实践中,当可以应用更好的压缩算法时,这个大小通常会更小,但这是 Play 的最大努力。

这是video from Google I/O 2019,他们解释了您可以测量的不同大小类型之间的差异(在 15:55),以及 Play 如何帮助减小应用程序的大小。

希望对你有帮助,

【讨论】:

  • 感谢您的信息。但是有一个问题:内部应用程序是否共享具有代表性的测量工具?虽然 bundletool 将显示估计为 59MB 的 apk 下载大小,但通过内部应用共享链接下载该应用将给我 103MB 的下载量。
  • 不,不对内部应用共享进行任何优化。
  • 但所有其他测试轨道都应该有它。
  • 嘿 Pierre,既然您似乎是这方面的首席工程师,我有一个简单的问题:ia check 看哪个尺寸?当我运行它时,它会警告我的应用程序超过了 4MB 的限制,但是当我查看 App Bundle 中的 APK 时,我的下载大小只有 3.1 MB。 bundle-tool get-size 命令提供 3.1 MB。只是想知道,因为我遇到了 2MB .so 文件的问题,我想知道我是否需要解决如何减少它的麻烦,或者是否实际考虑了下载大小因为它与即时应用程序有关。
猜你喜欢
  • 2019-04-02
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多