由于 androidannotations 插件,Gradle 构建失败

Posted

技术标签:

【中文标题】由于 androidannotations 插件,Gradle 构建失败【英文标题】:Gradle build failing due to androidannotations plugin 【发布时间】: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。 【参考方案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】:
    您使用了错误的 gradle android 插件(谷歌开发的 com.google.tools 插件) androidannotations 插件使用 com.jvoegele.gradle.plugins.android 插件,您不必将其添加到 build.gradle,因为 androidannotations 插件会自行获取。 使用 ADT 21 或更早版本,因为 gradle-android-plugin 无法理解不是整数的版本(1.2.2-SNAPSHOT 可以)

【讨论】:

【参考方案4】:

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

的 build.gradle 文件

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

【讨论】:

以上是关于由于 androidannotations 插件,Gradle 构建失败的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio配置中AndroidAnnotations

[AndroidAnnotations框架]AndroidAnnotations的配置

AndroidAnnotations框架

androidannotations的background和UiThread配合使用參考

在 Scala 和 Gradle 中使用 AndroidAnnotations

Android 最火的高速开发框架AndroidAnnotations使用具体解释