Vient de passer à Android Studio 3.0, un projet qui compilait avant génère une erreur suivante
Erreur: Java.lang.RuntimeException: les processeurs d'annotation doivent maintenant être déclaré explicitement. Les dépendances suivantes dans la compilation classpath contient des processeurs d'annotation. S'il vous plaît, ajoutez-les à la configuration annotationProcessor.
Cependant, cette following
n'est pas définie. voici à quoi ressemble la compilation dans mon build.gradle
compile('com.crashlytics.sdk.Android:crashlytics:2.6.7@aar') {
transitive = true;
}
compile 'com.Android.support:support-v4:25.3.1'
compile 'com.Android.support:appcompat-v7:25.3.1'
compile 'com.Android.support:design:25.3.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'
compile 'com.jakewharton.timber:timber:4.4.0'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.jpardogo.googleprogressbar:library:1.2.0'
compile 'com.wang.avi:library:2.1.3'
compile 'link.fls:swipestack:0.3.0'
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.codemybrainsout.rating:ratingdialog:1.0.7'
compile 'org.greenrobot:greendao:3.2.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.0-beta5'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
provided 'org.projectlombok:lombok:1.12.6'
Lombok
et Butterknife
posaient des problèmes
J'ai mis à jour ButterKnife et ajouté annotationProcessor for Lombok qui a résolu le problème.
implementation 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
compileOnly 'org.glassfish:javax.annotation:10.0-b28'
compileOnly "org.projectlombok:lombok:1.16.16"
annotationProcessor "org.projectlombok:lombok:1.16.16"
Mettre à jour
Selon le commentaire de @ Beshoy ci-dessous, compile
a été remplacé par implementation
et provided
par compileOnly
voir le message d'erreur après la compilation. il montrera le nom du paquet qui a besoin du processus d'annotation. par exemple:
Error:Execution failed for task ':MPChart_libary:javaPreCompileDebug'.
> Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.
- realm-Android-0.87.5.jar
Alternatively, set Android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future.
See https://developer.Android.com/r/tools/annotation-processor-error-message.html for more details.
nom de recherche "realm-Android-0.87.5" dans le fichier build.gradle du module "MPChart_libary":
dependencies {
provided 'io.realm:realm-Android:0.87.5'
}
corrigez le fichier build.gradle comme suit:
dependencies {
provided 'io.realm:realm-Android:0.87.5'
annotationProcessor 'io.realm:realm-Android:0.87.5' //fix here
}
Ajoutez simplement cette ligne dans defaultConfig:
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
J'ai le même problème avec la bibliothèque MPchart, dans build.gradle du projet MPchart, ajoutez ceci:
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
1- Désactiver le contrôle d'erreur du processeur d'annotation
Si vous avez des dépendances sur le chemin de classe de compilation qui incluent des processeurs d'annotation dont vous n'avez pas besoin, vous pouvez désactiver le contrôle d'erreur en ajoutant les éléments suivants à votre fichier build.gradle. N'oubliez pas que les processeurs d'annotation que vous ajoutez au chemin de classe de compilation ne sont toujours pas ajoutés au chemin de classe de processeur.
Android {
... //others options
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath false
}
}
}
}
Assurez-vous que, dans votre fichier de graduation d'application, vous utilisez:
annotationProcessor
au lieu de
implementation
ou compile
C'est plus facile et plus rapide,
par exemple.
dependencies {
//BUTTERKNIFE
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}