افزونهی اندروید گریدل ۹.۰ پشتیبانی داخلی از کاتلین را معرفی کرده و آن را به طور پیشفرض فعال میکند. این بدان معناست که دیگر لازم نیست افزونهی org.jetbrains.kotlin.android
(یا kotlin-android
) را در فایلهای ساخت خود برای کامپایل فایلهای منبع کاتلین اعمال کنید. با کاتلین داخلی، فایلهای ساخت شما سادهتر میشوند و میتوانید از مشکلات سازگاری بین AGP و افزونهی kotlin-android
جلوگیری کنید.
فعال کردن کاتلین داخلی
برای پشتیبانی از کاتلین داخلی به AGP 9.0 یا بالاتر نیاز دارید. AGP 9.0 از قبل کاتلین داخلی را برای تمام ماژولهای شما که AGP را اعمال میکنید، فعال میکند، بنابراین نیازی به انجام کاری برای فعال کردن آن ندارید. با این حال، اگر قبلاً با تنظیم android.builtInKotlin=false
در فایل gradle.properties
از کاتلین داخلی انصراف دادهاید ، باید آن تنظیم را حذف کنید یا android.builtInKotlin=true
را تنظیم کنید.
کاتلین داخلی نیاز به تغییراتی در پروژه شما دارد، بنابراین پس از فعال کردن کاتلین داخلی، مراحل بعدی را برای مهاجرت پروژه خود دنبال کنید.
مراحل مهاجرت
بعد از اینکه پروژه خود را از نسخه قدیمیتر AGP به AGP 9.0 ارتقا دادید یا بعد از اینکه Kotlin داخلی را به صورت دستی فعال کردید، ممکن است پیام خطای زیر را مشاهده کنید:
Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
... یا
Failed to apply plugin 'com.jetbrains.kotlin.android'
> The 'org.jetbrains.kotlin.android' plugin is no longer required for Kotlin support since AGP 9.0.
این خطا به این دلیل رخ میدهد که کاتلین داخلی نیاز به تغییراتی در پروژه شما دارد. برای رفع این خطا، مراحل زیر را دنبال کنید:
- افزونه
kotlin-android
را حذف کنید - در صورت لزوم، افزونه
kotlin-kapt
را منتقل کنید - در صورت لزوم، بلوک
kotlinOptions{}
را منتقل کنید.
۱. افزونهی kotlin-android
را حذف کنید
افزونهی org.jetbrains.kotlin.android
(یا kotlin-android
) را از فایلهای ساخت سطح ماژول که در آن اعمال میکنید، حذف کنید. کد دقیقی که باید حذف شود بستگی به این دارد که آیا از کاتالوگهای نسخه برای تعریف افزونهها استفاده میکنید یا خیر.
به همراه کاتالوگ نسخهها
کاتلین
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
گرووی
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
بدون کاتالوگ نسخه
کاتلین
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
گرووی
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
سپس، افزونه را از فایل ساخت سطح بالای خود حذف کنید:
به همراه کاتالوگ نسخهها
کاتلین
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
گرووی
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
بدون کاتالوگ نسخه
کاتلین
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
گرووی
// Top-level build file plugins {id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false}
اگر از کاتالوگهای نسخه استفاده میکنید، تعریف افزونه را از فایل کاتالوگ نسخه TOML (معمولاً gradle/libs.versions.toml
) نیز حذف کنید:
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
۲. در صورت لزوم، افزونه kotlin-kapt
را منتقل کنید
اگر از org.jetbrains.kotlin.kapt
(یا kotlin-kapt
) در فایلهای ساخت خود استفاده میکنید، این افزونه با کاتلین داخلی سازگار نخواهد بود. توصیه میکنیم پروژه خود را به KSP منتقل کنید .
با این حال، اگر هنوز آماده استفاده از KSP نیستید، باید افزونه kotlin-kapt
را با افزونه com.android.legacy-kapt
جایگزین کنید، و از همان نسخه افزونه فعلی Android Gradle خود استفاده کنید.
برای مثال، با کاتالوگهای نسخه، فایل TOML کاتالوگ نسخه خود را به صورت زیر بهروزرسانی کنید:
[plugins] android-application = { id = "com.android.application", version.ref = "AGP_VERSION" } # Add the following plugin definition legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "AGP_VERSION" } # Remove the following plugin definitionkotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "KOTLIN_VERSION" }
سپس، فایلهای ساخت خود را بهروزرسانی کنید:
کاتلین
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
گرووی
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
کاتلین
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
گرووی
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
۳. در صورت لزوم، بلوک kotlinOptions{}
را منتقل کنید.
اگر از android.kotlinOptions{}
DSL استفاده میکنید، باید آن را به kotlin.compilerOptions{}
DSL منتقل کنید.
برای مثال، این کد را بهروزرسانی کنید:
کاتلین
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
گرووی
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...به سوی DSL جدید:
کاتلین
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
گرووی
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
گزارش مشکلات
پس از انجام مراحل قبلی، اگر با مشکلی مواجه شدید، مشکلات شناختهشده در توضیحات مشکل #۴۳۸۶۷۸۶۴۲ را بررسی کنید و در صورت نیاز به ما بازخورد دهید.
از کاتلین داخلی صرف نظر کنید
اگر نمیتوانید پروژه خود را به کاتلین داخلی منتقل کنید، در فایل gradle.properties
مقدار android.builtInKotlin = false
را تنظیم کنید تا موقتاً غیرفعال شود. وقتی این کار را انجام میدهید، هنگام ساخت، هشداری نمایش داده میشود که به شما یادآوری میکند به کاتلین داخلی مهاجرت کنید، زیرا در نسخههای بعدی AGP 9.x قبل از AGP 10.0 نمیتوانید کاتلین داخلی را غیرفعال کنید.
زمانی که برای مهاجرت پروژه خود آماده شدید، کاتلین داخلی (همراه با DSL جدید ) را فعال کنید و مراحل مهاجرت را دنبال کنید.
مهاجرت ماژول به ماژول
ویژگی android.builtInKotlin
Gradle به شما امکان میدهد کاتلین داخلی را برای تمام ماژولهای خود که در آنها AGP اعمال میکنید، فعال یا غیرفعال کنید.
اگر انتقال همه ماژولها به طور همزمان چالش برانگیز است، میتوانید هر بار یک ماژول را انتقال دهید:
برای غیرفعال کردن کاتلین داخلی برای همه ماژولها، در فایل
gradle.properties
android.builtInKotlin = false
را تنظیم کنید.افزونهی
com.android.experimental.built-in-kotlin
را روی ماژولی که میخواهید کاتلین داخلی را فعال کنید، اعمال کنید. این کار را با استفاده از همان نسخه افزونهی فعلی اندروید Gradle خود انجام دهید.برای انتقال این ماژول به کاتلین داخلی ، مراحل مهاجرت قبلی را دنبال کنید.
پس از انتقال تمام ماژولهایتان، تنظیمات
android.builtInKotlin = false
را درgradle.properties
و افزونهcom.android.experimental.built-in-kotlin
را در فایلهای ساخت خود حذف کنید.