Gradle Assemblerelease使用错误的密钥/证书



我有一个基于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不同的证书。

最新更新