我在Android Studio中有一个带有两个Product Flavors的项目。它们实际上是相同的,除了它们中的一些硬编码值,例如URL,ID以及是否激活其他一些功能。
我希望能够只有一种风格并将这些硬编码值移到某种配置/属性文件中,现在通用代码可以根据需要在启动时读取或预加载。然后,我想要使用某种gradle命令,使用不同的配置/属性文件创建不同的APK。
这样,如果我想为应用程序创建另一个配置(我上面提到的属性的组合),我不必复制(和维护)另一个产品风味来执行此操作。
如果这一切都可以在Android Studio中完成,而不是命令行,那就太棒了。有人可以告诉我一种方法吗?
命令行解决方案也可以接受,但理想情况下,它必须是独立于操作系统的,因为我们的一些开发人员在MAC上工作,而其他人在PC上工作。
我和我周围的其他Android开发人员亲自调查了这一点。但我们在gradle框架内找不到任何允许我概述的灵活性的东西。
除了可以在build.gradle中设置的预先配置的android参数之外,我们找不到任何可以配置我们自己的属性的东西,这会影响构建。
我们可以看到唯一的解决方案是将具有硬编码值的重复Product Flavors更改为我们想要的新配置。我们不惜一切代价避免这种情况。
答案 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]
希望我能正确地解释这一点,并且它可以帮助其他人。