Android中为Gradle产品变种与构建类型配置不同签名
解决多Flavor多BuildType的签名配置覆盖问题
问题原因
你之前的配置逻辑存在错误:在Product Flavor中直接修改全局Build Type的签名配置,导致后设置的配置覆盖先设置的。release是全局共享的Build Type,当你在full flavor中修改它的signingConfig时,会覆盖lite flavor中对release Build Type的修改,最终所有使用release Build Type的变种都会使用最后一次设置的签名。
正确配置方法
方法一:按变种名称自动匹配签名(推荐)
利用你已有的签名配置命名规则([flavor]-[buildType]),遍历所有应用变种并自动绑定对应签名:
android { // 保留你原有的signingConfigs、buildTypes、productFlavors配置不变 applicationVariants.all { // 拼接变种对应的签名配置名称,比如liteRelease对应lite-release val targetSigningConfig = signingConfigs.getByName("${flavorName}-${buildType.name}") signingConfig = targetSigningConfig } }
方法二:逐个指定变种签名(适合自定义命名场景)
如果签名配置命名不统一,可以通过变种名称精准匹配:
android { // 保留你原有的signingConfigs、buildTypes、productFlavors配置不变 applicationVariants.all { signingConfig = when (name) { "liteRelease" -> signingConfigs.getByName("lite-release") "fullRelease" -> signingConfigs.getByName("full-release") "liteAlpha" -> signingConfigs.getByName("lite-alpha") "fullAlpha" -> signingConfigs.getByName("full-alpha") else -> signingConfig // 其他变种保持原有配置(如果有) } } }
验证配置
执行构建命令验证签名是否正确绑定:
./gradlew assembleLiteRelease ./gradlew assembleFullRelease
分别查看两个APK的签名信息,确认各自使用对应配置的签名文件。
内容的提问来源于stack exchange,提问作者Serj
相关产品推荐
相关产品推荐

