Mit Kapt (das Kotlin Annotation Processing Tool) können Sie Java-Anmerkungsprozessoren mit Kotlin-Code selbst dann, wenn diese Prozessoren keine spezieller Support für Kotlin. Dies erfolgt durch Generieren von Java-Stubs aus Ihrem Kotlin-Dateien, die die Prozessoren dann lesen können. Diese Stub-Generierung ist ein und hat großen Einfluss auf die Build-Geschwindigkeit.
KSP (Kotlin Symbol Processing) ist eine Kotlin-First-Alternative zu kapt. Der KSP analysiert den Kotlin-Code direkt, was bis zu 2-mal Außerdem sind die Kotlin-Standards Sprachkonstrukte ein.
Kapt befindet sich jetzt im Wartungsmodus und wir empfehlen die Migration von kapt zu KSP wenn möglich. In den meisten Fällen sind für diese Migration nur Änderungen an der der Build-Konfiguration des Projekts.
Sie können kapt und KSP in Ihrem Projekt parallel ausführen, Die Migration kann Modul für Modul und Bibliothek für Bibliothek durchgeführt werden.
Hier ein Überblick über die Migrationsschritte:
- Prüfen Sie die Bibliotheken, die Sie für den KSP-Support verwenden
- Ihrem Projekt das KSP-Plug-in hinzufügen
- Annotationsprozessoren durch KSP ersetzen
- kapt-Plug-in entfernen
Prüfen Sie die Bibliotheken, die Sie für den KSP-Support verwenden
Prüfen Sie zuerst, ob die Bibliotheken, die Sie mit kapt verwenden, bereits einen KSP haben Support. Dies ist bei vielen gängigen Bibliotheken der Fall, Doktor, Glide, Raum, und Moshi) und andere fügen Support hinzu.
Eine Liste der unterstützten Bibliotheken finden Sie in der oder in der Dokumentation und im Issue Tracker der Bibliotheken nachlesen. die Sie verwenden.
Ihrem Projekt das KSP-Plug-in hinzufügen
Deklarieren Sie zuerst das KSP-Plug-in in der Datei build.gradle.kts
auf oberster Ebene.
Achten Sie darauf, eine KSP-Version auszuwählen, die zum Kotlin-Code Ihres Projekts passt
Version. Eine Liste der Releases finden Sie auf dem KSP GitHub
.
Kotlin
plugins { id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false }
Cool
plugins { id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false }
Aktivieren Sie dann in der Datei build.gradle.kts
auf Modulebene den KSP:
Kotlin
plugins { id("com.google.devtools.ksp") }
Cool
plugins { id 'com.google.devtools.ksp' }
Annotationsprozessoren durch KSP ersetzen
Wenn KSP aktiviert ist, können Sie die Verwendung von kapt durch KSP ersetzen. Für eine umfangreiche der meisten Bibliotheken müssen Sie kapt lediglich bei der Abhängigkeit da sie ihren Annotations- und KSP-Auftragsverarbeiter an die von demselben Artefakt.
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
Cool
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
Nach dem Wechsel zum KSP synchronisieren und erstellen, um zu sehen, ob es noch funktioniert korrekt sind.
Einige häufige Probleme, auf die Sie achten sollten:
- Einige Bibliotheken unterstützen nicht genau die gleichen Funktionen mit kapt und KSP. Wenn Ihr Code nach der Migration fehlerhaft ist, lesen Sie die Dokumentation der Bibliothek.
- Der KSP bietet genauere Kotlin-Typ-Informationen als kapt, z. B. Null-Zulässigkeit), was bedeutet, dass KSP-Prozessoren genauer Anforderungen. Möglicherweise müssen auch einige Korrekturen in Ihrem Quellcode vorgenommen werden. und Build-Dateien aktualisieren.
- Wenn Sie zuvor Argumente an den Annotationsprozessor übergeben haben, müssen Sie diese Argumente wahrscheinlich jetzt an den KSP weiterleiten. Das Format der Argumente können sich zwischen kapt und KSP unterscheiden. Wichtige Verkaufsargumente Dokumentation lesen und die Dokumentation der Bibliothek lesen die Sie verwenden, um mehr zu erfahren.
kapt-Plug-in entfernen
Wenn in Ihrem Modul keine Abhängigkeiten mehr mit kapt
enthalten sind,
entfernen Sie das kapt-Plug-in.
Wenn es in einem Plug-in-Block deklariert wurde:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Cool
plugins {id 'org.jetbrains.kotlin.kapt'}
Wenn die Anwendung des Plug-ins mit Groovy verwendet wurde:
apply plugin: 'kotlin-kapt'
Sie sollten auch alle verbleibenden Konfigurationen im Zusammenhang mit kapt entfernen, z. B.:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Cool
kapt { correctErrorTypes true useBuildCache true }