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


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

  • 应用/
    • 应用1/
      • 构建.gradle
      • 设置.gradle
    • 图书馆/
      • 图书馆1/
        • 构建等级
        • 设置.gradle
      • 图书馆2/
        • 构建等级
        • 设置.gradle
      • 图书馆3/
        • 构建等级
        • 设置.gradle
      • 图书馆4/
        • 构建等级
        • 设置.gradle

应用程序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 {
    ...
}

App1不直接依赖 library3 或者 library4, 但是,如果我不将它们包含在依赖项中,它会抱怨 build.gradle 文件和 settings.gradle 文件。所以,我把它们包括在内只是为了阻止它抱怨。

应用程序1/设置.gradle

include ':'
include '..:libraries:library1'
include '..:libraries:library2'
include '..:libraries:library3'
include '..:libraries:library4'

图书馆1

库1/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

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

android {
    ...
}

库1/settings.gradle

include ':'
include '..:library3'
include '..:library4'

库2..4

库2..4/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

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

android {
    ...
}

库2..4/settings.gradle

include ':'

当试图 gradlew clean buildApp1 我收到以下错误:

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号线是 compile project(':..:library3') 在里面 library1/build.gradle 文件。

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

有帮助吗?

解决方案

在您的顶级 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时找不到这些库。单独构建每个库以验证它们都构建正常。

其他提示

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

--- App
   |--- Library 2
   |--- Library 1
       |--- Library 3
       |--- Library 4

如果是,您的应用程序不需要导入库3和4。这些依赖项可通过库 1 获得。

关于settings.gradle 文件。为什么每个模块都有一个?该文件仅在根项目(如 Eclipse 工作区)中用于引用您的模块(App、Library 1、Library 2 等...)

这对你有帮助吗?

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

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


include  ':odb2'
include  ':azure'

include ':carBase'
include ':fuelTrackerLib'
include ':comsourcecastlelogbook'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top