gradle - 在本地和另一个项目中构建 Studio/Gradle 项目

标签 gradle android-studio build-process subproject

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

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/

相关文章:

android - 如何让 gradle 重命名中间文件?

android - 使用 Gradle 在复制期间重命名目录

spring-boot - gradle-如何在integarion测试之前启动spring boot服务器-使用Maven如此简单

build-process - 用于 C++ 项目构建自动化的 NAnt 脚本

c# - 如何获取构建过程模板中的参数值

c++ - SCons 库和子库

android - gradle Android studio : "Cannot invoke method get() on null object" 错误

java - Gradle 项目同步失败 - Android Studio

android - 无法将 ffmpeg 集成为 Android NDK 项目的 native 依赖项

android - java.util.zip.ZipException : duplicate entry: android/support/v7/graphics/drawable/DrawableUtils. 类