Android Gradle eklentisi 9.0, yerleşik Kotlin desteği sunar ve bu desteği varsayılan olarak etkinleştirir. Bu nedenle, Kotlin kaynak dosyalarını derlemek için artık derleme dosyalarınızda org.jetbrains.kotlin.android (veya kotlin-android) eklentisini uygulamanız gerekmez.
Yerleşik Kotlin ile derleme dosyalarınız daha basittir ve AGP ile kotlin-android eklentisi arasındaki uyumluluk sorunlarını önleyebilirsiniz.
Yerleşik Kotlin'i etkinleştirme
Yerleşik Kotlin desteği için AGP 9.0 veya sonraki bir sürüm gerekir.
AGP 9.0, AGP'yi uyguladığınız tüm modüllerinizde yerleşik Kotlin'i zaten etkinleştirir. Bu nedenle, Kotlin'i etkinleştirmek için herhangi bir işlem yapmanız gerekmez. Ancak daha önce gradle.properties dosyasında android.builtInKotlin=false ayarını yaparak yerleşik Kotlin'i devre dışı bıraktıysanız bu ayarı kaldırmanız veya true olarak ayarlamanız gerekir.
Yerleşik Kotlin'in kullanılabilmesi için projenizde bazı değişiklikler yapmanız gerekir. Bu nedenle, yerleşik Kotlin'i etkinleştirdikten sonra projenizi taşımak için sonraki adımları uygulayın.
Taşıma adımları
Projenizi eski bir AGP sürümünden AGP 9.0'a yükselttikten veya yerleşik Kotlin'i manuel olarak etkinleştirdikten sonra aşağıdaki hata mesajını görebilirsiniz:
Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
...veya
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.
Bu hata, yerleşik Kotlin'in projenizde bazı değişiklikler yapılmasını gerektirmesinden kaynaklanır. Bu hatayı düzeltmek için aşağıdaki adımları uygulayın:
kotlin-androideklentisini kaldırma- Gerekirse
kotlin-kapteklentisini taşıyın - Gerekirse
android.kotlinOptions{}DSL'yi taşıyın - Gerekirse
kotlin.sourceSets{}DSL'yi taşıyın
1. kotlin-android eklentisini kaldırın
org.jetbrains.kotlin.android (veya kotlin-android) eklentisini, uyguladığınız modül düzeyindeki derleme dosyalarından kaldırın.
Kaldırılacak tam kod, eklentileri bildirmek için sürüm kataloglarını kullanıp kullanmadığınıza bağlıdır.
Sürüm kataloglarıyla
Kotlin
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Groovy
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Sürüm kataloğu yok
Kotlin
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Groovy
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
Ardından, eklentiyi üst düzey derleme dosyanızdan kaldırın:
Sürüm kataloglarıyla
Kotlin
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Groovy
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Sürüm kataloğu yok
Kotlin
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
Groovy
// Top-level build file plugins {id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false}
Sürüm katalogları kullanıyorsanız eklenti tanımını sürüm kataloğu TOML dosyasından (genellikle gradle/libs.versions.toml) da kaldırın:
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
2. Gerekirse kotlin-kapt eklentisini taşıyın
org.jetbrains.kotlin.kapt (veya kotlin-kapt) eklentisi, yerleşik Kotlin ile uyumlu değil. kapt kullanıyorsanız projenizi KSP'ye taşımanızı öneririz.
Henüz KSP'ye geçemiyorsanız kotlin-kapt eklentisini com.android.legacy-kapt eklentisiyle değiştirin. Android Gradle eklentinizle aynı sürümü kullanın.
Örneğin, sürüm kataloglarında sürüm kataloğu TOML dosyanızı aşağıdaki gibi güncelleyin:
[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" }
Ardından, derleme dosyalarınızı güncelleyin:
Kotlin
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Groovy
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Kotlin
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
Groovy
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
3. Gerekirse android.kotlinOptions{} DSL'yi taşıyın
android.kotlinOptions{} DSL'yi kullanıyorsanız kotlin.compilerOptions{} DSL'ye taşımanız gerekir.
Örneğin, şu kodu güncelleyin:
Kotlin
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Groovy
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...yeni DSL'ye:
Kotlin
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
Groovy
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
4. Gerekirse kotlin.sourceSets{} DSL'yi taşıyın
kotlin-android eklentisini kullandığınızda AGP, android.sourceSets{} DSL'sini veya kotlin.sourceSets{} DSL'sini kullanarak ek Kotlin kaynak dizinleri eklemenize olanak tanır.
android.sourceSets{} DSL ile dizinleri AndroidSourceSet.kotlin veya AndroidSourceSet.java kümesine ekleyebilirsiniz.
Yerleşik Kotlin ile desteklenen tek seçenek, android.sourceSets{} DSL'sini kullanarak dizinleri AndroidSourceSet.kotlin kümesine eklemektir.
Desteklenmeyen seçenekler kullanıyorsanız bunları aşağıdaki şekilde taşıyın:
Kotlin
# Adding Kotlin source directories to kotlin.sourceSets is not supportedkotlin.sourceSets.named("main") { kotlin.srcDir("additionalSourceDirectory/kotlin") }# Adding Kotlin source directories to AndroidSourceSet.java is also not supportedandroid.sourceSets.named("main") { java.directories += "additionalSourceDirectory/kotlin" }# Add Kotlin source directories to AndroidSourceSet.kotlin android.sourceSets.named("main") { kotlin.directories += "additionalSourceDirectory/kotlin" }
Groovy
# Adding Kotlin source directories to kotlin.sourceSets is not supportedkotlin.sourceSets.named("main") { kotlin.srcDir("additionalSourceDirectory/kotlin") }# Adding Kotlin source directories to AndroidSourceSet.java is also not supportedandroid.sourceSets.named("main") { java.directories.add("additionalSourceDirectory/kotlin") }# Add Kotlin source directories to AndroidSourceSet.kotlin android.sourceSets.named("main") { kotlin.directories.add("additionalSourceDirectory/kotlin") }
Belirli bir varyanta Kotlin kaynak dizini eklemek istiyorsanız veya dizin bir görev tarafından oluşturuluyorsa variant API'deki addStaticSourceDirectory veya addGeneratedSourceDirectory yöntemlerini kullanabilirsiniz:
Kotlin
androidComponents.onVariants { variant -> variant.sources.kotlin!!.addStaticSourceDirectory("additionalSourceDirectory/kotlin") variant.sources.kotlin!!.addGeneratedSourceDirectory(TASK_PROVIDER, TASK_OUTPUT) }
Groovy
androidComponents.onVariants { variant -> variant.sources.kotlin!!.addStaticSourceDirectory("additionalSourceDirectory/kotlin") variant.sources.kotlin!!.addGeneratedSourceDirectory(TASK_PROVIDER, TASK_OUTPUT) }
Sorun bildir
Önceki adımları tamamladıktan sonra sorunlarla karşılaşırsanız 438678642 numaralı sorundaki bilinen sorunları inceleyin ve gerekirse bize geri bildirim gönderin.
Yerleşik Kotlin'i devre dışı bırakma
Projenizi yerleşik Kotlin'i kullanacak şekilde taşıyamıyorsanız geçici olarak devre dışı bırakmak için gradle.properties dosyasında android.builtInKotlin=false değerini ayarlayın.
Bu işlemi yaptığınızda derlemede, AGP 10.0'dan önce AGP 9.x'in gelecekteki bir sürümünde yerleşik Kotlin'i devre dışı bırakamayacağınız için yerleşik Kotlin'e geçmenizi hatırlatan bir uyarı gösterilir.
Projenizi taşımaya hazır olduğunuzda yerleşik Kotlin'i etkinleştirin ve taşıma adımlarını uygulayın.
Modül modül taşıma
android.builtInKotlin Gradle özelliği, AGP'yi uyguladığınız tüm modüllerinizde yerleşik Kotlin'i etkinleştirmenize veya devre dışı bırakmanıza olanak tanır.
Tüm modüllerinizi tek seferde taşımak zor geliyorsa modülleri teker teker taşıyabilirsiniz:
android.builtInKotlin=falsedosyasındagradle.propertiesdeğerini ayarlayarak tüm modüller için yerleşik Kotlin'i devre dışı bırakın.Android Gradle eklentinizle aynı sürümü kullanarak yerleşik Kotlin'i etkinleştirmek istediğiniz modüle
com.android.built-in-kotlineklentisini uygulayın.Bu modülü yerleşik Kotlin'e taşımak için önceki taşıma adımlarını uygulayın.
Tüm modüllerinizi taşıdıktan sonra
gradle.propertiesiçindekiandroid.builtInKotlin=falseayarını ve derleme dosyalarınızdakicom.android.built-in-kotlineklentisini kaldırın.
Yerleşik Kotlin'i seçerek devre dışı bırakma seçeneği
Android Gradle eklentisi 9.0, uygulandığı tüm modüllerde yerleşik Kotlin'i etkinleştirir. Büyük projelerde Kotlin kaynakları olmayan modüller için yerleşik Kotlin'i seçerek devre dışı bırakmanızı öneririz. Bu, hem küçük bir derleme performansı maliyeti olan Kotlin derleme görevini hem de Kotlin standart kitaplığına yönelik otomatik bağımlılığı kaldırır.
Bir modülde yerleşik Kotlin'i devre dışı bırakmak için
modülün derleme dosyasında enableKotlin = false değerini ayarlayın:
Kotlin
android { enableKotlin = false }
Groovy
android { enableKotlin = false }