包含 .so 文件时,Android 应用程序包生成的 APK 大小很大

P.M*_*lch 2 android android-ndk android-app-bundle

我有一个项目,其中包含几个特定于 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 以及从内部应用测试播放商店站点下载时,我得到一致的结果,该站点返回 apk 也取决于设备。

我是否在这里遗漏了一些东西,或者在包含 .so 文件时应用程序包不是最佳选择,最好再次使用拆分 APK?

Pie*_*rre 7

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

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

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

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

这是来自 Google I/O 2019的视频,其中解释了您可以测量的不同类型大小之间的区别(15:55),以及 Play 帮助减少应用程序大小的方法。

希望有所帮助,

  • 否,不会针对内部应用程序共享执行任何优化。 (2认同)
  • 但所有其他测试轨道都应该有它。 (2认同)