为什么在签名过程后进行zipaligning?

时间:2015-01-24 10:20:20

标签: android sign android-build zipalign

我最近问自己为什么在android中我们必须首先签署然后zipalign 这个apk。我搜索了一些背景信息,这些过程在技术上是如何工作的。我仍然有点不高兴,因为这些描述并没有真正从技术上解释为什么这个序列是必要的。

但是让我们从头开始:

我知道在apk-build-process中遵循以下顺序是必要的

  1. 以前的很多步骤......
  2. 创建apk文件
  3. 签署 apk文件(修改apk)
  4. zipaligning apk文件(修改apk)
  5. 我在这里找到了一些信息:
    zipalign

    很明显,zipalign会将内部对齐到4字节边界,这样所有都可以用mmap加载。 似乎签名过程会破坏这种对齐。因此,签名后必须在流程结束时调用zipaligning。

    但为什么可以在不破坏apk的签名的情况下重新对齐apk内容?
    在修改后的apk中,apk被修改并且签名不应该有效,我想......

    也许有人比我在这里找到的更具技术背景信息:
    Signing your application

    谢谢,如果有人有一些有用的,技术上更详细的信息 路加

1 个答案:

答案 0 :(得分:1)

APK的数字签名是通过散列APK组件来执行的。因此,您正在保护单个文件的内容,而不是它们在内存中的位置。换句话说,APK内容已签名,但APK本身不是单个文件。正确地说,zipalign只是填充APK中的文件,因此它们从对齐的边界开始,更有效地mmap(2)(并且能够轻松地丢弃文件)。但是,内容不会改变,因此不会违反签名。