Gradle - 使现有的android项目成为其他项目的子项并运行“gradlew tasks”

时间:2015-07-22 13:53:25

标签: gradle android-gradle build.gradle

第1部分。

我有一个用gradle构建的现有Android项目。

settings.gradle看起来像这样:

include ':android', ':androidTest', ':androidTestApp'

build.gradle看起来像这样:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

task customClean(dependsOn: [':android:clean', ':androidTest:clean', ':androidTestApp:clean']) {

}

allprojects {
    repositories {
        mavenCentral()
        mavenLocal()
    }
}

我需要做的是创建一个项目,它是这个android项目的父项,并运行这个android项目任务。我只添加settings.gradle新的根项目include 'android-sdk:android',这是我现在所需要的。一切正常,我可以像gradlew androidBuild一样运行android项目的任务:

task androidBuild(dependsOn: 'android-sdk:android:assemble') << {
    group unitySdkGroupName
}

当我在新的根项目上运行gradlew tasks时会出现问题。我得到了

Caused by: org.gradle.api.UnknownTaskException: Task with path ':android:clean' not found in project ':android-sdk'.

我知道我可以通过删除这样的冒号来解决这个问题,但是如果可能的话,我想以某种方式使任务命令工作而不改变android项目。

    task customClean(dependsOn: ['android:clean', 'androidTest:clean', 'androidTestApp:clean']) {

}

第2部分。

当我向根项目的settings.gradle添加其他嵌套项目时

include 'android-sdk:androidTest'
include 'android-sdk:androidTestApp'

我在依赖于android模块的子项目的依赖项部分中遇到错误(这是androidTest模块):

dependencies {
    compile project(path: ":android")
    compile 'com.google.android.gms:play-services:7.3.0'
}

在刷新项目时得到这个(再次看起来像是相对路径问题):

Error:(30, 0) Project with path ':android' could not be found in project ':android-sdk:androidTest'.

所以问题是 - 我可以在不修改底层Android项目的情况下使gradlew tasks命令正常工作吗?如何以最优雅的方式完成?

1 个答案:

答案 0 :(得分:0)

不幸的是:没有。嵌套的多项目构建是不可能的。我应该添加,但是虽然已经显示了支持它们的意图,但绝对没有迹象表明何时可以预期此功能。

请参阅https://discuss.gradle.org/t/nested-multimodule-builds-with-a-flat-directory-layout/7509/13

我甚至无法在https://discuss.gradle.org/c/bugs

找到功能请求