在Android中,ZipAlign用于在4个字节的边界上对齐资源,以加速资源加载:
Android中的资源处理代码可以通过内存映射在4字节的边界上有效地访问资源。但是对于没有对齐的资源(即当and对齐还没有在apk上运行时),它必须返回显式读取它们--这会更慢,并且会消耗额外的内存。
运行该工具后,可以使用该命令验证对齐。
zipalign -c -v 4 application.apk这将生成一个报告,并告诉是否存在错误。在我的例子中,这个报告没有表示对齐错误,但是第一个数字(我假设它是资源在最终APK中的位置)似乎表明一些资源没有在4个字节边界上对齐。
以下是本报告的开头:
Verifying alignment of APP-signed-aligned.apk (4)...
50 META-INF/MANIFEST.MF (OK - compressed)
24245 META-INF/KEYS.SF (OK - compressed)
49830 META-INF/KEYS.DSA (OK - compressed)
50683 AndroidManifest.xml (OK - compressed)
53096 assets/Assets/DB_Normal.db (OK)
595425 assets/Assets/Common/DM/Structures.xml (OK - compressed)我错过了什么?第一个数字是资源的位置吗?例如,Structures.xml似乎位于595425,它不是4个字节的倍数。
发布于 2013-10-23 17:47:16
对于压缩数据来说,对齐并不重要。
这样做是为了能够记忆-映射未压缩的块并直接访问它们。如果您的PNG解码器试图以32位整数的形式访问数据,并且您有一个仿真器来模拟最坏情况下的ARM CPU行为,并在进行未对齐的32位访问时抛出SIGBUS,那么如果图像数据不对齐,就不能随意地访问它。
zlib充气代码不关心数据是否对齐,因此zipalign不麻烦对齐压缩的数据。
https://stackoverflow.com/questions/19543520
复制相似问题