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