KSP a KAPT: dlaczego KSP jest szybsze
Porównaj modele przetwarzania KSP i KAPT oraz poznaj korzyści wydajnościowe.
KSP a KAPT: dlaczego KSP jest szybsze to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Problem z przetwarzaniem adnotacji
Procesory adnotacji generują kod podczas kompilacji. Przez wiele lat projekty Kotlin korzystały z narzędzia KAPT — Kotlin Annotation Processing Tool — które działa, konwertując kod źródłowy Kotlin na stuby Java, a następnie przekazując je procesorom adnotacji Javy. Taka konwersja jest kosztowna.
Jak działa KAPT
KAPT uruchamia kompilator Kotlin w celu wygenerowania plików stubów Java, następnie uruchamia procesory adnotacji Javy (APT) na tych stubach, a na końcu kompiluje wszystko razem. Każdy etap kompilacji zwiększa opóźnienie:
- Kompilacja Kotlin → stuby Java
- Przetwarzanie Java APT na stubach
- Końcowa kompilacja Kotlin wraz z wygenerowanym kodem źródłowym
Jak działa KSP
KSP (Kotlin Symbol Processing) działa bezpośrednio za pośrednictwem interfejsu API wtyczki kompilatora Kotlin. Odczytuje natywnie abstrakcyjne drzewo składniowe (AST) Kotlina — bez generowania stubów i bez pośrednictwa Javy. Procesory implementują SymbolProcessor i przechodzą po obiektach KSNode.
Porównanie szybkości
Dane porównawcze firmy Google pokazują, że KSP jest nawet 2× szybszy od KAPT podczas kompilacji przyrostowej i znacznie szybszy podczas czystej kompilacji. Oszczędność wynika z wyeliminowania generowania stubów, które w dużych projektach może odpowiadać za 30–50% czasu kompilacji KAPT.
Przetwarzanie przyrostowe
KSP natywnie obsługuje przetwarzanie przyrostowe: ponownie przetwarzane są tylko symbole, które zmieniły się od ostatniej kompilacji. KAPT ma ograniczoną obsługę przyrostową. W dużych bazach kodu, w których często wprowadza się niewielkie zmiany, różnica ta jest ogromna.
Różnice w API
Procesory KAPT implementują javax.annotation.processing.AbstractProcessor (API Javy). Procesory KSP implementują com.google.devtools.ksp.processing.SymbolProcessor (API Kotlina z konstrukcjami natywnymi dla Kotlina, takimi jak klasy sealed i funkcje rozszerzające).
Natywne informacje o typach Kotlina
Ponieważ KSP odczytuje bezpośrednio AST Kotlina, widzi konstrukcje specyficzne dla Kotlina, których stuby KAPT nie potrafią wiernie reprezentować: nullowalność, domyślne wartości parametrów, funkcje rozszerzające, deklaracje expect/actual oraz klasy inline.
Obsługa wielu platform
KSP 2.x obsługuje Kotlin Multiplatform. Pojedynczy procesor KSP może generować kod dla celów JVM, JS i Native. KAPT działa wyłącznie na JVM i nie może przetwarzać źródeł commonMain KMP.
Migracja z KAPT do KSP
Większość popularnych bibliotek ma warianty KSP: Room (KSP), Hilt (KSP), Moshi (KSP) i Dagger (częściowo). Należy sprawdzić dokumentację biblioteki. W konfiguracji kompilacji należy zastąpić kapt("...") przez ksp("...") i usunąć wtyczkę KAPT po zmigrowaniu wszystkich procesorów.
plugins {
id("com.google.devtools.ksp") version "2.0.0-1.0.21"
}
dependencies {
ksp("androidx.room:room-compiler:2.6.1")
}Kiedy KAPT jest nadal potrzebny
Należy używać KAPT, gdy biblioteka nie ma jeszcze wariantu procesora KSP. Łączenie KAPT i KSP w tym samym projekcie jest obsługiwane, ale nie eliminuje narzutu generowania stubów przez KAPT dla procesorów KAPT.
Narzędzia i debugowanie
Procesory KSP mogą rejestrować komunikaty na różnych poziomach ważności (KSPLogger). Wygenerowane pliki pojawiają się w build/generated/ksp/. Obsługa w IDE (IntelliJ / Android Studio) wyróżnia wygenerowane źródła i umożliwia przechodzenie do nich.
Szybkie sprawdzenie
Dlaczego KSP jest szybszy od KAPT podczas kompilacji przyrostowej?
Podsumowanie: KSP a KAPT
Najważniejsze informacje:
- KAPT: konwertuje Kotlin na stuby Java, a następnie uruchamia Java APT — jest wolny i działa wyłącznie na JVM
- KSP: natywnie odczytuje AST za pośrednictwem wtyczki kompilatora — jest nawet 2× szybszy
- KSP obsługuje przetwarzanie przyrostowe i Kotlin Multiplatform
- KSP widzi konstrukcje specyficzne dla Kotlina, których stuby KAPT nie potrafią reprezentować
- Należy migrować, zastępując
kapt()przezksp(), gdy biblioteka to obsługuje
Często zadawane pytania
Czy lekcja „KSP a KAPT: dlaczego KSP jest szybsze” jest bezpłatna?
Tak — pełny tekst „KSP a KAPT: dlaczego KSP jest szybsze” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „KSP a KAPT: dlaczego KSP jest szybsze”?
Porównaj modele przetwarzania KSP i KAPT oraz poznaj korzyści wydajnościowe. Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „KSP a KAPT: dlaczego KSP jest szybsze”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?
Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- KSP a KAPT: dlaczego KSP jest szybsze
- Pisanie pierwszego SymbolProcessor
- Generowanie plików źródłowych Kotlina za pomocą KotlinPoet
- Integracja procesorów KSP z kompilacją Gradle