使Studio/Gradle项目同时在本地和其他项目内部构建
我不知道这种情况有多普遍,但以下是对我有效的方法。问题是:这是明智的,还是有更好的办法 tl;博士: 主项目OpenKeychain()使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] |-
|-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')