我有一个基于gradle的android项目,并试图生成一个发布apk。但是,似乎某种程度上gradle正在拾取错误的密钥/证书。
这就是我在build.gradle中所拥有的:
signingConfigs {
release {
storeFile file("mykey.jks")
storePassword "mypass"
keyAlias "mykey.key"
keyPassword "mypass"
}
}
buildTypes {
release {
debuggable false
jniDebugBuild false
runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
}
运行后
gradlew assembleRelease
从.apk中取出META-INF / CERT.RSA我运行以下内容:
keytool -list -keystore mykey.jks
和
keytool -printcert -v -file CERT.RSA
但它们会产生具有不同证书指纹的输出。尝试使用另一个使用相同密钥签名的apk(但不使用gradle)获得证书指纹。
Gradle好像正在接受密钥库(更改密码或位置或别名使其停止工作)。
我很困惑,因为我不想向使用未知密钥签名的商店发布内容,然后无法更新它。我没有在gradle中明确定义的调试键。
更新:这与密钥库有关。尝试使用相同的gradle代码与新的密钥库和密钥工作正常。这个有问题的密钥库是从pkcs#12格式(.p12文件)导入的。使用Intellij或jarsigner可以正常使用这个密钥库,它只是具有不同输出的gradle代码 - 而且似乎只有从密钥生成的证书是不同的。
答案 0 :(得分:0)
这里唯一的解决方案是从一把新钥匙开始。之前的密钥是从PKCS12格式导入的,我认为这会导致gradle代码生成与jarsigner不同的证书。
答案 1 :(得分:0)
在使用gradle构建签名的.aab文件时,我遇到了同样的问题。 它与gradle缓存问题有关。 我刚刚重新启动了在系统中运行的gradle守护进程线程,并清理了gradle缓存。
./gradlew --stop
./gradlew clean
./gradlew bundleRelease
它解决了问题。
答案 2 :(得分:0)
就我而言,我不知道我正在使用调试密钥库文件进行发布。在project / android / app / build.gradle
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
signingConfig signingConfigs.debug // <-- need to be changed with
//the line below
//signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}