You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用无密钥密码的新上传密钥签名AAB应用包

问题描述

近期需要在Google Play商店(内部测试轨道)为名下应用注册新的上传密钥,本次操作流程和此前方案存在差异:之前使用keytool创建.jks格式密钥时,系统会要求为密钥别名设置对应密码。

原有实现方案是将storeFile & storePassword以及多组key<Flavor>Alias & key<Flavor>Password参数存储在keystore.properties文件中,该方案运行稳定,项目中的build.gradle会遍历所有产品风味,为每个风味匹配分配对应的签名配置。

本次按照Google Play控制台给出的操作指引,在CLI中执行以下命令生成新证书:

keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks

keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks 

执行完成后上传密钥已成功创建,但全程未提示设置密钥密码。

核心疑问:执行gradle bundle<Flavour>Release命令构建应用时,在无对应密钥密码的情况下该如何正确完成签名配置?

当前项目配置详情如下:

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystorePropertiesFileExists && keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    ndkVersion rootProject.ext.ndkVersion
    compileSdkVersion rootProject.ext.compileSdkVersion
    signingConfigs { }
    defaultConfig {
        applicationId <application-id>
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        resValue "string", "build_config_package", <application-id>
    }
    flavorDimensions "default"
    productFlavors {
        Staging { applicationId "<application-id>.staging" }
        RC { applicationId "<application-id>.rc" }
        Production {}
    }
    buildTypes {
        debug { signingConfig null }
        release {
            productFlavors.all { flavor ->
                flavor.signingConfig = android.signingConfigs.create("${flavor.name}")
                flavor.signingConfig.storeFile = rootProject.file(keystoreProperties["storeFile"])
                flavor.signingConfig.storePassword = keystoreProperties["storePassword"]
                flavor.signingConfig.keyAlias = keystoreProperties["keyAlias${flavor.name}"]
                flavor.signingConfig.keyPassword = keystoreProperties["keyPassword${flavor.name}"]
            }
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            debuggable false
        }
    }
}

另外项目使用fastlane的supply工具完成应用上传流程,咨询该场景下是否需要调整相关命令配置。


解决方案

1. 未提示设置密钥密码的原因

执行keytool生成密钥时如果没有加-keypass参数,在非交互式环境(包括部分CI环境、新版JDK默认配置)下,keytool会默认将密钥条目密码(keyPassword)设置为和密钥库密码(storePassword)完全一致,不会单独弹出密码设置提示,并非没有设置密钥密码。
可以执行以下命令验证该逻辑:

keytool -keypasswd -alias upload -keystore keystore.jks

输入密钥库密码后,会提示当前密钥密码和密钥库密码相同,直接确认即可。

2. Gradle签名配置调整

不需要修改原有遍历产品风味的签名逻辑,仅需调整keystore.properties中的参数即可:

  • 所有风味的keyAlias<FlavorName>统一填写为upload(生成密钥时指定的别名就是upload)
  • 所有风味的keyPassword<FlavorName>直接填写和storePassword相同的密钥库密码

keystore.properties配置参考:

storeFile=./keystore.jks
storePassword=你设置的密钥库密码
keyAliasStaging=upload
keyPasswordStaging=你设置的密钥库密码
keyAliasRC=upload
keyPasswordRC=你设置的密钥库密码
keyAliasProduction=upload
keyPasswordProduction=你设置的密钥库密码

配置完成后直接执行原有gradle bundle<Flavour>Release命令即可正常完成签名,无需改动build.gradle中的现有逻辑。

3. Fastlane supply配置调整

不需要修改supply工具的核心上传逻辑,仅需确认supply读取的签名后aab文件路径和原有配置一致即可。supply本身不校验密钥密码,只负责上传构建完成的正式制品,只要Gradle构建出的aab是用新上传密钥正确签名的,原有上传命令可以直接复用。

注意:如果之前在fastlane中配置了json_key_file等服务账号认证参数,不需要做任何改动,这部分配置和上传密钥无关联。


内容的提问来源于stack exchange,提问作者joshuaaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:57:19