מעבר מ-kapt ל-KSP

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

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

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

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

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

  1. בודקים את הספריות שבהן משתמשים לתמיכה ב-KSP
  2. הוספת הפלאגין KSP לפרויקט
  3. החלפת מעבדי הערות ב-KSP
  4. הסרת הפלאגין kapt

בודקים את הספריות שבהן משתמשים לתמיכה ב-KSP

כדי להתחיל, יש לבדוק אם הספריות שבהן אתם משתמשים עם kapt כבר כוללות KSP תמיכה. זה המצב גם בספריות פופולריות רבות (כולל Dagger, Glide, חדר, ו-Moshi), ואחרים מוסיפים תמיכה.

אפשר לעיין ברשימת הספריות הנתמכות ב או לעיין במסמכי התיעוד ובאתר המעקב אחר בעיות של הספריות. שבהם משתמשים.

הוספת הפלאגין KSP לפרויקט

קודם כול, צריך להצהיר על הפלאגין KSP בקובץ build.gradle.kts ברמה העליונה. צריך לוודא שבחרת גרסת KSP שתואמת ל-Kotlin של הפרויקט . אפשר למצוא רשימה של גרסאות ב-KSP GitHub .

Kotlin

plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

מגניב

plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' 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 שלהם אותו ארטיפקט.

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 (לדוגמה, null), כלומר מעבדי KSP יכולים להיות מדויקים יותר לגבי סוג בדרישות שלנו. ייתכן שיהיה צורך גם בתיקונים בקוד המקור, בנוסף לעדכון קובצי ה-build.
  • אם העברתם בעבר ארגומנטים למעבד ההערות, כנראה שתצטרכו להעביר את הארגומנטים האלה ל-KSP עכשיו. שימו לב שהפורמט מהארגומנטים עשויים להיות שונים בין kapt ל-KSP. פרטים נוספים זמינים ב-KSP תיעוד וכדאי לעיין במסמכי התיעוד של הספרייה שמשתמשים בהם כדי לקבל מידע נוסף.

הסרת הפלאגין kapt

כשאין יותר יחסי תלות במודול kapt, להסיר את הפלאגין kapt.

אם הוצהרה עליו בבלוק של יישומי פלאגין:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

מגניב

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

אם הוא השתמש בתחביר של החלת הפלאגין באמצעות גרובי:

apply plugin: 'kotlin-kapt'

צריך גם להסיר את כל ההגדרות שנותרו שקשורות ל-kapt, כמו:

Kotlin

kapt {
    correctErrorTypes = true
    useBuildCache = true
}

מגניב

kapt {
    correctErrorTypes true
    useBuildCache true
}

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