1

我不知道这种情况有多普遍,但这对我有用。问题是:这是理智的,还是有更好的方法?

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")
}
4

1 回答 1

1

与其尝试修改 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 将外部项目添加到 build.gradle

于 2014-08-12T19:49:26.037 回答