【发布时间】:2013-10-01 13:41:35
【问题描述】:
我想知道根项目是否有办法在其依赖项中定义/注入一些属性。更具体地说,我遇到的问题是库项目必须知道在运行组装/编译任务之前是采用“免费”还是“专业”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']
}
}
...
}
}
库: 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 部分)让我大部分时间都在猜测该怎么做,所以我做了很多反复试验(但现在我有点卡住了)。
【问题讨论】:
-
您是否尝试过将“库”项目设为普通项目。 gradle 的依赖管理意味着你可以像使用库项目一样使用任何项目。
-
我有,但是我在构建时遇到了其他问题。我认为问题在于,作为普通项目构建的其他库生成了构建系统(或我)不知道如何将其包含到主项目/APK 中的 APK。不过我可能会再试一次,看看我能不能换一种方式。
-
您可以共享该设置的代码吗?
-
您希望我分享代码的具体设置是什么?将库作为项目构建的那个?
-
抱歉回复晚了...我的意思是您使用标准项目依赖项而不是库依赖项的代码。我认为很明显,图书馆不可能做到这一点。我已经用
ant做了类似的事情,但必须研究一个 gradle 实现。
标签: java android groovy gradle android-studio