java - Android Gradle 将外部库和嵌套的外部库添加到项目中

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


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

  • 应用程序/
    • 应用程序1/
      • build.gradle
      • settings.gradle
    • 图书馆/
      • 图书馆1/
        • build.grade
        • settings.gradle
      • 图书馆2/
        • build.grade
        • settings.gradle
      • 图书馆3/
        • build.grade
        • settings.gradle
      • 图书馆4/
        • build.grade
        • settings.gradle

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

App1 不直接依赖于 library3library4,但是,如果我不将它们包含在 build.gradle 的依赖项中,它会报错 文件和 settings.gradle 文件。所以,我把它们包括在内只是为了阻止它提示。

App1/settings.gradle

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

图书馆1

library1/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

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

android {
    ...
}

library1/settings.gradle

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

图书馆2..4

library2..4/build.gradle

buildscript {
    ...
}

apply plugin: 'android-library'

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

android {
    ...
}

library2..4/settings.gradle

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 文件中的 compile project(':..:library3')

如何将外部库和嵌套的外部库添加到 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 时没有找到这些库。单独构建每个库以验证它们都可以构建。

https://stackoverflow.com/questions/21001232/

相关文章:

eclipse - 用ant构建eclipse项目

c++ - 在 Visual Studio 中运行小型 C++ 程序而不创建项目

java - 如何创建一个包含 shell 脚本和不在 jar 中的属性文件的 maven 程序集?

build - Dojo 1.8 和构建(或缺少)

java - Gradle:如何使用并排项目配置多项目设置

powershell - 如何显示 Visual Studio Online 构建任务 Write-

build - 何时使用门控值机?

process - 为什么要自动化构建?

node.js - Nodejs npm 步骤在 TeamCity 的每个构建中下载包

javascript - 如何在 Grunt 目标之间共享文件?