2013-03-07 88 views
0

我正在将一个gradle构建过程中的oroirdannotations集成到一个通用的android项目中。当我尝试建立与加apply plugin: 'androidannotations我碰到下面的故障项目:由于androidannotations插件造成的Gradle构建失败

$ 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 
+0

请注意'AndroidAnnotations摇篮plugin'已被弃用,不再更新。只要使用'android-apt',我们将在AndroidAnnotations [wiki](https://github.com/excilys/androidannotations/wiki/Building-Project-Gradle)中演示它。 – WonderCsabo 2015-01-24 12:18:52

回答

2

貌似androidannotations插件应用,创建一个processTestResources任务,与我们试图创建任务碰撞的完整的Java插件的gradle。

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

说实话,我们的插件做的事情与普通的Java有很大的不同,插件是为了扩展Java项目而不能在android项目上运行。

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

+0

我很欣赏我的问题的详细分析。我已经把基于Gradle的构建全部放在了我的eclipse env中,除了使用了android注解之外(我不喜欢下划线类名所需的间接方向,我认为android已经足够用于新手工程师,跳上该项目,我知道低杆)。 – 2013-03-22 21:40:47

1
  1. 你正在使用错误的gradle这个Android插件(插件com.google.tools由谷歌开发的)
  2. androidannotations插件使用com.jvoegele.gradle.plugins.android插件,你不必将它添加到由于androidannotations插件将build.gradle自己获取它。
  3. 使用ADT 21或更早版本的Gradle作为,Android的插件无法理解的版本,这是不是整数(1.2.2快照可能)
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' 
    } 
} 

然后应用不是androidannotation作为插件,而是在模块构建中使用'android-apt'。gradle这个

// 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'] 
     } 
    } 
}