מעבר מ-kapt ל-KSP

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

KSP (עיבוד סמלים ב-Kotlin) הוא חלופה ל-kapt שמתמקדת ב-Kotlin. KSP מנתח קוד Kotlin ישירות, והוא מהיר פי 2. בנוסף, יש לו הבנה טובה יותר של מבני השפה של Kotlin.

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

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

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

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