编辑: 到目前为止,我最成功的做法类似于这样:
根: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']
}
}
...
}
}
library: gradle.build
android {
...
sourceSets {
main {
java.srcDirs = [groupFreePro + '/src']
res.srcDirs = [groupFreePro + '/res']
}
}
...
}
}
这样我就可以将 groupFreePro 变量注入到 lib 项目中。但是这种方法存在一个问题:
当 lib 项目到达它的 android -> sourceSets 任务时,groupFreePro 总是设置为 "pro"。我认为这是因为根项目中读取了所有 sourceSets(而不仅仅是我想要构建的一个变体;例如 "free")因此最后一个 set/task 始终会覆盖先前设置的任何 groupFreePro 的值。
如果我尝试以其他方式设置 groupFreePro 的值,它要么被覆盖(如上述情况),要么我不知道应该在哪个任务/时间/地点调用此变量注入操作以将变量设置为所需的值。取消注释根项目中的 java.srcDirs
也没有帮助。
我曾试图自己解决这些问题,但我对 Gradle 还很陌生,而且缺乏适当的文档(至少对于 Android 部分)常常让我猜测该做什么,因此我做了很多尝试和错误(但现在我有点卡住了)。
ant
做过类似的事情,但需要研究一下 gradle 的实现。 - Saad Farooq