我有一个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脚本有什么问题?
答案 0 :(得分:0)
我回答我自己的问题。
Gradle未按预期解析gradle文件。在生成任务时,将在一个步骤中评估闭包。这意味着没有一个只有在执行特定任务时才会使用的变量的概念。正在读取文件一次,这会导致变量覆盖另一个flavor或buildType的先前值。这也是为什么改变口味的顺序导致不同的值的原因。
正确的解决方案是定义在生成文件后立即运行的自定义任务。该任务将为应用程序的每个变体生成一组任务,这些任务本身包含配置操作。
这篇SO文章帮助了我很多:How to get current buildType in Android Gradle configuration