是什么导致jarsigner覆盖MANIFEST.MF

时间:2018-06-21 15:42:15

标签: jarsigner manifest.mf

问题是为什么jarsigner有时会覆盖MANIFEST.MF文件,而不是仅将签名项附加到正在签名的jar中的现有MANIFEST.MF文件中。

注意:我将其发布为一个开放式问题,并将针对导致该问题的一种情况提供答案或观察。如果在其他情况或情况下可能发生这种情况,希望其他人会在发布的问题上展开讨论。

1 个答案:

答案 0 :(得分:0)

这是我所见的一种情况。我有一个gradle构建,可构建使用jarsigner创建的调试和发布签名jar。调试jar由android studio提供的默认“ debug.keystore”签名,发布jar由我的私钥存储签名。出于实际目的,这两个罐子几乎相同。两者都包含相同的META-INF / MANIFEST.MF条目。调试jar的jarsigner覆盖了MANIFEST.MF条目。它仅包含签名条目。另一方面,发布jar的jarsigner按预期将签名条目附加到现有MANIFEST.MF文件的末尾。只是为了好玩,我制作了一个“ debug.keystore”的副本,并将其重命名,然后尝试将其用作密钥库。清单文件仍被覆盖。然后,我创建了一个私有密钥库,并使用与debug.keystore中包含的相同的别名cn,o,ou创建它。这次清单文件被附加到而不是被覆盖。这似乎暗示着与密钥库本身相关的东西决定了MANIFEST.MF文件是否被覆盖。很奇怪,但这就是我观察到的。

经过进一步的调查,我发现我原来的MANIFEST.MF文件没有包含“ Manifest-Version”头条目。因此,我添加了该条目,然后尝试使用原始的“ debug.keystore”对调试jar进行签名。这次,这两个jar都将签名条目附加到现有MANIFEST.MF文件的末尾,而不是覆盖MANIFEST.MF文件的调试jar。从这个观察中,我们都可以说是有道理的。但是谁会想到的。我当然找不到任何地方记录的行为。