android - ZipAlign 验证

标签 android

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

The resource-handling code in Android can efficiently access resources when they're aligned on 4-byte boundaries by memory-mapping them. But for resources that are not aligned (i.e. when zipalign hasn't been run on an apk), it has to fall back to explicitly reading them—which is slower and consumes additional memory.

运行工具后,可以使用命令验证对齐。

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

最佳答案

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

想法是能够对未压缩的 block 进行内存映射并直接访问它们。比方说,如果您的 PNG 解码器尝试以 32 位整数的形式访问数据,并且您有一个仿真器模拟最坏情况的 ARM CPU 行为并在您进行未对齐的 32 位访问时抛出 SIGBUS,那么您不能简单地如果未对齐,则访问图像数据。

zlib inflate 代码不关心数据是否对齐,因此 zipalign 不关心对齐压缩数据。

关于android - ZipAlign 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543520/

相关文章:

android - 使用Qt时如何在android中阻止后退键

Android:JSONDownloader 返回空字符串

android - 如何使用LiveData在ViewModel中启动Kotlin Coroutine

android - 即使调用了 setResult,也不会调用 onActivityResult

android - 调整 EditText 高度时的边框问题

android - 如何在 Android 设备上获得一致的触摸大小?

android - ListView 中的自定义复选框

android - ListView 分隔线不可见

android - 不同的 Facebook 应用程序使用相同的 key 哈希

android - 无法在 Android 上调试 Adob​​e AIR 移动应用程序