Wie kann ich die angeforderte Warnung für die Verarbeitung inkrementeller Anmerkungen entfernen?

150

Ich habe gerade angefangen, Android-Entwicklung zu verwenden und zu versuchen, Raumbibliothek zu verwenden. Seit gestern stehe ich vor dieser Warnmeldung

w: [kapt] Inkrementelle Annotationsverarbeitung angefordert, aber die Unterstützung ist deaktiviert, da die folgenden Prozessoren nicht inkrementell sind: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL).

Ich habe versucht zu recherchieren und zu beheben, aber ich kann diesen Fehler nicht vermeiden. Hier ist meine grale.build-Datei. Bitte schlagen Sie vor / beraten Sie, was ich falsch mache.

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'
}
Shax
quelle
Warum wird Ihr AnnotationProcessor kommentiert? Haben Sie versucht, sie zu kommentieren und dann ein Projekt zu erstellen? (für Raum und Lebenszyklus)
Ferhat Ergün
1
versuchen android.enableSeparateAnnotationProcessing = true in Ihrem gradle.properities hinzuzufügen reddit.com/r/androiddev/comments/ai92pt/... auf diese gefunden, könnte es zu einem Problem in Zusammenhang stehen
Ferhat Ergün
7
Sie können das Kotlin-Gradle-Plugin in Ihrer Projektdatei build.gradle vorerst auf Version 1.3.41 herunterstufen. Ich denke, es ist ein Fehler im Zusammenhang mit kapt. Weitere Informationen: youtrack.jetbrains.com/issue/KT-33515
Necrontyr
4
Sie können auch eine Datei gradle.properties in libs / <Ihr Modulname> mit erstellen, kapt.incremental.apt=falsewie im Problem als Problemumgehung beschrieben. Es hat bei mir funktioniert.
Necrontyr
2
@Necrontyr, dein Vorschlag hat wirklich geklappt. Vielen Dank
Shax

Antworten:

80

Es gibt einen Fehler in der Kotlin-Gradle-Plugin-Version von 1.3.50, wie @Necrontyr erwähnt. Downgraden Sie einfach die kotlin_version in build.gradle (Project) auf 1.3.41.

Mücahid Kambur
quelle
71
Der von @Necrontyr erwähnte Fehler hat nichts mit der Warnung zu tun. Die Warnung ist eigentlich beabsichtigt und wenn Sie auf 1.3.41 zurückgehen, wird die Warnung nur ausgeblendet, aber das Problem bleibt gleich, wenn nicht schlimmer. Die Leute denken vielleicht, dass sie die Dinge schneller machen, weil sie die inkrementelle Annotationsverarbeitung aktiviert haben. Die Wahrheit ist jedoch, dass, wenn einer der Anmerkungsprozessoren nicht inkrementell ist, keiner von ihnen inkrementell verarbeitet wird. Dies ist eine freundliche Erinnerung, die darauf hinweist, welche Bibliothek der Schuldige ist.
Antimonit
15
Die Verwendung einer veralteten Bibliotheksversion ist keine Lösung.
Andrew Koster
5
Ist das bei Kotlin immer noch der Fall 1.3.70?
IgorGanapolsky
2
Ich verwende Kotlin 1.3.72 und stehe immer noch vor diesem Problem?
Anbuselvan Rocky
4
Ich stehe auch vor diesem Problem 1.3.72.
Hiashutoshsingh
173

Fügen Sie einfach diese Zeile zu gradle.properties hinzu:

kapt.incremental.apt=true
Ali Ahmed
quelle
11
Dies ist eine bessere Option als die akzeptierte Antwort. Für diejenigen, die verstehen und mehr Details erfahren müssen
Abhimanyu
4
faild auch für mich.
Steven Smith
Ist jemand der Grund, warum es hier passiert?
Omer
Ich habe kürzlich die Datenbindung an mein Android-Projekt (Kotlin) aktiviert und diese Warnung erhalten. Das Hinzufügen der Eigenschaft wie oben angegeben hat bei mir funktioniert. Verwenden Sie auch die neuesten Versionen von allem, z. B. alle Abhängigkeiten, Compiler, Build-Tools, SDKs usw.
Gail,
4
Genau das zu tun, hat bei mir nicht funktioniert. Ich musste auch meine build.gradle-Datei bearbeiten, wie in der Dokumentation für die Raumbibliothek beschrieben .
Nelson Ferragut
121

Das eigentliche Problem ist, dass die inkrementelle Verarbeitung die Dinge schneller macht. Wenn jedoch einer der Anmerkungsprozessoren nicht inkrementell ist, wird keiner von ihnen tatsächlich auf diese Weise verarbeitet.

Was ist der Zweck der inkrementellen Verarbeitung?

Ab Version 1.3.30+ konnten Module durch inkrementelle Verarbeitung nicht bei jeder Änderung erneut vollständig verarbeitet werden, wodurch der Erstellungsprozess eine bessere Leistung erhielt:

