از kapt به KSP مهاجرت کنید

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

KSP (پردازش نماد Kotlin) اولین جایگزین کاتلین برای kapt است. KSP کد Kotlin را مستقیماً تجزیه و تحلیل می کند که تا 2 برابر سریعتر است. همچنین درک بهتری از ساختارهای زبان کاتلین دارد.

Kapt اکنون در حالت تعمیر و نگهداری است و توصیه می کنیم تا جایی که ممکن است از kapt به KSP مهاجرت کنید. در بیشتر موارد، این انتقال فقط به تغییراتی در پیکربندی ساخت پروژه شما نیاز دارد.

در حین مهاجرت می توانید 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 پیدا کنید.

کاتلین

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

کاتلین

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'
}

اگر از دستور افزونه application با استفاده از Groovy استفاده می کرد:

apply plugin: 'kotlin-kapt'

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

کاتلین

kapt {
    correctErrorTypes = true
    useBuildCache = true
}

شیار

kapt {
    correctErrorTypes true
    useBuildCache true
}

منابع اضافی