Gradle中的Android库可以作为依赖项引用其他Android库吗?

11

这种结构是允许的吗?

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | settings.gradle
       | build.gradle
       + libraries/
          + sublib1/
             | build.gradle
          + sublib2/
             | build.gradle
    + lib2/
       | build.gradle

我之前用Ant时能正常工作,但用Gradle时我的项目找不到sublib1或sublib2。

运行gradle时,我会得到以下错误:

* What went wrong:
A problem occurred evaluating project ':libraries:lib1'.
> Project with path ':libraries:sublib1' could not be found in project ':libraries:lib1'.

这是来自MyProjectsettings.gradle文件:

include ':libraries:lib1'
include ':libraries:lib2'

这是来自MyProjectbuild.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

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

android {
    compileSdkVersion 15
    buildToolsVersion "17.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

这是来自 lib1settings.gradle 文件:

include ':libraries:sublib1'
include ':libraries:sublib2'

这是来自lib1build.gradle 文件:

buildscript {
    repositories {
        mavenCentral()
    }

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

apply plugin: 'android-library'

android {
    compileSdkVersion 15
}

这对你有用过吗? - Matt Wolfe
不,我放弃了,回到了Eclipse。 - theJosh
2个回答

3

Gradle似乎不支持多个settings.gradle文件。这个文件应该只出现在项目根目录,并且应该包含所有子项目:

include ':libraries:lib1', ':libraries:lib1:libraries:sublib1', ':libraries:lib1:libraries:sublib2', ':libraries:lib2'

来源:http://www.gradle.org/docs/current/userguide/multi_project_builds.html

多项目构建是指在单个 Gradle 构建中同时构建多个项目。Gradle 支持从简单到复杂的多项目构建,并且可以通过插件和自定义脚本来定制化配置。
多项目构建的一个好处是可以减少重复工作,因为它们可以共享构建逻辑和代码。此外,多个相关项目也可以更容易地一起构建和测试,从而提高效率并降低错误风险。
要实现多项目构建,需要在根项目中定义子项目。Gradle 允许您指定哪些项目是子项目以及如何构建它们。然后,在 Gradle 构建中运行任务时,Gradle 将会构建所有子项目。

这是否意味着我的库项目不能依赖于其他库项目? - theJosh
1
当然可以,你只需要在settings.gradle中包含它们。至少从纯Gradle的角度来看是这样的。Android团队可能会为这种库项目递归添加更具体的gradle任务,但我迄今没有看到类似的东西。 - lukasz

0

你可以将其他库作为库项目的依赖项。在你的settings.gradle中,只需包含所有应用程序/库模块。

在依赖于另一个库模块的库项目中,只需像项目中的任何其他模块一样将其添加为依赖项。

在我的一个库模块中,Gradle中的依赖项如下所示:

dependencies {
    compile project(':library1')
    compile project(':library2')
    compile project(':library3')
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接