【问题标题】:gradle assembleRelease uses wrong key/certificategradle assembleRelease 使用错误的密钥/证书
【发布时间】:2014-02-01 04:06:37
【问题描述】:

我有一个基于 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

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

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

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

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

【问题讨论】:

  • 如果您有与证书相同签名的旧 apk,请尝试将其安装在设备中。如果它取代它是完美的。我一直在使用相同的签名没有错。
  • 这是一个全新的应用程序,所以没有旧的 apk。如果我使用 IntelliJ 的“生成签名 apk”构建它,则两个生成的 apk 未使用相同的证书进行签名(在尝试将一个安装在另一个之上时获取 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES)。执行证书指纹转储表明 IntelliJ 生成的证书使用了正确的证书(但无法上传到 google play,因为它是可调试的)。
  • 尝试清理然后构建一次。用这个清洁gradle clean
  • 已经试过了,没有变化。
  • 这很令人惊讶,因为完全相同的东西在这里对我来说非常有效。您使用的是哪个版本的 gradle?尝试注释掉您的签名配置并尝试从命令和 intellij 构建它们应该会引发一些错误。

标签: android gradle android-studio keytool signing


【解决方案1】:

在我的情况下,我不知道我正在使用调试密钥库文件进行发布。在项目/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"
    }
}

【讨论】:

    【解决方案2】:

    我在使用 gradle 构建签名的 .aab 文件时遇到了同样的问题。 它与 gradle 缓存问题有关。 我刚刚重新启动了在我的系统中运行的 gradle 守护线程并清理了 gradle 缓存。

    ./gradlew --stop
    ./gradlew clean
    ./gradlew bundleRelease
    

    它解决了问题。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-02-10
        • 2014-05-06
        • 1970-01-01
        • 2013-12-21
        • 2020-09-01
        • 2017-08-18
        • 2019-01-11
        • 1970-01-01
        相关资源
        最近更新 更多