Java Android Gradle向项目添加外部库和嵌套外部库

Java Android Gradle向项目添加外部库和嵌套外部库,java,android,build,gradle,android-gradle-plugin,Java,Android,Build,Gradle,Android Gradle Plugin,如何将外部库和嵌套的外部库添加到android项目中 我的项目结构(不允许更改) 应用程序/ 附件1/ 格雷德尔先生 格雷德尔酒店 图书馆/ 图书馆1/ 建筑等级 格雷德尔酒店 图书馆2/ 建筑等级 格雷德尔酒店 图书馆3/ 建筑等级 格雷德尔酒店 图书馆4/ 建筑等级 格雷德尔酒店 附件1 App1/build.gradle buildscript { ... } apply plugin: 'android' dependencies {

如何将外部库和嵌套的外部库添加到android项目中


我的项目结构(不允许更改)

  • 应用程序/
    • 附件1/
      • 格雷德尔先生
      • 格雷德尔酒店
    • 图书馆/
      • 图书馆1/
        • 建筑等级
        • 格雷德尔酒店
      • 图书馆2/
        • 建筑等级
        • 格雷德尔酒店
      • 图书馆3/
        • 建筑等级
        • 格雷德尔酒店
      • 图书馆4/
        • 建筑等级
        • 格雷德尔酒店

附件1 App1/build.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'
App1并不直接依赖于
library3
library4
,但是,如果我没有将它们包括在
build.gradle
文件和
settings.gradle
文件中的依赖项中,它会抱怨。所以,我把它们包括进来只是为了阻止它抱怨

App1/settings.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'

图书馆1 图书馆1/build.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'
library1/settings.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'

图书馆2..4 图书馆2..4/build.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'
library2..4/settings.gradle

buildscript {
    ...
}

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:libraries:library1')
    compile project(':..:libraries:library2')
    compile project(':..:libraries:library3')
    compile project(':..:libraries:library4')
}

android {
    ...
}
include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':..:library3')
    compile project(':..:library4')
}

android {
    ...
}
include ':'
include '..:library3'
include '..:library4'
buildscript {
    ...
}

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    ...
}
include ':'

App1
上尝试
gradlew clean build
时,我收到以下错误:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/user/projects/branches/branch1/Apps/libraries/library1/build.gradle' line: 15

* What went wrong:
A problem occurred evaluating project ':..:library:library1'.
> Project with path ':..:library3' could not be found in project ':..:library:library1'.
第15行是
library1/build.gradle
文件中的
compileproject(':..:library3')

如何向android项目添加外部库和嵌套外部库?

一个问题。 您需要这个依赖关系树吗

--- App
   |--- Library 2
   |--- Library 1
       |--- Library 3
       |--- Library 4
如果是,您的应用程序不需要导入库3和库4。这些依赖项在库1上可用

关于settings.gradle文件。为什么每个模块都有一个?此文件仅在根项目(如Eclipse workspace)中用于引用您的模块(应用程序、库1、库2等)


这对你有帮助吗

在顶级settings.gradle(App1/settings.gradle)文件中,对每个库执行类似操作

include ':library1'   
include ':library2'   
include ':library3'   
include ':library4'   

project(':library1').projectDir = new File(rootProject.projectDir, '../libraries/library1')
project(':library2').projectDir = new File(rootProject.projectDir, '../libraries/library2')
project(':library3').projectDir = new File(rootProject.projectDir, '../libraries/library3')
project(':library4').projectDir = new File(rootProject.projectDir, '../libraries/library4')
删除其他settings.gradle文件,您不需要它们

然后在每个构建脚本中,您只需要使用

compile project (':library1')
compile project (':library2')
etc....
如上所述,只需在根项目(App1)中使用一个settings.gradle文件

然后从App1文件夹运行
gradlew clean:library1:build
,验证library1是否正确构建


至于App1抱怨缺少库3和库4的问题,您确定应用程序中没有直接引用这些库的代码,或者编译library1时找不到库。分别构建每个库以验证它们是否都构建正常。

我正在对相对路径执行此操作:

include '..:ambilWarna'
include '..:excel'
include '..:pdfjet'
include '..:commons'
include '..:volley'


include  ':odb2'
include  ':azure'

include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'

我每个人都做了,他们都做得很好。让你的建议发挥作用仍然有困难。我不断得到一个错误,
评估项目“library2”使用空的生成文件。
您能确认项目定义的路径是否正确吗。也不确定是否在“library2”的from中缺少“:”?是的,它们是正确的。反复检查了好几次。还做了复制和粘贴,以确保。然而,我实际上正在尝试一种不同的方法来解决我的问题,到目前为止,我已经取得了很大的成功。我将在确认结果完全正常后发布结果。我必须使用大括号才能使其正常工作,即
编译项目(“:library1”)
而不是
编译项目:library1'
更新了答案,感谢@tmalsed的提醒。我很好奇熟悉DSL/Groovy设置的人是否能想出一个解析嵌套Settings.gradles的代码片段。这对于子模块尤其有用。目前,在任何地方添加项目都会导致构建在整个链上中断。