Die Hauptschwerpunkte dieser Version waren Kotlin / Native, die KAPT-Leistung sowie Verbesserungen für IntelliJ IDEA.

Aus der Kotlin-Dokumentation :

Anmerkungsprozessoren (siehe JSR 269) werden in Kotlin mit dem kapt-Compiler-Plugin unterstützt. Kurz gesagt, Sie können Bibliotheken wie Dolch oder Datenbindung in Ihren Kotlin-Projekten verwenden.

Wie kann ich die inkrementelle Raumverarbeitung beheben?

Der inkrementelle Raumanmerkungsprozessor ist standardmäßig deaktiviert . Dies ist ein bekanntes Problem, das hier beschrieben wird . Sie beabsichtigen, es auf Version 2.2.0 zu beheben. Sie können einfach auf das Update warten oder es aktivieren, um die Warnung zu entfernen, indem Sie Folgendes einstellen:

in der Datei gradle.properties :

kapt.incremental.apt=true

(optionale Schritte)

Damit die Datenbindung inkrementell sein kann:

android.databinding.incremental=true

für schnellere Builds:

kapt.use.worker.api=true

Wenn nur wenige Änderungen vorgenommen werden, verringert sich die Erstellungszeit erheblich:

kapt.include.compile.classpath=false

(zurück zum Thema)

Fügen Sie in Ihrem Projekt build.gradle die erforderlichen Abhängigkeiten hinzu (Groovy):

dependencies {
    ...
    implementation "androidx.room:room-runtime:2.2.0-rc01"
    annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}

und

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.incremental":"true"]
            }
        }
    }
}

Kotlin DSL-Version:

dependencies {
    ...
    implementation("androidx.room:room-runtime:2.2.0-rc01")
    kapt("androidx.room:room-compiler:2.2.0-rc01")
}

und

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    } 
}

Bearbeiten:

9. Oktober 2019

androidx.room:room-*:2.2.0 wird veröffentlicht .

Gradle Incremental Annotation Processor: Room ist jetzt ein Gradle Isolating Annotation Processor und die Inkrementierbarkeit kann über die Prozessoroption room.incremental aktiviert werden.

Dimas Mendes
quelle
8
Dieser sollte als kapt.incremental.apt = true akzeptiert werden. Dies fehlt, wenn Sie Room in Ihr Projekt aufnehmen. Dieser wird nicht einmal in Android-Dokumenten für Room
Sela
1
Diese Antwort half mir bei der Verwendung androidx.lifecycle:lifecycle-extensionsin Version 2.1.0 und nach dem Wechsel zu 2.2.0-beta01 verschwand die Warnung!
Simne7
2
@ simne7 schau dir am Ende meine Bearbeitung an. Version 2.2.0 ist freigegeben =) Sie können es bereits aktualisieren, um auf die inkrementelle Verarbeitungsfunktion zuzugreifen und Ihren Build zu verbessern.
Dimas Mendes
Würde das Aktivieren android.buildcache=truees schneller machen?
IgorGanapolsky
1
@IgorGanapolsky laut Google Developers Website , Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache). Es ist also nicht sinnvoll, es zu aktivieren, da es standardmäßig aktiviert ist.
Dimas Mendes
37

Aus der Raumdokumentation :

"Room verfügt über die folgenden Optionen für den Anmerkungsprozessor ... room.incremental: Aktiviert den inkrementellen Annotation-Annotation-Prozessor von Gradle."

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

Stellen Sie sicher, dass Sie die Raumversion auf 2.2.x oder höher aktualisieren.

Alberto Gaona
quelle
3
Richtige Antwortpersonen, wenn Sie die inkrementelle Verarbeitung beibehalten möchten. Möglicherweise benötigen Sie die oben festgelegten Argumente schemaLocation oder expandProjection nicht. room.incremental genügen.
Bajicdusko
1
Laut developer.android.com/jetpack/androidx/releases/room gibt es noch die Version 2.2.0-rc01.
CoolMind
1
Es ist ab sofort erhältlich -> developer.android.com/jetpack/androidx/releases/…
jesses.co.tt
Aktualisieren Sie die
Raumversion
25

Hier ist eine Liste von Dingen, die Sie tun können, um dies zu beheben und Ihre Erstellungszeiten erheblich zu verkürzen, während Sie gerade dabei sind.

In Ihrer build.gradle(Modul-) Datei:

android {
    ...
    defaultConfig {
        ...
        kapt {
            arguments {
                 arg("room.schemaLocation", "$projectDir/schemas".toString())
                 arg("room.incremental", "true")
                 arg("room.expandProjection", "true")
            }
        }
    }
    ...
}

In Ihrer gradle.propertiesDatei:

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 
smdufb
quelle
18

Aktivieren Sie die Anforderung zur Verarbeitung von inkrementellen Kapt-Anmerkungen

Verwenden Sie Kotlin 1.3.31 oder neuer Kotlin 1.3.30

In Ihrer Android Kotlin Projekt gradle.properties Datei

# 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
Shomu
quelle
Was ist mit android.lifecycleProcessor.incremental=true?
IgorGanapolsky
10

