Migracja z Kapt do KSP

Kapt (narzędzie do przetwarzania adnotacji Kotlin) umożliwia korzystanie z procesory adnotacji Java z kodem Kotlin, nawet jeśli nie mają obsługa języka Kotlin. Jest to możliwe dzięki generowaniu atrakcji Javy z Twojego serwera pliki Kotlin, które procesory mogą odczytać. To generacja namiętna kosztowne rozwiązanie i ma znaczny wpływ na szybkość kompilacji.

KSP (Kotlin Symbol Processing) to alternatywa oparta na języku Kotlin kapt. KSP analizuje bezpośrednio kod Kotlin, co daje nawet 2x . Pozwala też lepiej zrozumieć, jak twórczyni konstrukcjami językowymi.

Kapt jest teraz w trybie konserwacji i zalecamy migrację z kapt do KSP gdy tylko jest to możliwe. W większości przypadków migracja wymaga tylko wprowadzenia zmian konfiguracji kompilacji projektu.

Kapt i KSP można uruchamiać równolegle w projekcie migracja danych może być przeprowadzana między modułami, a bibliotekami.

Oto omówienie etapów migracji:

  1. Sprawdzanie bibliotek, których używasz do obsługi KSP
  2. Dodawanie wtyczki KSP do projektu
  3. Zastąp procesory adnotacji KSP
  4. Usuń wtyczkę kapt

Sprawdzanie bibliotek, których używasz do obsługi KSP

Na początek sprawdź, czy biblioteki, których używasz z kapt, mają już KSP . Dotyczy to wielu popularnych bibliotek (w tym Dagger, Glide, Room, i Moshi), a inni dodają pomoc.

Listę obsługiwanych bibliotek znajdziesz w lub zapoznaj się z dokumentacją bibliotek którego używasz.

Dodawanie wtyczki KSP do projektu

Najpierw zadeklaruj wtyczkę KSP w pliku build.gradle.kts najwyższego poziomu. Pamiętaj, aby wybrać wersję KSP zgodną z Kotlinem Twojego projektu wersji. Listę wersji znajdziesz na stronie KSP GitHub”. .

Kotlin

plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

Odlotowe

plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}

Następnie włącz KSP w pliku build.gradle.kts na poziomie modułu:

Kotlin

plugins {
    id("com.google.devtools.ksp")
}

Odlotowe

plugins {
    id 'com.google.devtools.ksp'
}

Zastąp procesory adnotacji KSP

Po włączeniu KSP możesz zacząć zastępować użycia kapt za pomocą KSP. Dla VAST większości bibliotek, wymaga to jedynie zmiany kapt na ksp w zależności zgodnie z oferowaną przez nas ten sam artefakt.

Kotlin

dependencies {
    kapt("androidx.room:room-compiler:2.5.0")
    ksp("androidx.room:room-compiler:2.5.0")
}

Odlotowe

dependencies {
    kapt 'androidx.room:room-compiler:2.5.0'
    ksp 'androidx.room:room-compiler:2.5.0'
}

Po przejściu do KSP zsynchronizuj i skompiluj projekt, aby sprawdzić, czy nadal działa .

Typowe problemy:

  • Niektóre biblioteki nie obsługują dokładnie tego samego zestawu funkcji w przypadku kapt i KSP. Jeśli po migracji kod ulegnie awarii, zapoznaj się z dokumentacją biblioteki.
  • KSP udostępnia dokładniejsze informacje o typie Kotlin niż kapt (na przykład nullability), co oznacza, że procesory KSP mogą dokładniej określać typ . Może to wymagać także poprawek w kodzie źródłowym, .
  • Jeśli do procesora adnotacji były wcześniej przekazywane argumenty, musisz teraz przekazać te argumenty do KSP. Pamiętaj, że format może mieć różne argumenty między kapt a KSP. Zapoznaj się z kluczem KSP dokumentacji i biblioteki, którego używasz, aby dowiedzieć się więcej.

Usuń wtyczkę kapt

Jeśli w Twoim module nie będzie już zależności zawartych w tabeli kapt, usuń wtyczkę kapt.

Jeśli została zadeklarowana w bloku wtyczek:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Odlotowe

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

Jeśli użyto składni stosowania wtyczki za pomocą Groovy:

apply plugin: 'kotlin-kapt'

Usuń też wszystkie pozostałe konfiguracje związane z kapt, takie jak:

Kotlin

kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Odlotowe

kapt {
    correctErrorTypes true
    useBuildCache true
}

Dodatkowe materiały