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 Android Studio'nun kod düzenleyicisinde Groovy'ya kıyasla daha iyi entegrasyon sunsa da Kotlin kullanan derlemeler genellikle Groovy kullanan derlemelerden daha yavaştır. Bu nedenle, taşıma işlemine 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ürme hakkında temel bilgiler verilmektedir. 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 taşıma kılavuzunda "Kotlin" ve "Kotlin DSL" terimleri birbirinin yerine kullanılır. Benzer şekilde, "Groovy" ve "Groovy DSL" terimleri birbirinin yerine kullanılır.
Komut 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 ile Kotlin arasında söz dizimi açısından 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 ekleme
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, mülkleri atarken atama operatörünü =
atlamanıza olanak tanır. Kotlin ise bunu zorunlu kılar. 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 özelliklerin nasıl atanacağı gösterilmektedir:
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
Dizeleri dönüştürme
Groovy ile Kotlin arasındaki dize farklılıkları aşağıda belirtilmiştir:
- 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 almak için${project.rootDir}
ifadesini kıvrık parantezle sarın:myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"
Daha fazla bilgi için Kotlin belgelerindeki 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 derlenmeye 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 şeklinizdir.
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. Bu nedenle, Kotlin'e dönüştürüldükten sonra mülk adlarını Kotlin tarafından desteklenmeyen çıkarılan 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ğıda, aynı kodun Kotlin'deki hali verilmiştir. 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 tanımlama işlemi aşağıda açıklanmıştır:
jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]
Bu, Kotlin'de yazılmış aynı koddur:
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
Groovy ve Kotlin'de harita tanımlama işlemi aşağıdaki gibidir:
def myMap = [key1: 'value1', key2: 'value2']
Bu, Kotlin'de yazılmış aynı koddur:
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 önceden oluşturmadan kullanabilirsiniz. Aşağıdaki kod snippet'inde, Groovy'da debug
, release
ve benchmark
derleme türlerinin kullanıldığı bir yapılandırma gösterilmektedir.
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") {
...
}
}
buildscript'ten plugins bloğuna taşıma
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, eklentinin Maven koordinatlarını (ör. com.android.tools.build:gradle:7.4.0
) kullanarak eklentileri derleme sınıf yoluna ekler. plugins {}
bloğu ise 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 ile referans verilebilir. Alan adı eklenmiş eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre kısayoldan alan adı eklenmiş eklenti kimliğine yeniden yapılandırmanızı öneririz:
Kısaltılmış eklenti kimlikleri | Ad alanı adı verilen 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 {}
bloğunda tanımlanmış eklenti 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ığından burada yalnızca eklentinin kimliğini belirtmeniz gerekir.Modül düzeyindeki
build.gradle
dosyasından eklenti içinapply plugin
çağrısını kaldırın.
Örneğin, bu kurulumda buildscript {}
bloğu kullanılmaktadı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ğundan eklenti uygulamak Groovy ve Kotlin'de benzerdir.
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şlevlere yönelik Kotlin kod örnekleri için aşağıdaki doküman sayfalarına bakın:
- 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.
Sorunları 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. Ardından, Google herkese açık sorun izleyicisini kullanarak hata bildirin.
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.