Android Gradle Plugin 4.0, Gradle yapılandırma dosyalarında geleneksel olarak kullanılan programlama dili Groovy'nin yerine Gradle yapılandırmanızda Kotlin'i kullanma desteği ekledi.
Kotlin, daha okunaklı olduğu ve derleme zamanında daha iyi kontrol ve IDE desteği sunduğu için Gradle komut dosyaları yazmak için Groovy'ye tercih edilir.
Kotlin, şu anda Groovy ile karşılaştırıldığında Android Studio'nun kod düzenleyicisinde daha iyi entegrasyon sunsa da Kotlin kullanan derlemeler, Groovy kullanan derlemelerden daha yavaş olma eğilimindedir. Bu nedenle, taşıma yapıp yapmayacağınıza karar verirken derleme performansını göz önünde bulundurun.
Bu sayfada, Android uygulamanızın Gradle derleme dosyalarını Groovy'den Kotlin'e dönüştürmeyle ilgili temel bilgiler yer almaktadır. Daha kapsamlı bir taşıma kılavuzu için Gradle'ın resmi belgelerine bakın.
Zaman Çizelgesi
Android Studio Giraffe'tan itibaren yeni projeler, derleme yapılandırması için varsayılan olarak Kotlin DSL'yi (build.gradle.kts
) kullanır. Söz dizimi vurgulama, kod tamamlama ve tanımlara gezinme özellikleri sayesinde Groovy DSL'den (build.gradle
) daha iyi bir düzenleme deneyimi sunar. Daha fazla bilgi için Gradle Kotlin DSL Primer başlıklı makaleyi inceleyin.
Genel terimler
Kotlin DSL: Temel olarak Android Gradle eklentisi Kotlin DSL'yi veya bazen temel Gradle Kotlin DSL'yi ifade eder.
Bu geçiş kılavuzunda, "Kotlin" ve "Kotlin DSL" birbirinin yerine kullanılmaktadır. Benzer şekilde, "Groovy" ve "Groovy DSL" terimleri birbirinin yerine kullanılır.
Komut dosyası dosyası adlandırma
Komut dosyası uzantısı adları, derleme dosyasının yazıldığı dile göre belirlenir:
- Groovy'de yazılmış Gradle derleme dosyaları
.gradle
dosya adı uzantısını kullanır. - Kotlin ile yazılmış Gradle derleme dosyaları
.gradle.kts
dosya adı uzantısını kullanır.
Söz dizimini dönüştürme
Groovy ve Kotlin arasındaki söz diziminde bazı genel farklılıklar olduğundan, 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 izin verirken Kotlin bunları zorunlu kılar. Yapılandırmanızı taşımak için bu tür yöntem çağrılarına parantez ekleyin. Aşağıdaki kodda, Groovy'da bir ayarın nasıl yapılandırılacağı gösterilmektedir:
compileSdkVersion 30
Bu, Kotlin'de yazılmış aynı koddur:
compileSdkVersion(30)
Ödev çağrılarına =
ekleme
Groovy DSL, özellik atarken =
atama operatörünü atlamanıza olanak tanırken Kotlin bunu gerektirir. Aşağıdaki kodda, Groovy'da özelliklerin nasıl atanacağı gösterilmektedir:
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Bu kodda, Kotlin'de mülklerin 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: Groovy, dizelerin tek tırnak işareti kullanılarak tanımlanmasına izin verirken Kotlin için çift tırnak işareti gerekir.
-
Noktalı ifadelerde dize ekleme: Groovy'de, noktalı ifadelerde dize ekleme için yalnızca
$
ön ekini kullanabilirsiniz. Ancak Kotlin, noktalı ifadeleri köşeli parantezle sarmalamanızı gerektirir. Örneğin, Groovy'de aşağıdaki snippet'te gösterildiği gibi$project.rootDir
kullanabilirsiniz:myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"
Ancak Kotlin'de önceki kod,
project.rootDir
üzerinde değil,project
üzerindetoString()
çağırır. Kök dizinin değerini elde etmek için${project.rootDir}
ifadesini süslü ayraçlarla sarmalayın:myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
Daha fazla bilgi için Kotlin dokümanlarında Dize şablonları bölümüne bakın.
Dosya uzantılarını yeniden adlandırma
İçeriklerini taşırken her derleme dosyasına .kts
ekleyin. Örneğin, settings.gradle
dosyası gibi bir derleme dosyası seçin. Dosyayı settings.gradle.kts
olarak yeniden adlandırın ve dosya içeriğini Kotlin'e dönüştürün. Her derleme dosyasının taşınmasından sonra projenizin derlemeye devam ettiğinden emin olun.
Önce en küçük dosyalarınızı taşıyın, deneyim kazanın ve ardından devam edin. Bir projede Kotlin ve Groovy derleme dosyalarının bir karışımı olabilir. Bu nedenle, taşıma işlemini dikkatlice ve acele etmeden yapın.
def
yerine val
veya var
koyun
def
değerini val
veya var
ile değiştirin. Bu, Kotlin'de değişkenleri tanımlama şeklidir.
Aşağıda Groovy'da bir değişken beyanı verilmiştir:
def building64Bit = false
Bu, Kotlin'de yazılmış aynı koddur:
val building64Bit = false
Boole özelliklerinin önüne is
ekleme
Groovy, mülk adlarına göre mülk çıkarma mantığını kullanır. foo
adlı bir boole özelliğinin çıkarılmış yöntemleri getFoo
, setFoo
veya isFoo
olabilir. Dolayısıyla, Kotlin'e dönüştürdüğünüzde özellik adlarını Kotlin tarafından desteklenmeyen, çıkarılmış yöntemlerle değiştirmeniz gerekir. Örneğin, buildTypes
DSL mantıksal öğelerinin önüne is
eklemeniz gerekir. Aşağıdaki kodda, Groovy'da boole özelliklerinin nasıl ayarlanacağı gösterilmektedir:
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
...
}
debug {
debuggable true
...
}
...
Aşağıdaki kod, Kotlin'dekiyle aynıdır. Mülklerin önüne is
eklendiğini unutmayın.
android {
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
...
}
getByName("debug") {
isDebuggable = true
...
}
...
Listeleri ve haritaları dönüştürme
Groovy ve Kotlin'deki listeler ve haritalar farklı söz dizimi kullanılarak tanımlanır. Groovy []
kullanırken Kotlin, koleksiyon oluşturma yöntemlerini listOf
veya mapOf
kullanarak açıkça çağırır. Taşıma işlemi sırasında []
değerini listOf
veya mapOf
ile değiştirdiğinizden emin olun.
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 yayınlama derleme türleri varsayılan olarak kullanılabilir. Diğer tüm özel derleme türleri manuel olarak oluşturulmalıdır.
Groovy'da hata ayıklama, sürüm ve belirli diğer derleme türlerini önce oluşturmadan kullanabilirsiniz. Aşağıdaki kod snippet'i, Groovy'de debug
, release
ve benchmark
derleme türlerine sahip bir yapılandırmayı göstermektedir.
buildTypes {
debug {
...
}
release {
...
}
benchmark {
...
}
}
Kotlin'de eşdeğer yapılandırmayı oluşturmak için benchmark
derleme türünü açıkça oluşturmanız gerekir.
buildTypes {
debug {
...
}
release {
...
}
register("benchmark") {
...
}
}
Derleme komut dosyasından eklenti blokuna taşı
Derlemenizde projeye eklenecek eklentiler için buildscript {}
bloğu kullanılıyorsa bunun yerine plugins {}
bloğunu kullanacak şekilde yeniden yapılandırmanız gerekir. plugins {}
bloğu, eklentilerin uygulanmasını kolaylaştırır ve sürüm kataloglarıyla iyi çalışır.
Ayrıca, derleme dosyalarınızda plugins {}
bloğunu kullandığınızda Android Studio, derleme başarısız olsa bile bağlamın farkındadır. Bu bağlam, Studio IDE'nin kod tamamlama işlemi gerçekleştirmesine ve diğer yararlı öneriler sunmasına olanak tanıdığından Kotlin DSL dosyalarınızda düzeltme yapmanıza yardımcı olur.
Eklenti kimliklerini bulma
buildscript {}
bloğu, eklentileri Maven koordinatlarını (ör. com.android.tools.build:gradle:7.4.0
) kullanarak derleme sınıf yoluna eklerken plugins {}
bloğu bunun yerine eklenti kimliklerini kullanır.
Çoğu eklenti için eklenti kimliği, apply plugin
kullanarak eklentiyi uygularken kullanılan dizedir. Örneğin, aşağıdaki eklenti kimlikleri Android Gradle eklentisinin bir parçasıdır:
com.android.application
com.android.library
com.android.lint
com.android.test
Eklenti listesinin tamamını Google Maven deposunda bulabilirsiniz.
Kotlin eklentilerine birden fazla eklenti kimliği tarafından referans verilebilir. Alan adı belirtilmiş eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre kısayoldan alan adı belirtilmiş eklenti kimliğine yeniden yapılandırmanızı öneririz:
Kısaltma 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 |
Eklentileri Gradle Eklenti Portalı, Maven Merkezi Veri Havuzu ve Google Maven deposunda da arayabilirsiniz. Eklenti kimliklerinin işleyiş şekli hakkında daha fazla bilgi edinmek için Özel Gradle Eklentileri Geliştirme başlıklı makaleyi okuyun.
Yeniden yapılandırmayı gerçekleştirin
Kullandığınız eklentilerin kimliklerini öğrendikten sonra aşağıdaki adımları uygulayın:
buildscript {}
blokunda tanımlanan eklentiler için hâlâ depolarınız varsa bunlarısettings.gradle
dosyasına taşıyın.Eklentileri, üst düzey
build.gradle
dosyasındaplugins {}
bloğuna ekleyin. Burada eklentinin kimliğini ve sürümünü belirtmeniz gerekir. Eklentinin kök projeye uygulanması gerekmiyorsaapply false
kullanın.Üst düzey
build.gradle.kts
dosyasındanclasspath
girişlerini kaldırın.Modül düzeyindeki
build.gradle
dosyasındaplugins {}
bloğuna ekleyerek eklentileri uygulayın. Sürüm kök projeden devralındığı için yalnızca eklentinin kimliğini burada belirtmeniz yeterlidir.Eklenti için
apply plugin
çağrısını modül düzeyindekibuild.gradle
dosyasından kaldırın.
Örneğin, şu kurulumda buildscript {}
bloğu kullanılmıştı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")
plugins {}
bloğu kullanılarak oluşturulan eşdeğer kurulum:
// 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ürme
plugins {}
bloğundaki eklentileri uygulama, Groovy ve Kotlin'de benzer şekilde yapılır.
Aşağıdaki kodda, sürüm kataloglarını kullanırken Groovy'da eklentilerin nasıl uygulanacağı gösterilmektedir:
// 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 kodda, aynı işlemin Kotlin'de nasıl yapılacağı gösterilmektedir:
// 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 kodda, sürüm kataloglarını kullanmadığınızda Groovy'da eklentilerin nasıl uygulanacağı gösterilmektedir:
// 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 kodda, aynı işlemin Kotlin'de nasıl yapılacağı gösterilmektedir:
// 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 {}
bloğu hakkında daha fazla bilgi için Gradle dokümanlarında Eklentileri uygulama bölümüne bakın.
Çeşitli
Diğer işlevler için Kotlin kod örnekleri için aşağıdaki belge sayfalarını inceleyin:
- ProGuard yapılandırmanız varsa Sıkıştırma, karartma ve optimizasyonu etkinleştirme başlıklı makaleyi inceleyin.
signingConfig {}
bloğunuz varsa Derleme dosyalarınızdan imzalama bilgilerini kaldırma başlıklı makaleyi inceleyin.- Proje genelinde mülkler kullanıyorsanız Proje genelinde mülkleri yapılandırma başlıklı makaleyi inceleyin.
Bilinen sorunlar
Şu anda Kotlin ile derleme hızının Groovy'ya kıyasla daha yavaş olabileceği bir bilinen sorun vardır.
Sorun bildirme
Sorununuzu önceliklendirmek için ihtiyaç duyduğumuz bilgileri nasıl sağlayacağınızla ilgili talimatlar için Derleme araçları ve Gradle hataları ile ilgili ayrıntılar başlıklı makaleyi inceleyin. Daha sonra, Google herkese açık sorun izleyicisini kullanarak hata bildiriminde bulunun.
Diğer kaynaklar
Kotlin ile yazılmış Gradle derleme dosyalarının çalışan bir örneği için GitHub'daki Now In Android örnek uygulamasına bakın.