我正在尝试在 Android Studio 中使用 AndroidAnnotations 创建一个项目。当我构建并运行该项目时,一切似乎都可以正常编译,但除了该应用程序的空白 Activity 外,我什么也得不到。此外,AndroidAnnotations 似乎没有生成任何内容。
我添加了 androidannotations-api-2.7.1.jar
作为我项目的依赖项,并启用了注释处理,处理器路径是 androidannotations-2.7.1.jar 的路径
,它位于与 androidannotations-api-2.7.1.jar
不同的文件夹中。我已经检查了与模块内容根目录相关的存储生成源,并为源尝试了许多不同的目录——从 generated
到 gen/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/