android - 通过重新压缩其内容来减小 APK 大小

标签 android apk

我有一个非常大的 apk 文件,我正在尝试减小它的大小。 已经使用了所有常用技术,例如 Proguard 和图像压缩。尽管如此,apk 还是很大 - 大约 25mb。

Wikipedia说:

APK files are a type of archive file, specifically in zip format packages based on the JAR file format, with .apk as the filename extension.

我最近注意到,如果我解压缩 apk(Android Studio 的 Artifact 输出),使用 7-Zip 重新压缩并签名,那么大小会神奇地减少 2.5mb(至 ~22.5mb)。我可以将它上传到 Play,安装并运行它,没有任何问题。

这是我的问题:

  • 在解压缩和重新压缩过程中是否有任何数据被删除?
  • 如果,为什么 aapt(Android Studio 使用的那个)打包文件 以如此低效的方式?
  • 如果,正在删除哪些数据(请在我的位置发布一些链接 可以阅读更多相关信息)?如果可能会出什么问题 我会用这个方法吗?

谢谢!


编辑 [5/13/2015]:

压缩 APK 内容对我来说效果很好。但是,我必须谨慎对待原始资源(通常放在 res/raw 下)。例如,调用 Resources#openRawResourceFd使用压缩资源作为参数将以以下异常结束:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

因此,请记住将原始资源从压缩中排除。

最佳答案

假设您强制 7zip 使用其 zip 兼容模式 (-tzip) 那么这是一个完全有效的操作(尽管正如@CommonsWare 指出的那样,您极有可能将自己打开某些手机​​上 zip 解包例程的一些错误实现)。

您能够缩小尺寸的原因有两个:

  • 7zip 有一个更好的压缩器,它在压缩时使用更多的 CPU 来产生一个完美兼容但压缩程度更高的表示
  • 传统上用于压缩/打包 Android 文件的 aapt 有一长串文件类型(例如 jpg、png、mp3),它根本不会尝试压缩,因为这些文件类型已经有内部压缩。即便如此,将它们压缩到 apk 文件中通常可以获得几个百分点的 yield

关于android - 通过重新压缩其内容来减小 APK 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425172/

相关文章:

android - GPS 在模拟器上工作,但在设备上不工作

android - 错误 : Program type already present: android. arch.lifecycle.LiveData - 编译错误

android - Sony Xperia Smartwatch MN2 如何在上面安装 Apk 文件?

android - 三星S4支持BLE应用吗?

android openfilechooser 方法不调用已签名的 apk

android - tls 在 android 中使用 session 票证

java - 处理少量网络请求的正确方法

android - 在自定义对话框中显示 MapView?

android - 我可以自己卖一个android APK吗?

android - 添加库/API 会增加 apk 大小吗?