8

当我运行 gradle 任务“assembleDebug”以获得调试版本时,我将它放在我的手机上,它还会生成另一个 apk:MyApp-debug-unaligned.apk。

我想我明白拉链的“对齐”是什么意思。它优化了文件边界的位置以便于解压缩(如果我错了,请纠正我)。这只是一种优化,实际上与 Android 没有太大关系。

因此,由于 Android 将所有应用程序保留为 apk,并且似乎只在运行时解压缩它们,因此只安装对齐的、优化的 apk 将有好处。压缩对齐包也需要看似微不足道的时间,但这可能只是由于我的特定应用程序的大小。

什么时候未对齐的拉链比对齐的替代品更有优势?还是仅仅因为您必须有一个未对齐的版本才能对齐,并且该过程在完成后没有清理未对齐的文件?

4

1 回答 1

3

永远不会使用未对齐的 APK。

它是未经清理的中间产品。在我看来,它应该是。

这个怎么运作:

对齐的作用是将图像和其他大量未压缩数据放在 4 字节边界上。这会增加文件大小,但会导致它们属于某个页面。它避免了为单个图像从 APK 中提取多个页面(即,它最大限度地减少了提取的页面数量)。由于图像以 4 字节边界开始,因此我们不会拾取垃圾数据的可能性更高,这与其他进程有关。

这最终使我可以通过减少页面来浪费更少的 RAM 并更快地运行。一个微不足道但很好的优化

关于所花费的时间,它是比较微不足道的,所以它是值得的。显然,您拥有的未压缩数据越多,花费的时间就越多,但这从来都不是很重要。恕我直言,编译器应该丢弃未对齐的文件,但我想有人想保留它。

资源:

ZipAlign 的公告

http://android-developers.blogspot.com/2009/09/zipalign-easy-optimization.html

当前的 ZipAlign 文档

http://developer.android.com/tools/help/zipalign.html

关于数据结构对齐(阅读关于填充)

https://en.wikipedia.org/wiki/Data_structure_alignment

于 2015-11-04T21:11:36.857 回答