美文网首页瘦身
为什么要zipAlign

为什么要zipAlign

作者: ukyoo | 来源:发表于2019-04-12 23:37 被阅读45次

    ZipAlign

    zipalign是一个存档对齐工具,可为Android应用程序(APK)文件提供重要的优化。目的是确保所有未压缩数据以相对于文件开头的特定对齐开始。具体来说,它会导致APK中的所有未压缩数据(如图像或原始文件)在4字节边界上对齐。对齐以后,系统就能更加快速的调用APP内的资源

    配置

    只需要在项目中gradle中配置zipAlignEnabled, 在构建的时候就会自动帮我们执行

    buildTypes {
        release {
            //Zipalign优化
            zipAlignEnabled true
        }
    
        debug {
            //Zipalign优化
            zipAlignEnabled false
        }
    }
    
    • 当然也可以手动对齐
      zipalign [-f] [-v] <alignment> infile.apk outfile.apk

    -f :覆盖现有的outfile.zip
    -v :详细输出
    -p :outfile.zip应该对infile.zip中的所有共享对象文件使用相同的页面对齐方式
    -c :确认给定文件的对齐方式

    • 确认是否对齐
      zipalign -c -v <alignment> existing.apk

    注意事项

    • 如果您使用apksigner,则只能在APK文件签名之前执行zipalign 。如果您使用apksigner对APK进行签名并对APK进行进一步更改,则其签名将失效。
    • 如果您使用jarsigner,则只能在APK文件签名执行zipalign 。

    apkSigner是在Android N 引入的新一代签名(V2 signer), 为什么不能再签名后使用zipAlign呢,这一点文档里也有说明

    注意:如果您使用 APK Signature Scheme v2 签署您的应用,并对应用进行了进一步更改,则应用的签名将无效。出于这个原因,请在使用 APK Signature Scheme v2 签署您的应用之前、而非之后使用 zipalign 等工具。

    这是因为V2签名的限制,在第一次签名后,如果二进制的内容有所改变,这个签名就会被无效

    为什么要对齐

    为什么要对齐呢?为什么是4字节呢?
    因为 4* 8 = 32位, CPU读取内存数据的时候,例如32位处理器就是一次只能处理32位,也就是4个字节的数据,如果没有对齐, 假设一个数据从第3个字节开始,那CPU读取这个数据时,就需要跨两个 4字节 ,做拼接的操作才能完成真正的4字节数据的读取.
    如果我们在build时事先做了字节对齐,那么 CPU调用时的效率就会提高很多.

    相关文章

      网友评论

        本文标题:为什么要zipAlign

        本文链接:https://www.haomeiwen.com/subject/bwxkwqtx.html