AndroidAnnotations 没有生成,空 Activity

标签 android gradle android-studio android-annotations

我正在尝试在 Android Studio 中使用 AndroidAnnotations 创建一个项目。当我构建并运行该项目时,一切似乎都可以正常编译,但除了该应用程序的空白 Activity 外,我什么也得不到。此外,AndroidAnnotations 似乎没有生成任何内容。

我添加了 androidannotations-api-2.7.1.jar 作为我项目的依赖项,并启用了注释处理,处理器路径是 androidannotations-2.7.1.jar 的路径,它位于与 androidannotations-api-2.7.1.jar 不同的文件夹中。我已经检查了与模块内容根目录相关的存储生成源,并为源尝试了许多不同的目录——从 generatedgen/aa,再到(当前)build/source/aa 以匹配生成的文件似乎是在 Android Studio 中创建的位置。没有任何效果。我已将 list 中的 Activity 名称更改为 Activity_,并将配置设置为在项目运行时启动它。

我仅有的其他依赖项是 android-support-v4 和 ActionBarSherlock。我已经尝试禁用这两个,但没有结果。我最初计划将 Roboguice 与 AndroidAnnotations 结合使用,但暂时禁用了它以尝试专注于此问题。

我也在使用或尝试使用 Gradle。这是目前我的 build.gradle:

buildscript {
  repositories {
    maven { url 'http://repo1.maven.org/maven2' }
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}

apply plugin: 'android'

dependencies {
  compile files('libs/android-support-v4.jar')
  compile files('libs/actionbarsherlock-4.3.1.jar')
  compile files('libs/androidannotations-api-2.7.1.jar')
}

android {
  compileSdkVersion 17
  buildToolsVersion "17.0.0"

  defaultConfig {
    minSdkVersion 7
    targetSdkVersion 17
  }
}

但是,我还没有真正弄清楚 Gradle 是如何工作的,所以我主要只是像普通项目一样手动添加依赖项,然后将编译行放入 Gradle 中,这样项目才能正确编译。我知道这可能不是正确的使用方法。

我的activity和它的布局是相当标准的,我只是从官方指南中复制它们以开始使用AndroidAnnotations。

更新:所以我回到 Maven 来测试构建,我注意到了一些奇怪的事情。似乎即使我如何在 Maven 中设置它,也没有生成任何东西。但是,通过 Maven 构建,我可以在不将 list 中的 Activity 名称更改为 Activity_ 的情况下运行项目,并且项目将正确编译和运行。这很奇怪,似乎它可能会进一步混淆问题,或者如果它也表明 Gradle 存在某些问题,则可以简化问题。

最佳答案

这类似于robotoaster的响应,但它在0.4.1中有效,它将生成的java源文件放在一个新目录中(与其他生成的源文件夹一致),这允许Android Studio看到源并停止提示.它还适用于更多注释处理器。只需将注释处理器添加到“apt”配置即可。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.1'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

ext.daggerVersion = '1.0.0';
ext.androidAnnotationsVersion = '2.7.1';

configurations {
    apt
}

dependencies {
    apt "com.googlecode.androidannotations:androidannotations:${androidAnnotationsVersion}"
    compile "com.googlecode.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
    apt "com.squareup.dagger:dagger-compiler:${daggerVersion}"
    compile "com.squareup.dagger:dagger:${daggerVersion}"
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 17
    }
}

android.applicationVariants.all { variant ->
    aptOutput = file("${project.buildDir}/source/apt_generated/${variant.dirName}")
    println "****************************"
    println "variant: ${variant.name}"
    println "manifest:  ${variant.processResources.manifestFile}"
    println "aptOutput:  ${aptOutput}"
    println "****************************"

    variant.javaCompile.doFirst {
        println "*** compile doFirst ${variant.name}"
        aptOutput.mkdirs()
        variant.javaCompile.options.compilerArgs += [
                '-processorpath', configurations.apt.getAsPath(),
                '-AandroidManifestFile=' + variant.processResources.manifestFile,
                '-s', aptOutput
        ]
    }
}

更新:这仍然可以编译,但是使用 Android Studio 0.1.1 你不能再用 UI 编辑你的项目结构,所以你不能告诉 AS 查看新的源文件夹。我想将该文件夹添加到 sourceSet,但变体似乎实际上没有自己的 sourceSet,所以我不确定将它放在哪里

更新 2:您可以让 Android Studio 0.1.1 识别 apt 生成的源文件,方法是在项目浏览器中右键单击 build/source/apt_generated/debug 并选择 将目录标记为->源根目录

更新 3:从 gradle 插件 0.5.5 开始,android.applicationVariants.each 不再工作。请改用 android.applicationVariants.all。请参阅 android.com 处的变更日志: 访问变体容器不会强制创建任务。 这意味着 android.[application|Library|Test]Variants 在评估阶段将为空。要使用它,请使用 .all 而不是 .each

关于AndroidAnnotations 没有生成,空 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16683944/

相关文章:

android - 更新到 Android Studio 3.2 时出现 Gradle 错误

android - 如何在应用程序图标上显示未读消息数

java - 结合 Realm.io 和 Firebase

grails - 电子邮件插件Gradle或Grails?

gradle - Jaxp问题?使用gradle无法找到org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

android - React Native on Android : Unable to determine the current character, 它不是字符串、数字、数组或对象

Java android room 对象来映射

Android 访问另一个应用程序的数据库

java - 错误: Unfortunately you can't have non-Gradle Java modules and > Android-Gradle modules in one project

xml - 如何添加 Maven 依赖(Android Studio)