Derleme yapılandırmanızı Groovy'den Kotlin'e taşıyın

Android Gradle eklentisi 4.0, Gradle derlemenizde Kotlin kullanımı için destek ekledi Groovy'nin yerine kullanabileceğiniz, genellikle Gradle yapılandırma dosyalarında kullanılır.

Gradle senaryoları için Groovy yerine Kotlin tercih ediliyor çünkü Kotlin daha okunaklıdır ve daha iyi derleme zamanı denetimi ve IDE desteği sunar.

Kotlin şu anda Android Studio’nun koduyla daha iyi entegrasyon sağlasa da Groovy ile karşılaştırıldığında, Kotlin kullanan derlemeler kullanarak geliştirir. Bu nedenle, çalışma yapmaya karar verirken taşıma.

Bu sayfada, Android uygulamanızın Groovy'den Kotlin'e Gradle derleme dosyaları. Daha kapsamlı bir taşıma işlemi için lütfen Gradle'ın web sitesine bakın resmi dokümanlara bakın.

Zaman Çizelgesi

Android Studio Giraffe'tan başlayarak yeni projelerde Kotlin DSL kullanılıyor Derleme yapılandırması için varsayılan olarak (build.gradle.kts). Bu sayede, Groovy DSL'ye (build.gradle) göre söz dizimiyle düzenleme deneyimi vurgulama, kod tamamlama ve beyanlara gitme. Daha fazla bilgi edinmek için bkz. Gradle Kotlin DSL Primer.

Genel terimler

Kotlin DSL: Öncelikli olarak Android Gradle eklentisi Kotlin DSL'yi ifade eder. veya bazen temeldeki Gradle Kotlin DSL.

Bu geçiş rehberindeki "Kotlin" ve "Kotlin DSL" birbirlerinin yerine kullanılır. Benzer şekilde, "Groovy" ve "Groovy DSL" birbirlerinin yerine kullanılır.

Komut dosyası dosyasını adlandırma

Komut dosyası uzantısı adları, derleme dosyasının yazıldığı dile bağlıdır içinde:

  • Groovy'de yazılan Gradle derleme dosyaları, .gradle dosya adı uzantısını kullanır.
  • Kotlin'de yazılan Gradle derleme dosyalarında .gradle.kts dosya adı kullanılır uzantısına sahip olur.

Söz dizimini dönüştürme

Groovy ve Kotlin arasındaki söz diziminde bazı genel farklılıklar vardır. Bu nedenle, bu değişiklikleri derleme komut dosyalarınıza uygulamanız gerekir.

Yöntem çağrılarına parantez ekleyin

Groovy, yöntem çağrılarında parantezleri atlamanıza olanak tanırken Kotlin bunu gerektirir gerekir. Yapılandırmanızı taşımak için aşağıdaki türlere parantez ekleyin: yöntemini çağırın. Bu kod, Groovy'de bir ayarın nasıl yapılandırılacağını gösterir:

compileSdkVersion 30

Bu, Kotlin'de yazılan kodla aynıdır:

compileSdkVersion(30)

= adlı kişiyi atama çağrılarına ekle

Groovy DSL, aşağıdaki durumlarda = atama operatörünü atlamanıza Kotlin için gerekli olan özelliklerdir. Bu kod, Groovy'de özellik atayın:

java {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}

Bu kodda, Kotlin'de özelliklerin nasıl atanacağı gösterilmektedir:

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

Dizeleri dönüştürme

Groovy ve Kotlin arasındaki dize farkları şunlardır:

  • Dizeler için çift tırnak işareti: Groovy, dizelerin tek tırnak kullanılarak tanımlanmasına olanak tanırken Kotlin çift tırnak işareti.
  • Noktalı ifadelerde dize interpolasyonu: Groovy'de, için yalnızca $ önekini dize interpolasyonları ancak Kotlin, noktalı ifadeleri süslü ayraçlarla sarmanızı gerektirir. Örneğin, Groovy'de $project.rootDir olarak ayarlayın:

        myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
        

    Ancak Kotlin'de, önceki kod şurada toString() işlevini çağırır: project, project.rootDir değil. Değeri almak için kök dizinin ${project.rootDir} ifadesini sarmalayın. kullanın:

        myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
        

    Daha fazla bilgi edinmek için bkz. Dize şablonları hakkındaki makalemizi incelemenizi öneririz.

Dosya uzantılarını yeniden adlandırma

İçeriğini taşırken her derleme dosyasına .kts ekleyin. Örneğin, settings.gradle dosyası gibi bir derleme dosyası seçin. Dosyayı şu şekilde yeniden adlandır: settings.gradle.kts ve dosyanın içeriğini Kotlin biçimine dönüştürün. Lütfen Her derleme dosyasının taşınmasından sonra proje derlemeye devam eder.

