2013-03-07 87 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'] 
     } 
    } 
}