Я использую Androidstudio 0.8.9 и строю с помощью Gradle.
Я использовал Android-аннотации и работает хорошо. И я также хочу использовать AspectJ, поэтому примените плагин (https://github.com/uPhyca/gradle-android-aspectj-plugin).
Но скомпилировать не получается и выдает какое-то сообщение об ошибке
:app:compileDebugJava Internal compiler error: java.lang.IllegalStateException: java.lang.IllegalArgumentException: Unknown location : SOURCE_OUTPUT at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager.discoverNextProcessor(BatchAnnotationProcessorManager.java:183) :app:compileDebugAspectj FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileDebugAspectj'. > Internal compiler error: java.lang.IllegalStateException: java.lang.IllegalArgumentException: Unknown location : SOURCE_OUTPUT at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager.discoverNextProcessor(BatchAnnotationProcessorManager.java:183) * 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: 13.616 secs Unknown location : SOURCE_OUTPUT at org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager.discoverNextProcessor(BatchAnnotationProcessorManager.java:183) 2:04:32: External task execution finished 'build'.
My build.gradle
is
repositories {
mavenCentral()
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.2+'
classpath 'com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.+'
}
}
def androidAnnotationsVersion = '3.1';
def daggerVersion = '1.0.0';
apply plugin: 'com.android.application'
apply plugin: 'android-aspectj'
apply plugin: 'android-apt'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.flask.aspectjtest"
minSdkVersion 16
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
configurations {
apt
ajc
aspects
ajInpath
}
apt {
arguments {
androidManifestFile variant.processResources.manifestFile
resourcePackageName "com.flask.aspectjtest"
}
}
ext.aspectjVersion = '1.8.2'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:20.0.0'
apt "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
compile "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
apt "com.squareup.dagger:dagger-compiler:${daggerVersion}"
compile "com.squareup.dagger:dagger:${daggerVersion}"
}
Итак, я протестировал работу плагина аспекта в одиночку (без Android-аннотаций) и работает хорошо. И я нахожу ответ (Аннотации Android и MonkeyTalk?), Страница часто задаваемых вопросов АА. Но я думаю, что это было решение для затмения, и я не могу решить свою проблему с этим ответом.
Я изменил обработчик аннотаций android-apt
на ajc
. Но теперь он не может найти файл AndroidManifest.xml. (поскольку конфигурация apt
недоступна)
repositories {
mavenCentral()
maven { url 'http://repo.spring.io/snapshot' }
}
buildscript {
repositories {
mavenCentral()
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.2'
classpath 'com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.+'
}
}
def androidAnnotationsVersion = '3.1';
def daggerVersion = '1.2.2';
apply plugin: 'com.android.application'
apply plugin: 'android-aspectj'
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.flask.aspectjtest"
minSdkVersion 16
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
sourceSets {
main {
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'build/generated/source/apt/${variant.dirName}']
resources.srcDirs = ['src/main/resources']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
}
configurations {
ajc
aspects
ajInpath
}
ext.aspectjVersion = '1.8.2'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:20.0.0'
ajc "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
compile "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
ajc "com.squareup.dagger:dagger-compiler:${daggerVersion}"
compile "com.squareup.dagger:dagger:${daggerVersion}"
}
Теперь,
:app:generateDebugSources UP-TO-DATE Note: Resolve log file to /Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/androidannotations.log Note: Initialize AndroidAnnotations 3.1 with options {} Note: Start processing for 2 annotations on 13 elements error: Could not find the AndroidManifest.xml file, going up from path [/Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug] found using dummy file [] (max atempts: file:///Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug/dummy1412644771646) Note: Time measurements: [Whole Processing = 10 ms], [Extract Annotations = 7 ms], [Extract Manifest = 2 ms], Note: Finish processing Note: Start processing for 0 annotations on 0 elements Note: Time measurements: [Whole Processing = 0 ms], Note: Finish processing 1 error :app:compileDebugJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileDebugJava'. > Compilation failed; see the compiler error output for details. * 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: 3.596 secs Compilation failed; see the compiler error output for details. 10:19:31: External task execution finished 'build'.
androidannotations.log
ниже.
10:17:30.890 [Daemon Thread 2] INFO o.a.AndroidAnnotationProcessor:84 - Initialize AndroidAnnotations 3.1 with options {} 10:17:31.58 [Daemon Thread 2] INFO o.a.AndroidAnnotationProcessor:108 - Start processing for 2 annotations on 13 elements 10:17:31.77 [Daemon Thread 2] ERROR o.a.h.AndroidManifestFinder:134 - Could not find the AndroidManifest.xml file, going up from path [/Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug] found using dummy file [] (max atempts: file:///Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug/dummy1412644651076) 10:17:31.78 [Daemon Thread 2] INFO o.a.p.TimeStats:81 - Time measurements: [Whole Processing = 19 ms], [Extract Annotations = 15 ms], [Extract Manifest = 2 ms], 10:17:31.78 [Daemon Thread 2] INFO o.a.AndroidAnnotationProcessor:122 - Finish processing 10:19:31.568 [Daemon Thread 3] INFO o.a.AndroidAnnotationProcessor:84 - Initialize AndroidAnnotations 3.1 with options {} 10:19:31.637 [Daemon Thread 3] INFO o.a.AndroidAnnotationProcessor:108 - Start processing for 2 annotations on 13 elements 10:19:31.647 [Daemon Thread 3] ERROR o.a.h.AndroidManifestFinder:134 - Could not find the AndroidManifest.xml file, going up from path [/Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug] found using dummy file [] (max atempts: file:///Users/flask/Documents/workspace_android/AspectJTest/app/build/intermediates/classes/debug/dummy1412644771646) 10:19:31.648 [Daemon Thread 3] INFO o.a.p.TimeStats:81 - Time measurements: [Whole Processing = 10 ms], [Extract Annotations = 7 ms], [Extract Manifest = 2 ms], 10:19:31.648 [Daemon Thread 3] INFO o.a.AndroidAnnotationProcessor:122 - Finish processing
dagger
. Просто удалите две строки AA из разделаdependencies
. - person WonderCsabo   schedule 06.10.2014SOURCE_OUTPUT
- это строка конфигурации исходного пути вывода по умолчанию. Если я изменю эту конфигурацию, компиляция может быть успешной?) - person Flask_KR   schedule 06.10.2014android-apt
наajc
. Но теперь он не может найти файл AndroidManifest.xml. Раньшеandroid-apt
можно было установить какой-то аргумент этого. Но уajc
нет. - person Flask_KR   schedule 07.10.2014android-apt
не является обработчиком аннотаций, это плагин, который может добавить обработчик аннотаций в путь к классамgradle
. Вы поступили совершенно неправильно, посколькуajc
— это не плагин обработчика аннотаций, а плагин, который может добавлятьAspectJ
библиотеки в путь к классам. Итак, работает ли он с этим скриптом сборки? - person WonderCsabo   schedule 07.10.2014build.gradle
,AndroidAnnotations
библиотеку, она больше не будет работать. Я хочу использовать обе библиотекиAndroidAnnotations
иAspectJ
в одном проекте. В вашем build.gradle нет библиотекиAndroidAnnotations
, поэтому я не могу использовать функцииAndroidAnnotations
. - person Flask_KR   schedule 08.10.2014build.gradle
. Ошибки не возникает, и я могу использоватьAspectJ
. [отредактировано] И я получил ошибку, когда добавилcompile "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
в разделdependencies
. - person Flask_KR   schedule 08.10.2014androidannotations
как область действияapt
, аandroidannotations-api
— с областью действияcompile
. - person WonderCsabo   schedule 08.10.2014compile "org.androidannotations:androidannotations:${androidAnnotationsVersion}"
был неверным,compile "org.androidannotations:androidannotations-api:${androidAnnotationsVersion}"
правильным (требовалось-api
). Но теперьAspectJ
не смог найти сгенерированные классы AA. Добавляю вопрос вgradle-android-aspectj-plugin
. Спасибо, в любом случае - person Flask_KR   schedule 10.10.2014