我想知道根项目是否有办法在其依赖项中定义/注入一些属性.更具体地说,我遇到的问题是库项目必须知道在运行汇编/编译任务之前是否采用"自由"或"专业"java源和其他资源.有点像为库项目指定产品风格(继承自它的父项目),但Gradle的Android插件不支持.更改库项目结构,即创建"免费"和"专业"库不是一种选择.
编辑: 到目前为止我设法达到的最好成绩是这样的:
root: build.gradle
android {
...
productFlavors {
free, pro
}
sourceSets {
free {
project(':..:lib') {
groupFreePro = 'free'
// java.srcDirs = ['src', 'free/src']
}
}
pro {
project(':..:lib') {
groupFreePro = 'pro'
// java.srcDirs = ['src', 'pro/src']
}
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
library: gradle.build
android {
...
sourceSets {
main {
java.srcDirs = [groupFreePro + '/src']
res.srcDirs = [groupFreePro + '/res']
}
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
这样我将groupFreePro变量注入lib项目.但这种方法存在问题:
当lib项目得到它的android - > sourceSets任务时,groupFreePro总是被设置为"pro".我认为这是因为根项目中的所有sourceSet都被读取(而不仅仅是我想要构建的一个变体;例如"free")因此最后一个set/task总是覆盖任何先前设置的groupFreePro值.
如果我尝试以任何其他方式设置groupFreePro的值,它会被覆盖(如上例所示),或者我不知道应该调用此变量注入的东西来将变量设置为适当的任务/时间/地点期望值.java.srcDirs在根项目中取消注释也无济于事.
我尝试自己解决这些问题,但我对Gradle很新,而且缺乏适当的文档(至少对于Android部分而言)让我猜测大部分时间都要做什么,所以我做了很多试验和错误(但现在我有点卡住).