如何为不同的产品口味维度设置签名配置(signingConfig)?

8
我正在尝试找出如何为生成的不同风味维度指定signingConfig。我已经知道了在使用不同风味时如何做到这一点,但是对于风味维度还不清楚。
目前我已成功地为不同风味维度应用了不同的包名,因此可能可以类似地处理signingConfig
> android.applicationVariants.all { variant ->
>     def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName()
>     def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();
> 
>     if(flavorString.equalsIgnoreCase("amazonFree")) {
>         mergedFlavour.setApplicationId("com.test.amazon.free")
>     }
>     if(flavorString.equalsIgnoreCase("amazonPro")) {
>         mergedFlavour.setApplicationId("com.test.amazon.pro")
>     }
>     if(flavorString.equalsIgnoreCase("googleFree")) {
>         mergedFlavour.setApplicationId("com.test.google.free")
>     }
>     if(flavorString.equalsIgnoreCase("googlePro")) {
>         mergedFlavour.setApplicationId("com.test.google.pro")
>     } }

我的口味设置

// Special flavor dimensions for different markets and
// versions paid and free.
flavorDimensions 'market', 'version'

productFlavors {
    amazon {
        flavorDimension 'market'
    }
    google {
        flavorDimension 'market'
    }
    // Base free version
    free {
        flavorDimension 'version'
        // Need this cause of all the ad libraries we are using :/
        defaultConfig.multiDexEnabled true

        // For now we sign all free versions with this config
        // cause we have no idea how to sign the individual flavor dimensions.
        signingConfig signingConfigs.googleFree
    }
    // Base pro version
    pro {
        flavorDimension 'version'

        // For now we sign all free versions with this config
        // cause we have no idea how to sign the individual flavor dimensions.
        signingConfig signingConfigs.googlePro
    }
}

5
你遇到了相同的问题,你最终解决了吗? - Flo We
2个回答

1

首先,applicationId 可以在 productFlavors 块中应用:

productFlavors {
    amazonFree {
        applicationId 'com.test.amazon.free'
    }
    amazonPro {
        applicationId 'com.test.amazon.pro'
    }
    googleFree {
        applicationId 'com.test.google.free'
    }
    googlePro {
        applicationId 'com.test.google.pro'
    }
}

签名配置可以按照相同的方式针对每个风味进行配置:

productFlavors {
    amazonFree {
        applicationId 'com.test.amazon.free'
        signingConfig  signingConfigs.amazonFree
    }
    amazonPro {
        applicationId 'com.test.amazon.pro'
        signingConfig  signingConfigs.amazonPro
    }
    googleFree {
        applicationId 'com.test.google.free'
        signingConfig  signingConfigs.googleFree
    }
    googlePro {
        applicationId 'com.test.google.pro'
        signingConfig  signingConfigs.googlePro
    }
}

5
谢谢你的答复,但我已经知道如何做了。问题是当你开始使用口味维度时,事情会变得更加复杂。 - Jona
很抱歉。您使用的口味尺寸是什么?能否提供口味配置? - Kirill Boyarshinov
我已经更新了我的问题,包括我的配置文件。 - Jona
我们如何在Kotlin DSL中实现它? - Mohsin Falak

1

当您开始使用flavorDimensions时,为不同的变体设置signingConfig的最佳解决方案是使用androidComponents块。例如:

androidComponents {
        onVariants(selector().all(), { variant ->
            if (variant.name == "xxyyzzGmsRelease") {
                variant.signingConfig?.setConfig(signingConfigs.play_store)
            } else if (variant.name == "xxyyzzHmsRelease") {
                variant.signingConfig?.setConfig(signingConfigs.huawei_store)
            }
        })
    }

已在 Gradle 7.4AGP 7.3.1 上测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接