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

时间:2014-02-01 04:06:38

标签: android gradle android-studio keytool signing

我有一个基于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代码 - 而且似乎只有从密钥生成的证书是不同的。

3 个答案:

答案 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"
    }
}