Önce en küçük dosyalarınızı taşıyın, deneyim kazanın ve daha sonra devam edin. Şunları yapabilirsiniz: bir projede Kotlin ve Groovy derleme dosyalarını karışık olarak kullanabilirsiniz, bu nedenle dikkatli bir şekilde yapın.

def değerini val veya var ile değiştirin

def değerini val veya var ile değiştirin. Kotlin'de değişkenleri nasıl tanımladığınız. Bu, Groovy'deki bir değişken bildirimidir:

def building64Bit = false

Bu, Kotlin'de yazılan kodla aynıdır:

val building64Bit = false

Boole özelliklerinin önüne is ekle

Groovy, mülk kesinti mantığını kullanıyor özellik adlarını temel alır. foo boole özelliği için, çıkarılmış yöntemleri getFoo, setFoo veya isFoo olabilir. Bir zamanlar Kotlin'e dönüştürüldükten sonra özellik adlarını, çıkarılan yöntemlerle değiştirmeniz gerekiyor. Google Analytics 4'te tarama yapar. Örneğin, buildTypes DSL boole öğeleri; bunların önüne is işareti koymanız gerekir. Bu kod Groovy'de boole özelliklerinin nasıl ayarlanacağını gösterir:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            ...
        }
        debug {
            debuggable true
            ...
        }
    ...

Aşağıdaki kod, Kotlin'dekiyle aynıdır. Özelliklerin is tarafından.

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
            ...
        }
        getByName("debug") {
            isDebuggable = true
            ...
        }
    ...

Listeleri ve haritaları dönüştürün

Groovy ve Kotlin'deki listeler ve haritalar farklı söz dizimi kullanılarak tanımlanır. Eski [] kullanıyor. Kotlin ise koleksiyon oluşturma yöntemlerini açıkça şunu kullanarak çağırıyor: listOf veya mapOf. Aşağıdaki durumlarda [] yerine listOf veya mapOf koyun: yardımcı olur.

Groovy ve Kotlin'de liste şu şekilde tanımlanır:

jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]

Bu, Kotlin'de yazılan kodla aynıdır:

jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")

Groovy ve Kotlin'de bir haritayı şu şekilde tanımlayabilirsiniz:

def myMap = [key1: 'value1', key2: 'value2']

Bu, Kotlin'de yazılan kodla aynıdır:

val myMap = mapOf("key1" to "value1", "key2" to "value2")

Derleme türlerini yapılandırma

Kotlin DSL'de yalnızca hata ayıklama ve sürüm derleme türleri kullanılabilir dolaylı yoldan olabilir. Diğer tüm özel derleme türleri manuel olarak oluşturulmalıdır.

Groovy'de hata ayıklama, sürüm ve diğer belirli derleme türlerini önce onları oluşturmanız gerekir. Aşağıdaki kod snippet'i debug, release ve benchmark derlemesi Groovy yazıyor.

buildTypes {
 debug {
   ...
 }
 release {
   ...
 }
 benchmark {
   ...
 }
}

Kotlin'de eşdeğer yapılandırmayı oluşturmak için öncelikle benchmark derleme türü.

buildTypes {
 debug {
   ...
 }

 release {
   ...
 }
 register("benchmark") {
    ...
 }
}

Derleme komut dosyasından eklenti bloğuna geç

Derlemeniz buildscript {} engellemek istiyorsanız plugins {} engelleyebilirsiniz. plugins {} bloğu, eklentileri uygulamayı kolaylaştırır ve uyumlu olduğu sürüm kataloglarını inceleyin.

Ayrıca, derleme dosyalarınızda plugins {} blokunu kullandığınızda Android Studio, derleme başarısız olsa bile bağlamı bilir. Bu bağlam Studio IDE'nin şunu yapmasına olanak tanıdığından Kotlin DSL dosyalarınızda düzeltmeler yapmanıza yardımcı olur yardımcı olacak başka öneriler de sunun.

Eklenti kimliklerini bulma

buildscript {} bloğu, eklentileri "the" Maven koordinatları eklentisine (örneğin, com.android.tools.build:gradle:7.4.0) plugins {} bloğu bunun yerine eklenti kimliklerini kullanır.

Çoğu eklentide eklenti kimliği, apply plugin Örneğin, aşağıdaki eklenti kimlikleri Android Gradle Eklentisi:

  • com.android.application
  • com.android.library
  • com.android.lint
  • com.android.test

Eklenti listesinin tamamını Google Maven deposu.

