Yerleşik Kotlin'e taşıma

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 android.builtInKotlin=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:

  1. kotlin-android eklentisini kaldırma
  2. Gerekirse kotlin-kapt eklentisini taşıyın
  3. Gerekirse kotlinOptions{} bloğunu 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 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

Derleme dosyalarınızda org.jetbrains.kotlin.kapt (veya kotlin-kapt) kullanıyorsanız bu eklenti yerleşik Kotlin ile uyumlu olmaz. Projenizi KSP'ye taşımanızı öneririz.

Ancak KSP'yi kullanmaya henüz hazır değilseniz kotlin-kapt eklentisini com.android.legacy-kapt eklentisiyle değiştirmeniz gerekir. Bu işlemi yaparken mevcut 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 definition
kotlin-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 false
    alias(libs.plugins.kotlin.kapt) apply false
}

Groovy

// Top-level build file
plugins {
    alias(libs.plugins.legacy.kapt) apply false
    alias(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 kotlinOptions{} bloğunu 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
    }
}

Sorun bildir

Önceki adımları tamamladıktan sonra sorunlarla karşılaşırsanız 438678642 numaralı sorunun açıklamasındaki 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 gradle.properties dosyasında android.builtInKotlin = false değerini ayarlayarak geçici olarak devre dışı bırakı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 (yeni DSL ile birlikte) 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:

  1. android.builtInKotlin = false dosyasında gradle.properties değerini ayarlayarak tüm modüller için yerleşik Kotlin'i devre dışı bırakın.

  2. Mevcut Android Gradle eklentinizle aynı sürümü kullanarak yerleşik Kotlin'i etkinleştirmek istediğiniz modüle com.android.experimental.built-in-kotlin eklentisini uygulayın.

  3. Bu modülü yerleşik Kotlin'e taşımak için önceki taşıma adımlarını uygulayın.

  4. Tüm modüllerinizi taşıdıktan sonra gradle.properties içindeki android.builtInKotlin = false ayarını ve derleme dosyalarınızdaki com.android.experimental.built-in-kotlin eklentisini kaldırın.