我想知道根项目是否有办法在其依赖项中定义/注入一些属性。更具体地说,我遇到的问题是库项目必须知道在运行组装/编译任务之前是采用“免费”还是“专业”Java 源代码和其他资源。有点像为库项目指定产品风格(从它的父项目继承),但 Android 插件不支持 Gradle。更改库项目结构,即创建“免费”和“专业”库不是一种选择。
编辑: 到目前为止,我取得的最好成绩是这样的:
根: 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']
}
}
...
}
}
库: gradle.build
android {
...
sourceSets {
main {
java.srcDirs = [groupFreePro + '/src']
res.srcDirs = [groupFreePro + '/res']
}
}
...
}
}
这样我将 groupFreePro 变量注入到 lib 项目中。但是这种方法存在一个问题:
到那时,当 lib 项目进入它的 android -> sourceSets 任务时,groupFreePro 总是设置为“pro”。我认为这是因为根项目中的所有源集都被读取(而不仅仅是我想要构建的一个变体;例如“免费”),因此最后一个集/任务总是覆盖任何先前设置的 groupFreePro 值。
如果我尝试以任何其他方式设置 groupFreePro 的值,它要么被覆盖(如上述情况),要么我不知道我应该调用此变量注入东西以将变量设置为的适当任务/时间/地点所需的值。在根项目中取消注释java.srcDirs
也无济于事。
我尝试自己解决这些问题,但我对 Gradle 真的很陌生,而且缺乏适当的文档(至少对于 Android 部分)让我大部分时间都在猜测该怎么做,所以我做了很多试验和错误(但现在我有点卡住了)。