【问题标题】:Android APK Raw File Size vs Download Size. How to shrink the Raw File Size?Android APK 原始文件大小与下载大小。如何缩小原始文件大小?
【发布时间】:2017-12-14 22:28:15
【问题描述】:

我使用的是 Android Studio 3.0。当我分析我的 APK 时,我看到以下内容

Raw File Size: 4.1 MB, Download Size 3.3 MB.

为什么不一样?

由于这是一个即时应用程序,它会阻止它被上传。如何在无需更改下载所需的代码/资源的情况下缩小原始文件大小?

【问题讨论】:

标签: android android-studio apk


【解决方案1】:

APK Analyzer 为打包到您的 APK 中的每个文件以及每个“目录”的总体大小(包括总数)提供两种大小。这些大小并不表示您在创建 APK 时获得的压缩(APK 格式与 ZIP 兼容,因此您可以使用unzip -lv qqq.apk 来检查此步骤对压缩总数的影响)。

对于最终用户而言,这两种尺寸实际上都很重要。使用更小的下载大小,他们可以更快地获取您的应用程序,并减少数据计划的浪费。 Raw Size 越小,APK 在用户设备上占用的空间就越小。

但有一些小细节需要考虑。我们以原生库为例(如果您的应用使用 NDK)。

首先,考虑应用程序更新。 Google Chrome 团队 found 表示,如果他们不压缩原生库,应用程序更新会变得相当小。如果您将此增益乘以预期的应用更新次数,就会有很大的优势。

其次,如果你不压缩原生库,你实际上可以减少你的应用程序的磁盘消耗(对于 Android Marshmallow 及更高版本),因为这样,库可以加载到 -放置,无需解压到/data/data/your.app.package/lib

幸运的是,这一切都是通过简单地添加一个属性来管理的:

android:extractNativeLibs="false"

AndroidManifest.xml 文件中的 application 标记。

资产也可以考虑相同的事项:AssetManager 可以从 APK 内部加载它们,而无需将它们解压到磁盘 - 如果资产未在 APK 中压缩。 p>

APK Analyzer 将向您展示 Google Play 如何压缩此类资产以供下载。

【讨论】:

    【解决方案2】:

    来自documentation

    原始文件大小表示实体在磁盘上的解压缩大小,而下载大小表示实体的估计压缩大小,因为它将由 Google Play 提供。

    因此,下载大小几乎总是小于原始文件大小,因为 Google Play 在通过网络传递二进制文件时会进行额外的压缩。

    没有减少原始文件大小的灵丹妙药,只需查看 APK 中空间的使用位置,并找出可以删除的内容。 docs 对此有相当深入的指导。

    【讨论】: