我不知道这种情况有多普遍,但这对我有用。问题是:这是理智的,还是有更好的方法?
tl;博士:
dependencies {
// remove trailing ':Lib'
ppath = project.path
ppath = ppath.substring(0, ppath.length() - 4)
compile project(ppath + ":jsoup:Lib")
}
主项目 OpenKeychain (https://github.com/open-keychain/open-keychain)
|-Git 子模块 KeybaseLib (https://github.com/timbray/KeybaseLib)
|- Git 子模块 jsoup ( https://github.com/timbray/jsoup )
为所有三个项目设置了 Android Studio 和 Gradle 的目录结构。这意味着在项目根目录下有一个特殊命名的目录(我喜欢将“Lib”用于库类型项目),并且源代码从 root/Lib/src/main/...
open-keychain
|- settings.gradle [1]
|- OpenKeychain
|- build.gradle [2]
|- extern
|- KeybaseLib
|- settings.gradle [3]
|- Lib
|- build.gradle [4]
|- jsoup
好的,问题是,[1]、[2]、[3] 和 [4] 中的内容是什么,以便我可以从 open-keychain 根和 KeybaseLib 根 gradle-build KeybaseLib 和 jsoup?
[1]
include ':extern:KeybaseLib:Lib'
include ':extern:KeybaseLib:jsoup:Lib'
[2]
dependencies {
compile project(':extern:KeybaseLib:Lib')
...
}
[3]
include 'Lib'
include ':jsoup:Lib'
[4]
dependencies {
// remove trailing ':Lib'
ppath = project.path
ppath = ppath.substring(0, ppath.length() - 4)
compile project(ppath + ":jsoup:Lib")
}
最佳答案
与其尝试修改 Gradle 式的项目路径,不如为您的模块提供一致的单元素名称并重新映射 settings.gradle 中的目录会更简单。
请注意,Gradle 仅支持单个 settings.gradle 文件(尽管查看您的问题,我认为您并没有假设它会同时使用它们,但您希望它一次使用一个)。我还隐约记得一个 Android Studio 错误,如果项目中有多个 settings.gradle 文件,它会出错。我不记得错误的性质,并且我在错误数据库中的搜索没有找到它,但是如果您发现不良行为,请在此答案中添加评论。
话虽如此,这就是它的工作原理。警告:我还没有实际测试过这段代码,但它应该能让你开始;如果您有问题,请告诉我,我可以修改我的答案。
open-keychain 的 settings.gradle:
include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/jsoup/Lib')
KeybaseLib 的 settings.gradle:
include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'jsoup/Lib')
这里有一个关于重新映射模块的相关问题:
Android studio add external project to build.gradle
关于gradle - 在本地和另一个项目中构建 Studio/Gradle 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25270646/