使Studio/Gradle项目同时在本地和其他项目内部构建

使Studio/Gradle项目同时在本地和其他项目内部构建,gradle,android-studio,build-process,subproject,Gradle,Android Studio,Build Process,Subproject,我不知道这种情况有多普遍,但以下是对我有效的方法。问题是:这是明智的,还是有更好的办法 tl;博士: 主项目OpenKeychain() |-Git子模块KeybaseLib() |-Git子模块jsoup() 为所有三个项目的Android Studio和Gradle设置了目录结构。这意味着在项目根目录下有一个特殊命名的目录(我喜欢对库类型的项目使用“Lib”),源代码从root/Lib/src/main/…开始 open-keychain |- settings.gradle [1] |-

我不知道这种情况有多普遍,但以下是对我有效的方法。问题是:这是明智的,还是有更好的办法

tl;博士:

主项目OpenKeychain()
|-Git子模块KeybaseLib()
|-Git子模块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]中的内容是什么,这样我就可以逐步构建KeybaseLib&也可以从openkeychain根和KeybaseLib根进行jsoup

[1]

[2]

[3]

[4]


与尝试修改Gradle风格的项目路径相比,我认为为模块提供一致的单元素名称并在settings.Gradle中重新映射目录更简单

请注意,Gradle只支持一个settings.Gradle文件(尽管查看您的问题,我认为您并没有假设它会同时使用这两个文件,但您希望它一次使用一个)。我还隐约记得一个Android Studio bug,如果一个项目中有多个settings.gradle文件,它就会出错。我不记得这个bug的本质,我在bug数据库中的搜索也没有找到它,但是如果你看到不好的行为,请给这个答案添加一条评论

话虽如此,它的工作原理如下。警告:我还没有实际测试过这段代码,但它应该可以让您开始;如果你有问题,让我知道,我可以修改我的答案

打开keychain的settings.gradle:

KeybaseLib的settings.gradle:

这里有一个关于重新映射模块的相关问题:

open-keychain
|- settings.gradle [1]
|- OpenKeychain
  |- build.gradle [2]
|- extern
  |- KeybaseLib
    |- settings.gradle [3]
    |- Lib
       |- build.gradle [4]
       |- jsoup
    include ':extern:KeybaseLib:Lib'
    include ':extern:KeybaseLib:jsoup:Lib'
dependencies {    
    compile project(':extern:KeybaseLib:Lib')
    ...
}
include 'Lib'
include ':jsoup:Lib'
dependencies {
    // remove trailing ':Lib'
    ppath = project.path
    ppath = ppath.substring(0, ppath.length() - 4)
    compile project(ppath + ":jsoup:Lib")
}
include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'extern/KeybaseLib/jsoup/Lib')
include ':KeybaseLib'
include ':jsoupLib'
project(':KeybaseLib').projectDir = new File(settingsDir, 'Lib')
project(':jsoupLib').projectDir = new File(settingsDir, 'jsoup/Lib')