Kotlin eklentilerine birden fazla eklenti kimliği tarafından referans verilebilir. Şunu kullanmanızı öneririz: ad alanına eklenmiş eklenti kimliğini değiştirebilir ve aşağıdaki tabloda bulabilirsiniz:

Steno eklenti kimlikleri Ad alanı eklenti kimlikleri
kotlin org.jetbrains.kotlin.jvm
kotlin-android org.jetbrains.kotlin.android
kotlin-kapt org.jetbrains.kotlin.kapt
kotlin-parcelize org.jetbrains.kotlin.plugin.parcelize

Ayrıca, Gradle Eklenti Portalı, Maven Central Repository'dir. ve Google Maven deposu. Okunanlar Özel Gradle Eklentileri Geliştirme inceleyin.

Yeniden düzenleme işlemini gerçekleştirme

Kullandığınız eklentilerin kimliklerini öğrendikten sonra aşağıdaki adımları uygulayın:

  1. buildscript {} içinde tanımlanan eklentiler için hâlâ depolarınız varsa settings.gradle adresine taşıyın dosyası olarak kaydedin.

  2. Eklentileri üst düzeydeki plugins {} bloğuna ekleyin build.gradle dosya Kimliği ve sürümünü burada bulabilirsiniz. Eklentinin kök projeye uygulanacak şekilde apply false kullanın.

  3. Üst düzey build.gradle.kts dosyasından classpath girişlerini kaldırın.

  4. Eklentileriplugins {} modül düzeyinde build.gradle dosyasına sahip olursunuz. Yalnızca eklentinin Sürüm kök projeden devralındığı için kimliği burada gösterilir.

  5. Eklenti için apply plugin çağrısını modül düzeyinden kaldırın build.gradle dosya

Örneğin, şu kurulumda buildscript {} bloku kullanılır:

// Top-level build.gradle file
buildscript {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.4.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0")
        ...
    }
}

// Module-level build.gradle file
apply(plugin: "com.android.application")
apply(plugin: "kotlin-android")

Bu, plugins {} bloğunun kullanıldığı eşdeğer bir kurulumdur:

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.4.0' apply false
   id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
   ...
}

// Module-level build.gradle file
plugins {
   id 'com.android.application'
   id 'org.jetbrains.kotlin.android'
   ...
}

// settings.gradle
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

Eklenti bloğunu dönüştür

plugins {} bloğundaki eklentileri uygulama, Groovy ve Kotlin'de benzer şekilde uygulanır. Aşağıdaki kodda, sürüm katalogları:

// Top-level build.gradle file
plugins {
   alias libs.plugins.android.application apply false
   ...
}

// Module-level build.gradle file
plugins {
   alias libs.plugins.android.application
   ...
}

Aşağıdaki kod, aynı işlemi Kotlin'de nasıl yapacağınızı gösterir:

// Top-level build.gradle.kts file
plugins {
   alias(libs.plugins.android.application) apply false
   ...
}

// Module-level build.gradle.kts file
plugins {
   alias(libs.plugins.android.application)
   ...
}

Aşağıdaki kod, Groovy'de çalışmadığınız (sürüm kataloglarını kullanarak):

// Top-level build.gradle file
plugins {
   id 'com.android.application' version '7.3.0' apply false
   ...
}

// Module-level build.gradle file
plugins {
   id 'com.android.application'
   ...
}

Aşağıdaki kod, aynı işlemi Kotlin'de nasıl yapacağınızı gösterir:

// Top-level build.gradle.kts file
plugins {
   id("com.android.application") version "7.3.0" apply false
   ...
}

// Module-level build.gradle.kts file
plugins {
   id("com.android.application")
   ...
}

plugins {} engellemesiyle ilgili daha fazla bilgi için bkz. Uygulama Eklentiler inceleyebilirsiniz.

Çeşitli

Diğer işlevlerle ilgili Kotlin kod örnekleri için aşağıdakilere bakın belge sayfaları:

ziyaret edin.

Bilinen sorunlar

Şu anda bilinen bir sorun derleme hızının Kotlin ile Groovy'ye göre daha yavaş olabilmesi.

Sorunları bildirme

Sorununuzu belirlemek için ihtiyaç duyduğumuz bilgileri nasıl sağlayabileceğimize ilişkin talimatlar için Derleme araçları ve Gradle hatalarına ilişkin ayrıntılar. Ardından, Google'ı kullanarak hata bildirin herkese açık sorun izleyici.

Diğer kaynaklar

Kotlin ile yazılmış Gradle derleme dosyalarının çalışan bir örneği için Now In Android örnek uygulamasında bulabilirsiniz.