2013-10-23 40 views
8

在Android中,ZipAlign用于对齐4个字节边界的资源来加速资源加载:的zipalign验证

在Android上的资源处理代码可以高效地访问资源 时,他们在4对齐通过内存映射它们来限制字节边界。但是 对于未对齐的资源(即,当zipalign未在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字节的倍数。

回答

6

对齐对压缩数据无关紧要。

这个想法是能够存储映射未压缩的块并直接访问它们。比方说,如果你的PNG解码器试图以32位整数访问数据,并且你有一个模拟最坏情况ARM CPU行为的模拟器,并且当你做一个未对齐的32位访问时抛出一个SIGBUS,那么你就不能平凡地如果未对齐,则访问图像数据。

zlib膨胀代码不关心数据是否对齐,所以zipalign不会打扰对齐压缩数据。

+0

这很有道理,谢谢! –