Android Gradle eklentisi 4.0, Gradle derleme yapılandırmanızda geleneksel olarak Gradle yapılandırma dosyalarında kullanılan programlama dili Groovy'nin yerine 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ü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 başlayarak yeni projelerde derleme yapılandırması için varsayılan olarak Kotlin DSL
(build.gradle.kts
) kullanılı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 edinmek için Gradle Kotlin DSL Primer sayfasını 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" değişimli olarak kullanılmaktadır.
Komut dosyası adlandırma
Komut dosyası uzantısı adları, derleme dosyasının yazıldığı dile bağlıdır:
- 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 ekleyin
Groovy, yöntem çağrılarında parantezleri çıkarmanıza izin verirken Kotlin bunu gerektirir. 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ılan kodla aynıdır:
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. Bu kodda, Groovy'de özelliklerin nasıl
atanacağını 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 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 dokümanlarında Dize şablonları bölümüne bakın.
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ı 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 daha sonra 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
değerini val
veya var
ile değiştirin
def
yerine val
veya var
yazın. Bu şekilde Kotlin'de değişkenleri tanımlarsınız.
Bu, Groovy'deki bir değişken bildirimidir:
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 kesintisi mantığı kullanır. foo
boole özelliği için çıkarılan 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 boole öğeleri için bunların önüne is
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ğıda, aynı kodun Kotlin'deki hali verilmiştir. Özelliklerin is
ön ekini aldığını 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 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 bir haritayı şu şekilde tanımlayabilirsiniz:
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'de hata ayıklama, sürüm ve diğer belirli derleme türlerini 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 açıkça benchmark
derleme türünü 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 yapmasına ve başka faydalı öneriler sağlamasına olanak tanıdığı için Kotlin DSL dosyalarınızda düzeltmeler 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. Ad aralıklı eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre kısaltmadan ad alanlı eklenti kimliğine yeniden düzenleme yapmanızı öneririz:
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 |
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ındakiplugins {}
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, 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ür
plugins {}
bloğundan eklenti uygulamak Groovy ve Kotlin'de benzerdir.
Aşağıdaki kod, sürüm kataloglarını kullanırken Groovy'de eklentileri nasıl uygulayacağınızı göstermektedir:
// 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ındaki 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 {}
blokunuz varsa Derleme dosyalarınızdan imzalama bilgilerini kaldırma konusuna bakın.- Proje genelinde mülkler kullanıyorsanız Proje genelinde mülkleri yapılandırma bölümüne bakın.
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.