انتقال از kapt به KSP

Kapt (ابزار پردازش حاشیه‌نویسی Kotlin) به شما امکان می‌دهد از پردازشگرهای حاشیه‌نویسی Java با کد Kotlin استفاده کنید، حتی اگر آن پردازشگرها پشتیبانی خاصی برای Kotlin نداشته باشند. این کار با تولید کردن کدهای Java stub از فایل‌های Kotlin شما انجام می‌شود تا پردازنده‌ها بتوانند آن‌ها را بخوانند. این تولید ته‌برگ عملیاتی پرهزینه است و تأثیر قابل‌توجهی بر سرعت ساخت دارد.

KSP (Kotlin Symbol Processing) جایگزین Kotlin-first برای kapt است. KSP کد Kotlin را مستقیماً تجزیه‌وتحلیل می‌کند که تا ۲ برابر سریع‌تر است. همچنین درک بهتری از ساختارهای زبان Kotlin دارد.

می‌توانید kapt و KSP را درطول انتقال درکنار یکدیگر در پروژه‌تان اجرا کنید و انتقال را می‌توان به‌صورت واحد به واحد و کتابخانه به کتابخانه انجام داد.

نمای کلی مراحل انتقال در اینجا آمده است:

  1. کتابخانه‌هایی را که استفاده می‌کنید ازنظر پشتیبانی از KSP بررسی کنید
  2. افزونه KSP را به پروژه‌تان اضافه کنید
  3. جایگزین کردن پردازشگرهای گزارمان با KSP
  4. برداشتن افزایه kapt

کتابخانه‌هایی را که استفاده می‌کنید ازنظر پشتیبانی از KSP بررسی کنید

برای شروع، بررسی کنید که آیا کتابخانه‌هایی که با kapt استفاده می‌کنید از KSP پشتیبانی می‌کنند یا نه. این مورد برای بسیاری از کتابخانه‌های پرطرفدار (ازجمله Dagger،‏ Glide،‏ Room، و Moshi) صدق می‌کند و کتابخانه‌های دیگر نیز درحال افزودن پشتیبانی هستند.

می‌توانید فهرست کتابخانه‌های پشتیبانی‌شده را در اسناد بررسی کنید، یا به اسناد و ردیاب مشکل کتابخانه‌هایی که استفاده می‌کنید مراجعه کنید.

افزونه KSP را به پروژه‌تان اضافه کنید

ابتدا افزونه KSP را در فایل build.gradle.kts سطح بالا اعلام کنید. می‌توانید فهرست نسخه‌های پخش را در صفحه KSP GitHub پیدا کنید.

کاتلین

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 سطح ماژول خود فعال کنید:

کاتلین

plugins {
    id("com.google.devtools.ksp")
}

شیک

plugins {
    id 'com.google.devtools.ksp'
}

جایگزین کردن پردازشگرهای گزارمان با KSP

با فعال کردن KSP، می‌توانید جایگزین کردن موارد استفاده kapt با KSP را شروع کنید. برای اکثریت قریب به اتفاق کتابخانه‌ها، این کار فقط مستلزم تغییر kapt به ksp در اعلان وابستگی است، زیرا پردازشگر گزارمان و پردازشگر KSP خود را در یک آرتیفکت ارسال می‌کنند.

کاتلین

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 دارد (برای مثال، درباره تهی‌پذیری)، یعنی پردازنده‌های KSP می‌توانند درباره الزامات نوع دقیق‌تر باشند. این کار ممکن است علاوه‌بر به‌روزرسانی فایل‌های ساخت، به برخی اصلاحات در کد منبع شما نیز نیاز داشته باشد.
  • اگر قبلاً آرگومان‌ها را به پردازشگر گزارمان ارسال می‌کردید، احتمالاً اکنون باید آن آرگومان‌ها را به KSP ارسال کنید. توجه داشته باشید که قالب متغیرهای مستقل ممکن است بین kapt و KSP متفاوت باشد. برای کسب اطلاعات بیشتر، به اسناد KSP مراجعه کنید و با اسناد کتابخانه‌ای که استفاده می‌کنید مشورت کنید.

برداشتن افزایه kapt

وقتی دیگر هیچ وابستگی‌ای با kapt در واحدتان ندارید، افزونه kapt را بردارید.

اگر در بلوک افزایه‌ها اعلام شده باشد:

کاتلین

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

شیک

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

اگر از نحو افزونه اعمال بااستفاده از Groovy استفاده می‌کرد:

apply plugin: 'kotlin-kapt'

همچنین باید هرگونه پیکربندی باقی‌مانده مربوط به kapt را حذف کنید، مانند:

کاتلین


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

شیک


kapt {
    correctErrorTypes true
    useBuildCache true
}

منابع بیشتر