Je viens de commencer à utiliser Android et à essayer d'utiliser la bibliothèque de salle. Depuis hier, je suis confronté à ce message d'avertissement
w: [kapt] Traitement d'annotation incrémentiel demandé, mais la prise en charge est désactivée car les processeurs suivants ne sont pas incrémentiels: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL).
J'ai essayé de rechercher et de corriger mais je n'ai pas pu éviter cette erreur. Voici mon fichier grale.build. veuillez suggérer/conseiller ce que je fais mal.
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt'
Android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "ps.room.bookkeeper"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.Android.material:material:1.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// life cycle dependencies
def lifecycle_version = "2.0.0"
implementation "Android.Arch.lifecycle:extensions:$lifecycle_version"
kapt "Android.Arch.lifecycle:compiler:$lifecycle_version"
//Room dependencies
//def room_version = "2.1.0"
implementation 'Android.Arch.persistence.room:runtime:2.1.0'
kapt 'Android.Arch.persistence.room:compiler:2.1.0'
//annotationProcessor 'Android.Arch.persistence.room:compiler:2.1.0'
// implementation "Android.Arch.lifecycle:extensions:$room_version"
// kapt "Android.Arch.persistence.room:compiler:$room_version"
// androidTestImplementation "Android.Arch.persistence.room:testing:$room_version"
//implementation 'androidx.room:room-runtime:2.1.0'
//annotationProcessor 'androidx.room:room-compiler:2.1.0'
}
Il y a un bug dans la version kotlin-gradle-plugin de 1.3.50 comme @Necrontyr l'a mentionné. Il suffit de rétrograder la version kotlin dans build.gradle (Project) à 1.3.41.
Ajoutez simplement cette ligne à gradle.properties:
kapt.incremental.apt=true
Le vrai problème est que le traitement incrémentiel accélère les choses, mais si l'un des processeurs d'annotation n'est pas incrémentiel, aucun d'entre eux ne sera réellement traité de cette manière.
Quel est le but du traitement incrémentiel?
À partir de version 1.3.30 + , le traitement incrémentiel a permis aux modules de ne pas être entièrement traités à nouveau chaque fois qu'un changement se produit, donnant au processus de construction de meilleures performances:
Les principaux domaines d'intérêt de cette version ont été les performances de Kotlin/Native, KAPT, ainsi que les améliorations pour IntelliJ IDEA.
De documentation Kotlin :
Les processeurs d'annotation (voir JSR 269) sont pris en charge dans Kotlin avec le plugin de compilation kapt. En un mot, vous pouvez utiliser des bibliothèques telles que Dagger ou Data Binding dans vos projets Kotlin.
Comment réparer le traitement incrémentiel de la pièce?
Et le processeur d'annotation incrémentielle de Room est désactivé par défaut. C'est un problème connu et il est décrit ici . Ils ont l'intention de le corriger sur la version 2.2.0. Vous pouvez simplement attendre la mise à jour ou l'activer pour vous débarrasser de l'avertissement en définissant:
dans gradle.properties fichier:
kapt.incremental.apt=true
(étapes facultatives)
pour permettre à databinding d'être incrémentiel:
Android.databinding.incremental=true
pour des builds plus rapides:
kapt.use.worker.api=true
si seulement quelques modifications sont apportées, le temps de construction diminue considérablement:
kapt.include.compile.classpath=false
(retour au sujet)
dans votre projet build.gradle, ajoutez les dépendances nécessaires (Groovy):
dependencies {
...
implementation "androidx.room:room-runtime:2.2.0-rc01"
annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}
et
Android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.incremental":"true"]
}
}
}
}
Version DSL de Kotlin:
dependencies {
...
implementation("androidx.room:room-runtime:2.2.0-rc01")
kapt("androidx.room:room-compiler:2.2.0-rc01")
}
et
Android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = mapOf("room.incremental" to "true")
}
}
}
}
Modifier:
9 octobre 2019
androidx.room:room-*:2.2.0 est publié .
Processeur d'annotation incrémentielle Gradle: Room est désormais un processeur d'annotation d'isolement Gradle et l'incrémentabilité peut être activée via l'option de processeur room.incremental.
De Documentation de la salle :
"Room a les options de processeur d'annotation suivantes ... room.incremental: Active le processeur d'annotation incrémentiel Gradle."
Android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}
}
}
Assurez-vous de mettre à jour la version de la salle à 2.2.x ou supérieure.
Voici une liste de choses que vous pouvez faire pour résoudre ce problème et réduire considérablement vos temps de construction pendant que vous y êtes.
Dans votre fichier build.gradle
(Module):
Android {
...
defaultConfig {
...
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas".toString())
arg("room.incremental", "true")
arg("room.expandProjection", "true")
}
}
}
...
}
Dans votre fichier gradle.properties
:
kapt.incremental.apt=true // enabled by default on 1.3.50+
kapt.use.worker.api=true // faster builds
kapt.include.compile.classpath=false // near instant builds when there are few changes
Android.databinding.incremental=true
Android.lifecycleProcessor.incremental=true
//add your specific library if it supports incremental kapt
Beaucoup d'autres réponses couvrent l'erreur ou désactivent le traitement incrémentiel au lieu de le faire fonctionner comme vous le souhaitez.
Vous pouvez activer le traitement incrémentiel pour votre bibliothèque spécifique dans le gradle.properties
fichier. Ajoutez simplement ces paramètres, ou celui qui correspond à la bibliothèque qui génère l'erreur:
Android.databinding.incremental=true
Android.lifecycleProcessor.incremental=true
Utilisez Kotlin 1.3.31 ou plus récent Kotlin 1.3.30 est sorti
Dans votre fichier Android kotlin project gradle.properties
# Enable Kapt Incremental annotation processing requeste
kapt.incremental.apt=true
# Enable Android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC)
Android.databinding.incremental=true
# Decrease gradle builds time
kapt.use.worker.api=true
# turn off AP discovery in compile path, and therefore turn on Compile Avoidance
kapt.include.compile.classpath=false
# Enable In Logcat to determine Kapt
kapt.verbose=true
S'il se plaint que "le traitement d'annotation incrémentiel est demandé, mais que la prise en charge est désactivée car les processeurs suivants ne sont pas incrémentiels", alors définir "kapt.incremental.apt" sur "true" (mentionné dans une réponse différente) dans gradle.properties est contre- intuitif. Vous devez le définir sur "false". Ça l'a fait pour moi.
Ce que vous devez vraiment faire est d'implémenter ces lignes de code dans votre balise buildConfig
dans votre build.gradle
, module d'application:
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation" : "$projectDir/schemas".toString(),
"room.incremental" : "true",
"room.expandProjection": "true"]
}
}
J'utilise AndroidX , mais je suppose que c'est la même chose pour Android.Arch.lifecycle
. Pour moi, cela a simplement aidé à remplacer ceci:
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
... avec ça:
implementation "androidx.lifecycle:lifecycle-common-Java8:$lifecycle_version"
Donc, si vous utilisez Android.Arch.lifecycle
cela pourrait avoir le même effet en remplaçant ceci:
kapt "Android.Arch.lifecycle:compiler:$lifecycle_version"
... avec ça:
implementation "Android.Arch.lifecycle:common-Java8:$lifecycle_version"
Sachez que cela ne fonctionne que si vous utilisez Java 8 et que vous devez également supprimer OnLifecycleEvent
annotations pour LifecycleObserver
classes et laissez ces observateurs implémenter DefaultLifecycleObserver
à la place.
Le passage à cette méthode est également recommandé dans le build.gradle
dépendances affichées ici .
Cela peut également être dû à des problèmes de caractères tels que "İ" du côté databinding lorsque la langue du système n'est pas une langue anglaise. Dans un tel cas, l'utilisation de la langue du système informatique en anglais résoudra le problème.