在使用Gradle进行组装时,如何为单个Android构建产品风味提供多种配置?

时间:2015-03-10 12:14:44

标签: android android-studio gradle android-gradle android-productflavors

我在Android Studio中有一个带有两个Product Flavors的项目。它们实际上是相同的,除了它们中的一些硬编码值,例如URL,ID以及是否激活其他一些功能。

我希望能够只有一种风格并将这些硬编码值移到某种配置/属性文件中,现在通用代码可以根据需要在启动时读取或预加载。然后,我想要使用某种gradle命令,使用不同的配置/属性文件创建不同的APK。

这样,如果我想为应用程序创建另一个配置(我上面提到的属性的组合),我不必复制(和维护)另一个产品风味来执行此操作。

如果这一切都可以在Android Studio中完成,而不是命令行,那就太棒了。有人可以告诉我一种方法吗?

命令行解决方案也可以接受,但理想情况下,它必须是独立于操作系统的,因为我们的一些开发人员在MAC上工作,而其他人在PC上工作。

我和我周围的其他Android开发人员亲自调查了这一点。但我们在gradle框架内找不到任何允许我概述的灵活性的东西。

除了可以在build.gradle中设置的预先配置的android参数之外,我们找不到任何可以配置我们自己的属性的东西,这会影响构建。

我们可以看到唯一的解决方案是将具有硬编码值的重复Product Flavors更改为我们想要的新配置。我们不惜一切代价避免这种情况。

1 个答案:

答案 0 :(得分:1)

好像我问得太快了:D。

我们公司的其他人设法使用构建类型来解决问题。

例如,假设我们想要一个布尔变量来说明应用程序是否应该以“测试模式”运行。我们可以使用buildConfigField参数定义“TEST_MODE_ENABLED”变量。您可以在gradle文件中定义“testing”构建类型,如下所示(请参阅上一个构建类型):

buildTypes {
    debug {
        debuggable true
        buildConfigField "boolean", "TEST_MODE_ENABLED", "false"
    }

    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        buildConfigField "boolean", "TEST_MODE_ENABLED", "false"
    }

    testing {
        debuggable true
        buildConfigField "boolean", "TEST_MODE_ENABLED", "true"
    }
}

然后可以通过引用在java代码中访问此参数和其他参数:

BuildConfig.TEST_MODE_ENABLED

通过这个概念,我们可以创建任意数量的配置,然后使用这些额外的构建类型定义其他构建变体。

我们也可以使用gradlew,例如:

gradlew assemble[ProductFlavour][BuildType]

希望我能正确地解释这一点,并且它可以帮助其他人。