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 ayarlayarak etkinleştirmeniz gerekir.

Yerleşik Kotlin'i kullanmak 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.

Bunun nedeni, yerleşik Kotlin'in projenizde bazı değişiklikler yapmanızı gerektirmesidir. 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. Bu eklentiyi, mevcut Android Gradle eklentinizle aynı sürümü kullanarak com.android.legacy-kapt eklentisiyle değiştirmeniz gerekir.

Ö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 sorunlara göz atın 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 yerleşik Kotlin'i 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.

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.