【问题标题】:Android Gradle - send variable to dependencyAndroid Gradle - 将变量发送到依赖项
【发布时间】:2018-09-26 18:18:28
【问题描述】:

我有 gradle 模块:app 和库模块 libApp。他们每个人都有自己的gradle文件。 app.gradle:

productFlavors {
     prod {somevariable = false}
     debug {somevariable = true}
}

dependencies {
    implementation project(':libApp')
}

还有 libApp.gradle:

defaultConfig {
    buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", somevariable
}

如何强制gradle在app模块中编译项目libApp,其中一些变量依赖于产品风格?

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin build.gradle


    【解决方案1】:

    你可以用口味来做到这一点。

    在库模块的 build.gradle 中,定义与变量值对应的风味维度:

    android {
        /* ... */
    
        flavorDimensions "someVar"
    
        productFlavors {
            someVarTrue {
                dimension "someVar"
                buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", 'true'
            }
    
            someVarFalse {
                dimension "someVar"
                buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", 'false'
            }
        }
    }
    

    在应用模块的 build.gradle 中,定义哪个应用风格应该使用哪个库风格:

    android {
        /* ... */
    
        flavorDimensions "environment"
    
        productFlavors {
            prod {
                dimension "environment"
            }
    
            dev {
                dimension "environment"
            } // note: naming a flavor "debug" might create a conflict with the default "debug" configuration
        }
    }
    
    dependencies {
        /* ... */
        prodImplementation project(path: ':libApp', configuration: 'someVarTrue')
        devImplementation project(path: ':libApp', configuration: 'someVarFalse')
    }
    

    您可能想查看this article 了解更多详情。

    【讨论】:

    • 这不起作用,因为您错误地配置了风味名称。 someVarTrue 必须在库中的configurations {} 块中声明,但在其中我们不能声明 buildConfigFields。你确定上面的代码是正确的吗?
    • @taulus 我已经更新了我的答案,它现在应该可以工作了。抱歉,我是在智能手机上凭记忆发布的,弄乱了语法。 ;)
    【解决方案2】:

    您可以在项目级别build.gradle 中创建ext 块,该块封装自定义属性并使它们可用于项目中的所有模块。

    ext {
        somevariable = true
    }
    

    在访问它时,您可以简单地

    defaultConfig {
        buildConfigField "boolean", "SOME_VARIABLE_FROM_APP_MODULE", ext.somevariable
    }
    

    【讨论】:

    • 它会起作用,但我想根据当前构建的风味更改某些变量的值。
    • 您可以在每个风味中设置变量,如图所示here
    • @taulus 只是更新每个风味的值,它应该可以解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多