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