1

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

但是让我们从头开始:

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

  1. 很多之前的步骤...
  2. 创建apk文件
  3. 签署apk 文件(修改 apk)
  4. 压缩apk 文件(修改 apk)

我在这里找到了一些信息:
zipalign

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

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

也许有人比我在这里找到的技术背景信息更多:
签署您的应用程序

谢谢,如果有人有一些有用的,技术上更详细的信息。
卢克

4

1 回答 1

1

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

于 2015-01-27T00:51:21.640 回答