我的情况是我有多种口味的应用程序。对于前者 开发,舞台,制作口味。
因此,dev将指向dev服务器url,dev app id等,同样适用于舞台和制作。 对于我的strings.xml中存在的app id,我可以使用以下代码替换它们 -
variant.mergeResources.doLast {
File valuesFile = file("${buildDir}/res/all/${variant.dirName}/values/values.xml")
println("Replacing app id in " + variant.dirName)
String content = valuesFile.getText('UTF-8')
def appid;
String variantDirName = variant.dirName;
if (variantDirName.contains("dev")) {
appid = '1234_dev'
} else if(variantDirName.contains("stage")) {
appid = '1234_stage'
} else if(variantDirName.contains("prod")) {
appid = '1234_prod'
} else {
appid = '1234_unknown'
}
content = content.replaceAll(/some_app_id/, appid)
valuesFile.write(content, 'UTF-8')
}
我的strings.xml是 -
<string name="app_id">some_app_id</string>
现在,服务器URL作为常规常量存储在我的Config.java文件中 -
public static final String BASE_URL = "http://dev.blahblah.com";
所以问题是如何根据不同的风格从我的build.gradle文件中更改Config.java中的这一行?
答案 0 :(得分:8)
您可以使用BuildConfig作为Xavier悲伤。例如:
在产品口味中
productFlavors {
develop {
applicationId "com.dexode.cree.develop"
ext.enableCrashlytics = false
buildConfigField "String", "API_URL", "\"https://api.test.dexode.com/2.3\""
}
beta {
applicationId "com.dexode.cree.beta"
ext.enableCrashlytics = true
buildConfigField "String", "API_URL", "\"https://api.dexode.com/2.3\""
}
production {
ext.enableCrashlytics = true
buildConfigField "String", "API_URL", "\"https://api.dexode.com/2.3\""
}
所以现在你的BuildConfig看起来像:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.dexode.cree.develop.debug";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "develop";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0.0_debug";
// Fields from product flavor: develop
public static final String API_URL = "https://api.test.dexode.com/2.3";
}
在代码中使用:
RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint(BuildConfig.API_URL);
请记住刷新BuildConfig文件的内容。 AndroidStudio喜欢缓存文件。您可以点击文件 - &gt;同步
答案 1 :(得分:5)
您不应该编辑这样的现有任务的输出,这将打破增量支持,每次构建时,它都会重新运行mergeResource任务(因为它的输出已更改)。
在这种情况下,我只需使用resConfig
和buildConfigField
动态创建BuildConfig