如何从productflavor

时间:2016-07-15 09:40:29

标签: android android-studio jenkins gradle

我需要为不同的构建环境启用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'
}

现在我的问题是

  1. 如何从dev1和dev2产品调用任务enableFabric 口味?
  2. 当我运行gradle脚本时,我得到任务enableFabric中版本名称无法识别属性的错误?
  3. 在defaultConfig中使用buildConfigField 'boolean', 'USE_FABRIC', 'true'也不适用于我。当我使用

    if(BuildConfig.USE_FABRIC == true){    // 做一点事 }

  4. 在Java代码中。

1 个答案:

答案 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;
}