【问题标题】:Gradle build failing due to androidannotations plugin由于 androidannotations 插件,Gradle 构建失败
【发布时间】:2013-02-23 00:31:24
【问题描述】:

我正在将 andoirdannotations 集成到一个 gradle 构建过程到一个通用的 android 项目中。当我尝试通过添加 apply plugin: 'androidannotations 来构建项目时,出现以下错误:

$ gradle clean

FAILURE: Build failed with an exception.

* What went wrong:
Main Manifest missing from /tmp/RunTest/src/main/AndroidManifest.xml

注意(1):我想维护通用的android项目结构。 注意(2):我已经成功构建/清理了这个项目,没有 androidannotations 插件

build.gradle 文件:

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.android.tools.build:gradle:0.3'
    classpath 'net.ealden.gradle.plugins:gradle-androidannotations-plugin:0.3.0'
  }
}
apply plugin: 'android'
apply plugin: 'androidannotations'


repositories {
  mavenCentral()
}


android {
    def target = 'android-21'
    def androidAnnotationsVersion = '2.7.1'
    sourceSets {
        main {
            manifest {
                srcFile 'AndroidManifest.xml'
            }
            java {
                srcDir 'src'
            }
            res {
                srcDir 'res'
            }
            assets {
                srcDir 'assets'
            }
            resources {
                srcDir 'src'
            }
        }
        test {
            java {
                srcDir 'tests/src'
            }
        }
    }
}

因此,我放弃了尝试维护通用 android 项目结构并将项目目录结构强制转换为此处指出的结构:http://tools.android.com/tech-docs/new-build-system/using-the-new-build-system

正如预期的那样,这解决了我的Main Manifest missing from /tmp/RunTest/src/main/AndroidManifest.xml,但是我仍然没有得到快乐。

现在我得到了:

MyBox:RunTest $ gradle clean
Download http://repo1.maven.org/maven2/net/ealden/gradle/plugins/gradle-androidannotations-plugin/0.3.0/gradle-androidannotations-plugin-0.3.0.pom
Download http://repo1.maven.org/maven2/org/gradle/api/plugins/gradle-android-plugin/1.1.0/gradle-android-plugin-1.1.0.pom
Download http://repo1.maven.org/maven2/net/ealden/gradle/plugins/gradle-androidannotations-plugin/0.3.0/gradle-androidannotations-plugin-0.3.0.jar
Download http://repo1.maven.org/maven2/org/gradle/api/plugins/gradle-android-plugin/1.1.0/gradle-android-plugin-1.1.0.jar

FAILURE: Build failed with an exception.

* What went wrong:
Cannot add task ':processTestResources' as a task with that name already exists.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 9.28 secs

【问题讨论】:

  • 请注意AndroidAnnotations Gradle plugin 已弃用且不再更新。只需使用android-apt,正如我们在AndroidAnnotations 中展示的那样wiki

标签: android gradle android-annotations


【解决方案1】:

看起来 androidannotations 插件应用了完整的 Java gradle 插件,该插件创建了一个 processTestResources 任务,该任务与我们试图创建的任务发生冲突。

很遗憾我们使用了相同的名称,但实际上您并不想将完整的 Java 插件应用到使用 android 插件的项目中。 android 插件仅应用基本 Java 插件(提供创建 Java 编译任务的能力,但不创建由完整 Java 插件创建的默认任务)。

说实话,我们的插件做的事情与常规 Java 非常不同,旨在扩展 Java 项目的插件(目前)还不能在 android 项目上运行。

您遇到的第一个错误看起来像是我们遇到的问题(但在重现时遇到了问题),其中抛出了一些异常,但 Gradle 忽略了它,跳过了评估 DSL 的其余部分,并继续尝试构建。由于跳过了 sourceSets 重新映射,因此它在错误的地方寻找 Manifest。

【讨论】:

  • 感谢对我的问题的详细分析。除了使用android注释之外,我已经为我的eclipse env放弃了基于Gradle的构建(我不喜欢下划线类名所需的间接性,我认为android已经有足够的间接性供新手工程师尝试跳上这个项目,我知道的低标准)。
【解决方案2】:

要将 Android 注释集成到您的项目中,请将以下内容添加到项目的 build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        // other classpathes like gradle here, in my case
        classpath 'com.android.tools.build:gradle:1.1.0'

        // APT Dependency for annotation processing
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

然后在你的模块的 build.gradle 中应用不是 androidannotation 作为插件,而是 'android-apt'

// apply apt plugin from global gradle file
apply plugin: 'android-apt'

并将以下内容添加到构建文件中:

// Tell apt where to find sources
apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile

        // adjust the path to your module here
        resourcePackageName 'de.company.app'
    }
}

dependencies {
    // Android Anotations for clean and readable code
    apt "org.androidannotations:androidannotations:3.2"
    compile 'org.androidannotations:androidannotations-api:3.2'
}

那么您应该能够在您的项目中使用 Android 注释。 要保持基于 Eclipse 的项目结构,您可以像以前一样调整文件夹:

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

【讨论】:

    【解决方案3】:
    1. 您使用了错误的 gradle android 插件(谷歌开发的 com.google.tools 插件)
    2. androidannotations 插件使用 com.jvoegele.gradle.plugins.android 插件,您不必将其添加到 build.gradle,因为 androidannotations 插件会自行获取。
    3. 使用 ADT 21 或更早版本,因为 gradle-android-plugin 无法理解不是整数的版本(1.2.2-SNAPSHOT 可以)

    【讨论】:

      【解决方案4】:

      作为示例,您可以查看来自

      的 build.gradle 文件

      https://github.com/ealden/android-annotations-idea-test/blob/master/build.gradle

      【讨论】:

        猜你喜欢
        • 2020-12-22
        • 2018-01-12
        • 2021-07-08
        • 2020-01-16
        • 2014-04-13
        • 2017-08-14
        • 2015-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多