Android Gradle:带有变量的项目依赖关系
我有一个gradle脚本,需要作为依赖项导入,如下所示:Android Gradle:带有变量的项目依赖关系,android,gradle,dependencies,Android,Gradle,Dependencies,我有一个gradle脚本,需要作为依赖项导入,如下所示: compile project(':subproject', { ext.app = 'myApp'; ext.serverUrl = 'https://example.com'; ext.system = 'LIVE'}) 如果我直接在dependency语句中设置变量,这就可以了 由于我有一个用于调试和发布的不同系统,我尝试将这些属性移动到buildTypes: ... debug { debuggable
compile project(':subproject', { ext.app = 'myApp'; ext.serverUrl = 'https://example.com'; ext.system = 'LIVE'})
如果我直接在dependency语句中设置变量,这就可以了
由于我有一个用于调试和发布的不同系统,我尝试将这些属性移动到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
,使用assembleRelease
它应该使用STAGING
。然而,它总是使用发布版本类型变量来编译依赖项
该库已包含publishNonDefault true
这个渐变脚本怎么了?我回答我自己的问题 Gradle未按预期分析Gradle文件。在生成任务时,将在单个步骤中评估闭包。这意味着不存在只有在执行特定任务时才会使用的变量的概念。文件被读取一次,这会导致变量覆盖另一个风格或构建类型的先前值。这也是为什么改变口味顺序会产生不同值的原因 正确的解决方案是定义一个自定义任务,该任务在生成文件后立即运行。该任务将为应用程序的每个变体生成一组任务,这些变体本身包含要执行的配置
这篇文章对我帮助很大:我回答了我自己的问题 Gradle未按预期分析Gradle文件。在生成任务时,将在单个步骤中评估闭包。这意味着不存在只有在执行特定任务时才会使用的变量的概念。文件被读取一次,这会导致变量覆盖另一个风格或构建类型的先前值。这也是为什么改变口味顺序会产生不同值的原因 正确的解决方案是定义一个自定义任务,该任务在生成文件后立即运行。该任务将为应用程序的每个变体生成一组任务,这些变体本身包含要执行的配置
这篇SO文章对我帮助很大:在我看来,gradle总是将最后一个值放入扩展中。如何从其他构建类型获取定义?也许有一个循环?在我看来,gradle总是把最后的值放入扩展中。如何从其他构建类型获取定义?也许是打个圈?