【问题标题】:Gradle: project dependency with variablesGradle:带有变量的项目依赖项
【发布时间】:2016-10-20 19:57:57
【问题描述】:

我有一个 gradle 脚本,需要像这样作为依赖项导入:

compile project(':subproject', { ext.app = 'myApp'; ext.serverUrl = 'https://example.com'; ext.system = 'LIVE'})

如果我直接在依赖语句中设置变量,这可以正常工作。

由于我有一个不同的调试和发布系统,我试图将这些属性移动到 buildTypes:

...
    debug {
        debuggable true
        serverUrl = 'https://example.com'
        system = 'TEST'
    }
    prerelease {
        debuggable true
        serverUrl = 'https://example.com'
        system = 'STAGING'
    }
    release {
        serverUrl = 'https://example.com'
        system = 'LIVE'
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
...


dependencies {
    compile project(':subproject', { ext.app = appName; ext.serverUrl = serverUrl; ext.system = system })
}

所以,当我构建assembleDebug 时,它应该使用TEST,而对于assemblePrerelease,它应该使用STAGING。但是它总是使用发布构建类型变量来编译依赖项。

库已经包含publishNonDefault true

这个 gradle 脚本有什么问题?

【问题讨论】:

  • 在我看来,gradle 总是将最后一个值放入扩展名中。如何从其他 buildTypes 获取定义?也许有一个循环?

标签: android gradle dependencies


【解决方案1】:

我回答我自己的问题。

Gradle 未按预期解析 gradle 文件。生成任务时,将在一个步骤中评估闭包。这意味着不存在只有在执行特定任务时才会使用的变量的概念。该文件被读取一次,这会导致变量覆盖另一种风格或 buildType 的先前值。这也是为什么改变风味的顺序会导致不同的值的原因。

正确的解决方案是定义一个在文件生成后立即运行的自定义任务。该任务将为应用程序的每个变体生成一组任务,这些任务本身包含要做什么的配置。

这篇 SO 文章对我帮助很大:How to get current buildType in Android Gradle configuration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 2013-01-30
    • 2011-01-15
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多