【问题标题】:How to call a gradle task from productflavor如何从 productflavor 调用 gradle 任务
【发布时间】:2016-11-18 11:18:12
【问题描述】:

我需要为不同的构建环境启用 Fabric,并且在我们的例子中还要考虑 apk 是使用 Android Studio 还是 CI 服务器 (jenkins) 构建的。 我正在考虑使用的方法是:

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 脚本时,我收到 versionName is unrecognized property in task enableFabric 的错误?
  3. buildConfigField 'boolean', 'USE_FABRIC', 'true' 在 defaultConfig 中使用时对我不起作用。当我使用

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

在 Java 代码中。

【问题讨论】:

    标签: android android-studio jenkins gradle


    【解决方案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;
    }
    

    【讨论】:

    • 我不想直接在 dev2 中做,因为我还有 20 个其他环境。另外,如果您可以使用示例/示例代码进行解释。
    • 抱歉回复晚了,但 BuildConfig.USE_FABRIC 显示未知变量编译错误。
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2018-10-05
    • 2017-05-26
    • 2017-03-29
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多