0

我正在将 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-新的构建系统

正如预期的那样,这解决了我的问题 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
4

4 回答 4

2

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

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

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

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

于 2013-03-13T01:16:30.550 回答
2

要将 Android Annotations 集成到您的项目中,请将以下内容添加到项目的 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 Annotations。要保持基于 Eclipse 的项目结构,您可以像以前一样调整文件夹:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}
于 2014-12-23T13:52:00.503 回答
1
  1. you are using wrong gradle android plugin (com.google.tools plugin developed by Google)
  2. androidannotations plugin uses com.jvoegele.gradle.plugins.android plugin and you don't have to add it to build.gradle as androidannotations plugin will fetch it itself.
  3. Use ADT 21 or earlier as gradle-android-plugin cannot understand version which is not integer number (1.2.2-SNAPSHOT can)
于 2013-04-30T21:03:00.150 回答
0

例如,您可以查看 build.gradle 文件

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

于 2013-05-06T13:08:51.413 回答