我需要为不同的构建环境启用Fabric,并且还要考虑在我们的案例中是否使用Android Studio或CI服务器(jenkins)构建了apk。 我正在考虑使用的方法是:
defaultConfig {
applicationId "com.pack.proj"
minSdkVersion 19
targetSdkVersion 23
versionCode 12
ext.buildNumber = System.getenv("BUILD_NUMBER") ?: "dev"
versionName "1.2.$buildNumber"
signingConfig signingConfigs.inspection
}
productFlavors {
dev1 {
resValue 'string', 'app_name', 'App Name'
resValue 'string', 'base_url', 'http://dev1.server.in/'
buildConfigField 'boolean', 'USE_FABRIC', 'true'
}
dev2 {
resValue 'string', 'app_name', 'App Name'
resValue 'string', 'base_url', 'http://dev2.server.in/'
// ********HOW DO I CALL THE TASK 'enableFabric' FROM HERE*********
}
}
task enableFabric{
if(versionName.contains('dev'))
buildConfigField 'boolean', 'USE_FABRIC', 'false'
else
buildConfigField 'boolean', 'USE_FABRIC', 'true'
}
现在我的问题是
在defaultConfig中使用buildConfigField 'boolean', 'USE_FABRIC', 'true'
也不适用于我。当我使用
if(BuildConfig.USE_FABRIC == true){ // 做一点事 }
在Java代码中。
答案 0 :(得分:1)
将if else直接放在dev2中。或者如果您打算多次使用它,请将其转换为函数而不是任务
例如:
productFlavors {
dev1 {
resValue 'string', 'app_name', 'App Name'
resValue 'string', 'base_url', 'http://dev1.server.in/'
buildConfigField 'boolean', 'USE_FABRIC', 'true'
}
dev2 {
resValue 'string', 'app_name', 'App Name'
resValue 'string', 'base_url', 'http://dev2.server.in/'
buildConfigField 'boolean', 'USE_FABRIC', useFabric()
}
}
在android
区块之外,执行类似的操作
def useFabric() {
if (versionName.contains('dev'))
return false;
else return true;
}