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

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

KSP (پردازش نماد Kotlin) جایگزینی Kotlin-محور برای 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
}

منابع بیشتر