Kapt (כלי עיבוד ההערות של Kotlin) מאפשר להשתמש במעבדי הערות של Java עם קוד Kotlin, גם אם למעבדים האלה אין תמיכה ספציפית ב-Kotlin. כדי לעשות את זה, המעבדים יוצרים קטעי קוד ב-Java מקובצי Kotlin, ואז קוראים אותם. יצירת ה-stub הזו היא פעולה יקרה, ויש לה השפעה משמעותית על מהירות ה-build.
KSP (Kotlin Symbol Processing) הוא חלופה ל-kapt שמתמקדת ב-Kotlin. KSP מנתח קוד Kotlin ישירות, וזה מהיר עד פי 2. הוא גם מבין טוב יותר את מבני השפה של Kotlin.
אתם יכולים להריץ את kapt ו-KSP במקביל בפרויקט בזמן ההעברה, ולבצע את ההעברה מודול אחר מודול, ספרייה אחר ספרייה.
סקירה כללית של שלבי ההעברה:
- בדיקת הספריות שבהן אתם משתמשים לתמיכה ב-KSP
- הוספת הפלאגין של KSP לפרויקט
- החלפת מעבדי אנוטציות ב-KSP
- הסרת הפלאגין kapt
בדיקת הספריות שבהן אתם משתמשים לתמיכה ב-KSP
כדי להתחיל, צריך לבדוק אם הספריות שבהן אתם משתמשים עם kapt כבר תומכות ב-KSP. זה המצב בהרבה ספריות פופולריות (כולל Dagger, Glide, Room ו-Moshi), וספריות אחרות מוסיפות תמיכה.
אפשר לעיין ברשימת הספריות הנתמכות במסמכי התיעוד, או לעיין במסמכי התיעוד וב-Issue Tracker של הספריות שבהן אתם משתמשים.
הוספת הפלאגין של KSP לפרויקט
קודם כול, מצהירים על הפלאגין של KSP בקובץ build.gradle.kts ברמה העליונה.
רשימת הגרסאות מופיעה בדף של KSP ב-GitHub.
Kotlin
plugins { id("com.google.devtools.ksp") version "2.3.4" apply false }
מגניב
plugins { id 'com.google.devtools.ksp' version '2.3.4' apply false }
לאחר מכן, מפעילים את KSP בקובץ build.gradle.kts ברמת המודול:
Kotlin
plugins { id("com.google.devtools.ksp") }
מגניב
plugins { id 'com.google.devtools.ksp' }
החלפת מעבדי אנוטציות ב-KSP
אחרי שמפעילים את KSP, אפשר להתחיל להחליף את השימושים ב-kapt ב-KSP. ברוב הספריות, צריך רק לשנות את kapt ל-ksp בהצהרת התלות, כי הן שולחות את מעבד ההערות ואת מעבד ה-KSP באותו פריט מידע שנוצר בתהליך פיתוח התוכנה (Artifact).
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
מגניב
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
אחרי המעבר ל-KSP, מסנכרנים ויוצרים את הפרויקט כדי לבדוק אם הוא עדיין פועל בצורה תקינה.
כמה בעיות נפוצות שכדאי לשים לב אליהן:
- חלק מהספריות לא תומכות באותה קבוצת תכונות בדיוק עם kapt ו-KSP. אם הקוד שלכם לא פועל אחרי ההעברה, כדאי לעיין במסמכי התיעוד של הספרייה.
- ל-KSP יש מידע מדויק יותר על סוגי Kotlin מאשר ל-kapt (לדוגמה, לגבי nullability), כלומר מעבדי KSP יכולים להיות מדויקים יותר לגבי דרישות הסוג. יכול להיות שתצטרכו לבצע תיקונים גם בקוד המקור, בנוסף לעדכון קובצי ה-build.
- אם בעבר העברתם ארגומנטים למעבד האנוטציות, סביר להניח שעכשיו תצטרכו להעביר את הארגומנטים האלה ל-KSP. חשוב לזכור שהפורמט של הארגומנטים עשוי להיות שונה בין kapt ל-KSP. מידע נוסף זמין במאמרי העזרה של KSP ובמאמרי העזרה של הספרייה שבה אתם משתמשים.
הסרת הפלאגין kapt
כשאין יותר יחסי תלות שכלולים ב-kapt במודול, מסירים את הפלאגין kapt.
אם הוא הוגדר בבלוק של פלאגינים:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
מגניב
plugins {id 'org.jetbrains.kotlin.kapt'}
אם הוא השתמש בתחביר של הפלאגין apply באמצעות Groovy:
apply plugin: 'kotlin-kapt'
צריך גם להסיר את כל ההגדרות שקשורות ל-kapt, כמו:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
מגניב
kapt { correctErrorTypes true useBuildCache true }