gradle assembleRelease 使用错误的密钥/证书

rad*_*adu 5 android signing keytool gradle android-studio

我有一个基于 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
    }
}
Run Code Online (Sandbox Code Playgroud)

跑完之后

gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)

并从 .apk 中取出 META-INF/CERT.RSA 我运行以下命令:

keytool -list -keystore mykey.jks
Run Code Online (Sandbox Code Playgroud)

keytool -printcert -v -file CERT.RSA
Run Code Online (Sandbox Code Playgroud)

但它们产生具有不同证书指纹的输出。尝试使用来自另一个使用相同密钥(但不是使用 gradle)签名的 apk 的证书会产生正确的证书指纹。

Gradle 似乎可以很好地获取密钥库(更改密码或位置或别名使其停止工作)。

我很困惑,因为我不想向商店发布一些用未知密钥签名的东西,然后无法更新它。我没有在 gradle 中明确定义的调试键。

更新:这与密钥库有关。使用新的密钥库和密钥尝试相同的 gradle 代码可以正常工作。这个有问题的密钥库是从 pkcs#12 格式(.p12 文件)导入的。不过,使用 Intellij 或 jarsigner 可以很好地处理此密钥库,只是 gradle 代码具有不同的输出 - 似乎只有从密钥生成的证书不同。

rad*_*adu 0

这里唯一的解决方案是从新的密钥开始。之前的密钥是从 PKCS12 格式导入的,我认为这会导致 gradle 代码生成与 jarsigner 不同的证书。