1dd63064294febffc20a4611b25ad619 machine1/app-release-unsigned.apk
1dd63064294febffc20a4611b25ad619 machine2/app-release-unsigned.apk
57adfd7c2a7240dc9c3ed79a525f71be machine1/app-release-signed.apk
91e9168e5d5242059408b4fdff0e34aa machine2/app-release-signed.apk
我知道当其他人(确实可以访问My
KeyStore)需要重现构建时,将要重现的构建问题,他们将不得不求助于诸如SymignatureCopproying.。
,但是,我想复制构建,我确实可以访问原始密钥库。这仍然不可能吗?如果是,为什么?如果没有,我必须对我的build.gradle
?
android {
...
signingConfigs {
release {
storeFile file('../keystore.jks')
storePassword 'secret-store-password'
keyAlias 'release-key'
keyPassword 'secret-key-password'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
我至少有部分答案。一般:签名过程包括一个时间戳和/或带有随机数据的时间戳和/或填充,这会导致不同的签名,最终会导致APK文件中的不同字节,并最终到达不同的校验和。 (请参阅Https://crypto.stackexchange.com/questions/73076/why-does-rsassa-pss-pss-produce-different-signature-signature-east-east-each-each-each-even-even-if-i if-i if-i use-same-same-same-same和类似资源)I无法确定是否有使此签名过程可重现的程序。从理论上讲,应该通过一定的时间戳达成共识并共享RNG种子 - 安全问题。
$ # Mismatching checksums due to signature
$ md5sum *
57adfd7c2a7240dc9c3ed79a525f71be app-release-signed-machine1.apk
91e9168e5d5242059408b4fdff0e34aa app-release-signed-machine2.apk
$ md5sum *
57adfd7c2a7240dc9c3ed79a525f71be app-release-signed-machine1.apk
91e9168e5d5242059408b4fdff0e34aa app-release-signed-machine2.apk
1dd63064294febffc20a4611b25ad619 app-release-unsigned-machine1.apk
1dd63064294febffc20a4611b25ad619 app-release-unsigned-machine2.apk
因此,我们已经验证了构建(通过比较未签名的APK),并且可以选择要分发的签名的APK之一。 请参阅
Https://discuss.gradle.org/t/signing-breaks-reproducible-builds/50280/3