NSc*_*ock 10 android gradle android-annotations android-studio
我正在尝试在Android Studio中使用AndroidAnnotations创建项目.当我构建并运行项目时,一切似乎编译得很好,但我只得到应用程序的空白活动.此外,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中创建生成文件的位置.没有任何效果.我已将清单中的活动名称更改为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
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我还没有弄清楚Gradle是如何工作的,所以我大多只是手动添加依赖项,就像普通项目一样,然后将编译行放在Gradle中,这样项目就可以正常编译.我知道这可能不是使用它的正确方法.
我的活动及其布局是相当标准的,我只是从官方指南中复制它们以开始使用AndroidAnnotations.
更新:所以我回到Maven用它来测试构建,我注意到一些奇怪的东西.似乎即使我在Maven中设置了它,也没有生成任何东西.但是,使用Maven构建,我可以在不更改清单中的活动名称的情况下运行项目Activity_
,项目将编译并正确运行.这是非常奇怪的,似乎它可以进一步混淆问题,或者如果它也表明了Gradle的某些东西,则可以简化它.
Ale*_*umb 26
这类似于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
]
}
}
Run Code Online (Sandbox Code Playgroud)
更新:这仍然可以编译,但是使用Android Studio 0.1.1,您无法再使用UI编辑项目结构,因此您无法告诉AS查看新的源文件夹.我想将文件夹添加到sourceSet,但变体似乎实际上没有自己的sourceSets,所以我不确定它放在哪里.
更新2:您可以通过在项目浏览器中右键单击build/source/apt_generated/debug并选择Mark Directory As-> Source Root来让Android Studio 0.1.1识别apt生成的源文件
更新3:由于gradle插件0.5.5不再android.applicationVariants.each
起作用.请android.applicationVariants.all
改用.请参阅android.com上的更改日志:
访问variants容器不要强制创建任务.这意味着android.[application | Library | Test]变量在评估阶段将为空.要使用它,请使用.all而不是.each
在这里得到答案以及在我的Google+问题上回答我的+ Hugo Visser的帮助我得到了这个build.grade配置,它允许使用gradew构建并在Android Studio中添加apt输出路径作为源directorys.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots/'
}
}
ext.androidAnnotationsVersion = '3.0-SNAPSHOT';
configurations {
apt
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 10
targetSdkVersion 17
}
}
def getSourceSetName(variant) {
return new File(variant.dirName).getName();
}
android.applicationVariants.all { variant ->
def aptOutputDir = project.file("build/source/apt")
def aptOutput = new File(aptOutputDir, variant.dirName)
println "****************************"
println "variant: ${variant.name}"
println "manifest: ${variant.processResources.manifestFile}"
println "aptOutput: ${aptOutput}"
println "****************************"
android.sourceSets[getSourceSetName(variant)].java.srcDirs+= aptOutput.getPath()
variant.javaCompile.options.compilerArgs += [
'-processorpath', configurations.apt.getAsPath(),
'-AandroidManifestFile=' + variant.processResources.manifestFile,
'-s', aptOutput
]
variant.javaCompile.source = variant.javaCompile.source.filter { p ->
return !p.getPath().startsWith(aptOutputDir.getPath())
}
variant.javaCompile.doFirst {
aptOutput.mkdirs()
}
}
Run Code Online (Sandbox Code Playgroud)
更新:更新为gradle android插件0.5.5; 变成android.applicationVariants.each
了android.applicationVariants.all
归档时间: |
|
查看次数: |
12295 次 |
最近记录: |