让多个flavor组影响Android gradle build中的包名称

时间:2013-11-25 14:05:07

标签: android android-gradle

我有一个构建配置,包含2种构建类型(调试/发布)和2个flavorGroups(区域设置/环境)。

这是3个不同的轴,我想确定所有构建变体的packageName。

但是,似乎我只能为给定的flavor设置完整的packageName,然后为构建类型设置packageNameSuffix - 尝试为flavor调用packageNameSuffix会导致Could not find method packageNameSuffix() for arguments [...]错误。

任何方式,以便我可以获得每个生成的构建变体的包名称,方法是:com.app.LOCALE.ENVIRONMENT.TYPE,而不必将其中一个轴“展开”为构建类型(会导致重复吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用我在此处撰写的解决方案:https://stackoverflow.com/a/26585241/4177090

简而言之,您可以使用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"
    }
}

答案 1 :(得分:0)

您可以使用productFlavors和buildTypes的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"
        }
    }
}

但是如果你使用的是类似flavorGroups的东西,那么这可能不适合你。 您还可以查看此代码示例配置,该配置添加了新的buildType https://github.com/bradmcmanus/Gradle-Build-Example/blob/master/GradleBuildExample/build.gradle