Kapt (ابزار پردازش حاشیهنویسی کاتلین) به شما امکان میدهد از پردازندههای حاشیهنویسی جاوا با کد کاتلین استفاده کنید، حتی اگر آن پردازندهها پشتیبانی خاصی از کاتلین نداشته باشند. این کار با تولید stubهای جاوا از فایلهای کاتلین شما انجام میشود که پردازندهها میتوانند آنها را بخوانند. این تولید stub یک عملیات پرهزینه است و تأثیر قابل توجهی بر سرعت ساخت دارد.
KSP (پردازش نماد کاتلین) یک جایگزین کاتلینمحور برای kapt است. KSP کد کاتلین را مستقیماً تجزیه و تحلیل میکند که تا دو برابر سریعتر است. همچنین درک بهتری از ساختارهای زبان کاتلین دارد.
شما میتوانید kapt و KSP را در کنار یکدیگر در پروژه خود هنگام مهاجرت اجرا کنید، و این مهاجرت میتواند ماژول به ماژول، کتابخانه به کتابخانه انجام شود.
در اینجا مراحل مهاجرت را به طور خلاصه شرح میدهیم:
- کتابخانههایی که برای پشتیبانی KSP استفاده میکنید را بررسی کنید
- افزونه KSP را به پروژه خود اضافه کنید
- پردازندههای حاشیهنویسی را با KSP جایگزین کنید
- افزونه kapt را حذف کنید
کتابخانههایی که برای پشتیبانی KSP استفاده میکنید را بررسی کنید
برای شروع، بررسی کنید که آیا کتابخانههایی که با kapt استفاده میکنید، از قبل از KSP پشتیبانی میکنند یا خیر. این مورد در مورد بسیاری از کتابخانههای محبوب (از جمله Dagger ، Glide ، Room و Moshi ) صدق میکند و سایر کتابخانهها نیز در حال اضافه کردن پشتیبانی هستند.
میتوانید لیست کتابخانههای پشتیبانیشده را در مستندات بررسی کنید، یا به مستندات و ردیاب مشکلات کتابخانههایی که استفاده میکنید مراجعه کنید.
افزونه KSP را به پروژه خود اضافه کنید
ابتدا، افزونه KSP را در فایل build.gradle.kts سطح بالای خود تعریف کنید. میتوانید لیستی از نسخههای منتشر شده را در صفحه گیتهاب KSP پیدا کنید.
کاتلین
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، پروژه خود را همگامسازی و build کنید تا ببینید آیا هنوز به درستی کار میکند یا خیر.
برخی از مشکلات رایج که باید به آنها توجه کنید:
- برخی از کتابخانهها دقیقاً از همان مجموعه ویژگیها با kapt و KSP پشتیبانی نمیکنند. اگر کد شما پس از مهاجرت با مشکل مواجه شد، مستندات کتابخانه را بررسی کنید.
- KSP اطلاعات نوع Kotlin دقیقتری نسبت به kapt دارد (برای مثال، در مورد nullability)، به این معنی که پردازندههای KSP میتوانند در مورد الزامات نوع دقیقتر باشند. این ممکن است علاوه بر بهروزرسانی فایلهای ساخت شما، نیاز به اصلاحاتی در کد منبع شما نیز داشته باشد.
- اگر قبلاً آرگومانها را به پردازندهی حاشیهنویسی ارسال میکردید، احتمالاً اکنون باید آن آرگومانها را به KSP ارسال کنید. توجه داشته باشید که قالب آرگومانها ممکن است بین kapt و KSP متفاوت باشد. برای کسب اطلاعات بیشتر، به مستندات KSP مراجعه کنید و مستندات کتابخانهای که استفاده میکنید را مطالعه کنید.
افزونه kapt را حذف کنید
وقتی دیگر هیچ وابستگی به kapt در ماژول خود ندارید، افزونه kapt را حذف کنید.
اگر در بلوک افزونهها تعریف شده باشد:
کاتلین
plugins {id("org.jetbrains.kotlin.kapt")}
گرووی
plugins {id 'org.jetbrains.kotlin.kapt'}
اگر از سینتکس apply plugin با استفاده از Groovy استفاده میکرد:
apply plugin: 'kotlin-kapt'
همچنین باید هرگونه پیکربندی باقیمانده مربوط به kapt، مانند موارد زیر را حذف کنید:
کاتلین
kapt { correctErrorTypes = true useBuildCache = true }
گرووی
kapt { correctErrorTypes true useBuildCache true }