在 Android 中对 Gradle 产品风格和构建类型使用不同的签名

Use different signature for Gradle product flavour and build type in Android

提问人:Serj 提问时间:8/6/2022 最后编辑:Serj 更新时间:8/9/2022 访问量:617

问:

我有一个 Android build.gradle.kts,具有多种风格、多种构建类型和不同的签名配置,如下所示:

    android {

        signingConfigs {
            create("lite-release") {
                storeFile = file("myLiteReleaseKey.keystore")
                storePassword = "litePassword"
                keyAlias = "MyLiteReleaseKey"
                keyPassword = "litePassword"
            }

            create("full-release") {
                storeFile = file("myFullReleaseKey.keystore")
                storePassword = "litePassword"
                keyAlias = "MyFullReleaseKey"
                keyPassword = "litePassword"
            }

            create("lite-alpha") {
                storeFile = file("myLiteAlphakey.keystore")
                storePassword = "password"
                keyAlias = "MyLiteReleaseKey"
                keyPassword = "password"
            }

            create("full-alpha") {
                storeFile = file("myFullAlphaKey.keystore")
                storePassword = "password"
                keyAlias = "MyFullReleaseKey"
                keyPassword = "password"
            }
        }

        buildTypes {
            getByName("release") {
                isMinifyEnabled = true
                isShrinkResources = true
            }

            create("alpha") {
                initWith(getByName("release"))

                versionNameSuffix = "-alpha"
                applicationIdSuffix = ".alpha"
            }
        }

        flavorDimensions += "app"
        productFlavors {

            create("lite") {
                dimension = "app"
            }

            create("full") {
                dimension = "app"
            }
        }
    }

即使它应该是简单的事情,我在尝试分配签名时也被卡住了。 它应该是这样的..

    productFlavors.getByName("lite") {
       buildTypes.getByName("release") {
            signingConfig = signingConfigs.getByName("lite-release")
       }
    }

    productFlavors.getByName("full") {
       buildTypes.getByName("release") {
            signingConfig = signingConfigs.getByName("full-release")
       }
    }

..但是当我构建“liteRelease”时,它需要最后一个赋值,即上面示例中“full-release”的签名。

你能给我一个提示,告诉我如何正确地做到这一点吗?

android-gradle-plugin build.gradle gradlew gradle-kts

评论


答:

0赞 Serj 8/9/2022 #1

最后,这完成了工作:

gradle.startParameter.taskNames.forEach {
    when {
        it.contains("LiteRelease", true) -> {
            productFlavors.getByName("lite") {
                signingConfig = signingConfigs.getByName("lite-release")
            }
        }
        it.contains("FullRelease", true) -> {
            productFlavors.getByName("full") {
                signingConfig = signingConfigs.getByName("full-release")
            }
        }
    }
 }

它有点容易出错,但我找不到其他有效的东西。