我有一个基于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代码 - 而且似乎只有从密钥生成的证书是不同的。
在我的情况下,我不知道自己正在使用调试密钥库文件进行发布。在项目/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"
}
}
我在用gradle构建签名的.aab文件时遇到了相同的问题。它与Gradle缓存问题有关。我只是重新启动了在系统中运行的Gradle守护程序,并清洁Gradle Cache。
./gradlew --stop
./gradlew clean
./gradlew bundleRelease
它解决了问题。
这里唯一的解决方案是从一个新的钥匙开始。以前的密钥是从PKCS12格式导入的,我认为某种程度上使Gradle代码生成了与Jarsigner不同的证书。