【问题标题】:ZipAlign verificationZipAlign 验证
【发布时间】:2013-10-23 13:48:21
【问题描述】:

在 Android 中,ZipAlign 用于在 4 字节边界上对齐资源以加速资源加载:

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 字节的倍数。

【问题讨论】:

    标签: android


    【解决方案1】:

    对齐方式对于压缩数据无关紧要。

    这个想法是能够对未压缩的块进行内存映射并直接访问它们。例如,如果您的 PNG 解码器尝试以 32 位整数的形式访问数据,并且您有一个仿真器可以模拟最坏情况下的 ARM CPU 行为并在您执行未对齐的 32 位访问时抛出 SIGBUS,那么您就不能轻易做到如果未对齐,则访问图像数据。

    zlib 膨胀代码不关心数据是否对齐,因此 zipalign 不会费心对齐压缩数据。

    【讨论】:

      猜你喜欢
      • 2016-10-29
      • 1970-01-01
      • 2016-10-10
      • 2020-06-17
      • 2015-09-11
      • 2011-06-02
      • 1970-01-01
      • 2015-07-11
      • 2014-09-11
      相关资源
      最近更新 更多