Viele der anderen Antworten hier vertuschen den Fehler oder deaktivieren die inkrementelle Verarbeitung, anstatt sie tatsächlich so zu machen, wie Sie es möchten.

Sie können die inkrementelle Verarbeitung für Ihre spezifische Bibliothek in der gradle.propertiesDatei aktivieren . Fügen Sie einfach diese Einstellungen hinzu oder die Einstellungen, die der Bibliothek entsprechen, die den Fehler auslöst:

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
Jacques.S
quelle
2
Ich bin mir nicht so sicher android.lifecycleProcessor.incremental=true, es scheint nirgendwo dokumentiert zu sein
Daniel Wilson
Ich bin mir auch nicht sicher, aber ich habe es aus Versehen versucht und der Compiler hat aufgehört, mir mitzuteilen, dass für die LifecycleProcessor-Bibliothek keine inkrementelle Verarbeitung aktiviert war.
Jacques.S
5

Wenn beschwert wird, dass "Inkrementelle Annotationsverarbeitung angefordert, aber die Unterstützung deaktiviert ist, weil die folgenden Prozessoren nicht inkrementell sind", ist das Setzen von "kapt.incremental.apt" auf "true" (in einer anderen Antwort erwähnt) in gradle.properties konter- intuitiv. Sie müssen es auf "false" setzen. Das hat es für mich getan.

DC Christopher
quelle
1
DAS hat tatsächlich funktioniert. Stellen Sie es auf FALSE people! danke
Sakiboy
Und was wird passieren? Wird es schneller kompiliert oder die Warnung einfach ausgeblendet?
CoolMind
@CoolMind Sie würden die inkrementelle Annotationsverarbeitung deaktivieren, was ohnehin nicht passieren wird, wenn eine Ihrer Abhängigkeiten dies nicht unterstützt. Die Warnung verschwindet also und es gibt keine Änderung im Erstellungsprozess von zuvor.
DC Christopher
2
Überraschenderweise kapt.incremental.apt=falsehalf mir die Einstellung , ich bekam den Fehler nicht mehr
Rakhi Dhavale
2
Sie haben keinen Fehler mehr, aber jetzt haben Sie keine inkrementelle Verarbeitung :)
JustAnotherCoder
2

Ich benutze AndroidX , aber es ist wohl das gleiche für android.arch.lifecycle. Für mich hat es einfach geholfen, dies zu ersetzen:

kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

... mit diesem:

implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

Wenn Sie es also verwenden android.arch.lifecycle, kann dies den gleichen Effekt haben:

kapt "android.arch.lifecycle:compiler:$lifecycle_version"

... mit diesem:

implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

Beachten Sie, dass dies nur funktioniert, wenn Sie Java 8 verwenden, und dass Sie auch OnLifecycleEventAnmerkungen für LifecycleObserverKlassen entfernen und diese Beobachter DefaultLifecycleObserverstattdessen implementieren lassen sollten .

Die Umstellung auf dieses Verfahren wird auch in den empfohlenen build.gradleDepencies gezeigt hier .

Anigif
quelle
Warum wirst du los kapt?
IgorGanapolsky
@IgorGanapolsky Dies wird vom AndroidX Lifecycle empfohlen, wenn Sie Java 8 verwenden. Weitere Informationen finden Sie hier: developer.android.com/jetpack/androidx/releases/…
Anigif
kaptist wichtig für Kotlin
IgorGanapolsky
1
Nur wenn die Bibliothek es erfordert. Laut dieser Seite werden die Anmerkungen veraltet sein, sobald Java 8 unter Android mehr Mainstream wird. Sie empfehlen daher common-java8nach Möglichkeit: developer.android.com/reference/androidx/lifecycle/Lifecycle
Anigif
Interessant. Sie erwähnen jedoch nicht kaptbesonders ...
IgorGanapolsky
2

Was Sie wirklich tun sollten, ist, diese Codezeilen in Ihrem buildConfigTag in Ihrer build.gradleModul-App zu implementieren :

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }
coroutineDispatcher
quelle
0

Oben Antworten kann nützlich sein, aber was hat mir geholfen , die Verringerung kotlin_versionin build.gradle(Project)zu 1.3.41und den Bau des Projekts. Auf diese Weise können Sie feststellen, ob ein Problem mit Ihrem Entitätsmodell vorliegt.

Meins war, ich habe vergessen zu kommentieren @PrimaryKey. Ihr mag etwas anderes sein. Kotlin 1.3.41erlaubt es, diese Probleme zu sehen. Beheben Sie diese Probleme und kehren Sie kotlin_versionzum vorherigen zurück.

Sourav Roy
quelle
-1

Dies kann auch durch Zeichenprobleme wie " İ " auf der Datenbindungsseite verursacht werden, wenn die Systemsprache eine nicht englische Sprache ist. In einem solchen Fall wird das Problem durch die Verwendung der Computersystemsprache Englisch gelöst.

Hasan Kucuk
quelle