在Android gradle构建中让多个调味品组影响packageName

在Android gradle构建中让多个调味品组影响packageName,android,android-gradle-plugin,Android,Android Gradle Plugin,我有一个包含两种构建类型(调试/发布)和两个组(语言环境/环境)的构建配置 这是3个不同的轴,我想通过它们来确定构建变量的packageName 但是,似乎我只能为给定的风格设置完整的packageName,然后为构建类型设置packageNameSuffix-尝试为风格设置packageNameSuffix会导致无法为参数[…]找到方法packageNameSuffix()错误 无论如何,这样我就可以得到每个生成的构建变体的包名,大致如下:com.app.LOCALE.ENVIRONMENT.

我有一个包含两种构建类型(调试/发布)和两个组(语言环境/环境)的构建配置

这是3个不同的轴,我想通过它们来确定构建变量的packageName

但是,似乎我只能为给定的风格设置完整的packageName,然后为构建类型设置packageNameSuffix-尝试为风格设置packageNameSuffix会导致
无法为参数[…]找到方法packageNameSuffix()
错误

无论如何,这样我就可以得到每个生成的构建变体的包名,大致如下:
com.app.LOCALE.ENVIRONMENT.TYPE
,而不必将其中一个轴“展开”为构建类型(这将导致重复)


提前感谢。

您可以使用productFlavors和BuildType中的packageName和packageNameSuffix组合,如下所示:

android {
    productFlavors {
        foo {
            packageName "com.example.foo"
            versionName "Foo"
        }
        bar {
            packageName "com.example.bar"
            versionName "Bar"
        }
    }
    buildTypes {
        debug {
            packageNameSuffix ".debug"
            versionNameSuffix "-debug"
        }
        release {
            packageNameSuffix ".release"
            versionNameSuffix "-release"
        }
    }
}
但是,如果您使用的是类似于香料组的东西,那么这可能不适合您。
您还可以查看此代码示例配置,它添加了新的构建类型

您可以使用productFlavors和构建类型中的packageName和packageNameSuffix的组合,如下所示:

android {
    productFlavors {
        foo {
            packageName "com.example.foo"
            versionName "Foo"
        }
        bar {
            packageName "com.example.bar"
            versionName "Bar"
        }
    }
    buildTypes {
        debug {
            packageNameSuffix ".debug"
            versionNameSuffix "-debug"
        }
        release {
            packageNameSuffix ".release"
            versionNameSuffix "-release"
        }
    }
}
但是,如果您使用的是类似于香料组的东西,那么这可能不适合您。
您还可以查看此代码示例配置,它添加了新的构建类型

您可以使用我在这里介绍的解决方案:

简而言之,您可以使用variantFilter找到组合变量,然后从中更新配置(例如appliciationId):

android.variantFilter { variant ->
    def flavorString = ""
    def flavors = variant.getFlavors()
    for (int i = 0; i < flavors.size(); i++) {
        flavorString += flavors[i].name;
    }
    if(flavorString.equalsIgnoreCase("fooBar")) {
        variant.getDefaultConfig().applicationId "com.example.foobar"
    }
}
android.variantFilter{variant->
def flavorString=“”
def flavors=variant.getFlavors()
for(inti=0;i
您可以使用我在这里介绍的解决方案:

简而言之,您可以使用variantFilter找到组合变量,然后从中更新配置(例如appliciationId):

android.variantFilter { variant ->
    def flavorString = ""
    def flavors = variant.getFlavors()
    for (int i = 0; i < flavors.size(); i++) {
        flavorString += flavors[i].name;
    }
    if(flavorString.equalsIgnoreCase("fooBar")) {
        variant.getDefaultConfig().applicationId "com.example.foobar"
    }
}
android.variantFilter{variant->
def flavorString=“”
def flavors=variant.getFlavors()
for(inti=0;i
我认为一种方法是执行多项目,让项目级别表示区域设置轴,这是可行的,因为我只有两个目标区域设置。理想情况下,为了简单起见,我希望避免使用多项目配置,如果可以通过其他方式实现我所追求的效果的话。我想一种方法是使用多项目,让项目级别表示区域设置轴,这是可行的,因为我只有两个目标区域设置。理想情况下,为了简单起见,我希望避免使用多项目配置,如果可以通过其他方式实现我所追求的效果的话。