מעבר מ-kapt ל-KSP

‫Kapt (כלי עיבוד ההערות של Kotlin) מאפשר להשתמש במעבדי הערות של Java עם קוד Kotlin, גם אם למעבדים האלה אין תמיכה ספציפית ב-Kotlin. כדי לעשות את זה, המעבדים יוצרים קטעי קוד ב-Java מקובצי Kotlin, ואז קוראים אותם. יצירת ה-stub הזו היא פעולה יקרה, ויש לה השפעה משמעותית על מהירות ה-build.

‫KSP (Kotlin Symbol Processing) הוא חלופה ל-kapt שמתמקדת ב-Kotlin. ‫KSP מנתח קוד Kotlin ישירות, וזה מהיר עד פי 2. הוא גם מבין טוב יותר את מבני השפה של Kotlin.

אתם יכולים להריץ את kapt ו-KSP במקביל בפרויקט בזמן ההעברה, ולבצע את ההעברה מודול אחר מודול, ספרייה אחר ספרייה.

סקירה כללית של שלבי ההעברה:

  1. בדיקת הספריות שבהן אתם משתמשים לתמיכה ב-KSP
  2. הוספת הפלאגין של KSP לפרויקט
  3. החלפת מעבדי אנוטציות ב-KSP
  4. הסרת הפלאגין 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
}

מקורות מידע נוספים