Android Gradle eklentisi 4.0, Gradle yapılandırma dosyalarında geleneksel olarak kullanılan programlama dili Groovy'nin yerine Gradle derleme yapılandırmanızda Kotlin kullanma desteği ekledi.
Kotlin, daha okunaklı olduğu, daha iyi derleme süresi kontrolü ve IDE desteği sunduğu için Gradle komut dosyaları yazarken Groovy'ye tercih edilir.
Kotlin şu anda Android Studio'nun kod düzenleyicisinde Groovy'ye kıyasla daha iyi entegrasyon sunsa da Kotlin kullanan derlemeler Groovy kullanan derlemelerden daha yavaş olma eğilimindedir. 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 geçiş rehberi için Gradle'ın resmi belgelerini inceleyin.
Zaman çizelgesi
Android Studio Giraffe'den itibaren yeni projeler, derleme yapılandırması için varsayılan olarak Kotlin DSL'yi (build.gradle.kts) kullanır. Bu, söz dizimi vurgulama, kod tamamlama ve bildirimlere gitme özellikleriyle Groovy DSL'den (build.gradle) daha iyi bir düzenleme deneyimi sunar. Daha fazla bilgi için Gradle Kotlin DSL Primer sayfasını inceleyin.
Sık kullanılan terimler
Kotlin DSL: Temel olarak Android Gradle eklentisi Kotlin DSL'yi veya bazen temel Gradle Kotlin DSL'yi ifade eder.
Bu geçiş rehberinde "Kotlin" ve "Kotlin DSL" birbirinin yerine kullanılmaktadır. Benzer şekilde, "Groovy" ve "Groovy DSL" 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 dilinde yazılmış Gradle derleme dosyaları
.gradledosya adı uzantısını kullanır. - Kotlin'de yazılan Gradle derleme dosyaları
.gradle.ktsdosya adı uzantısını kullanır.
Söz dizimini dönüştürme
Groovy ve 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ızın tamamında uygulamanız gerekir.
Yöntem çağrılarına parantez ekleme
Groovy, yöntem çağrılarında parantezleri atlamanıza izin verirken Kotlin'de parantez kullanmanız gerekir. Yapılandırmanızı taşımak için bu tür yöntem çağrılarına parantez ekleyin. Bu kod, Groovy'de bir ayarın nasıl yapılandırılacağını gösterir:
compileSdkVersion 30
Bu, Kotlin'de yazılmış aynı koddur:
compileSdkVersion(30)
Atama aramalarına = ekleyin
Groovy DSL, özellik atarken atama operatörünü (=) atlamanıza olanak tanır. Kotlin ise bu operatörü kullanmanızı zorunlu kılar. Bu kodda, Groovy'de özelliklerin nasıl atanacağı gösterilmektedir:
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Bu kod, Kotlin'de özelliklerin nasıl atanacağını gösterir:
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 kullanılarak tanımlanmasına izin verirken Kotlin, çift tırnak gerektirir.
Noktalı ifadelerde dize interpolasyonu: Groovy'de, noktalı ifadelerdeki dize interpolasyonları için yalnızca
$ön ekini kullanabilirsiniz ancak Kotlin'de noktalı ifadeleri süslü parantez içine almanız gerekir. Örneğin, Groovy'de$project.rootDiröğesini aşağıdaki snippet'te gösterildiği gibi kullanabilirsiniz:myRootDirectory = "$project.rootDir/tools/proguard-rules-debug.pro"Ancak Kotlin'de, önceki kod
project.rootDirüzerinde değil,projectüzerindetoString()çağrısı yapar. Kök dizinin değerini almak için${project.rootDir}ifadesini küme parantezleri içine alın:myRootDirectory = "${project.rootDir}/tools/proguard-rules-debug.pro"Daha fazla bilgi edinmek için Kotlin belgelerindeki 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 dosyanın içeriğini Kotlin'e dönüştürün. Her derleme dosyasının taşınmasından sonra projenizin hâlâ derlendiğ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ı bir arada kullanabilirsiniz. Bu nedenle, geçişi dikkatli bir şekilde yapmak için acele etmeyin.
def yerine val veya var koyun
def yerine val veya var kullanın. Kotlin'de değişkenleri bu şekilde tanımlarsınız.
Groovy'de değişken bildirimi şu şekildedir:
def building64Bit = false
Bu, Kotlin'de yazılmış aynı koddur:
val building64Bit = false
Boole özelliklerinin önüne is ekleyin.
Groovy, mülk adlarına göre mülk çıkarım mantığını kullanır. Boole özelliği foo için çıkarılan yöntemleri getFoo, setFoo veya isFoo olabilir. Bu nedenle, Kotlin'e dönüştürüldükten sonra özellik adlarını Kotlin tarafından desteklenmeyen çıkarılmış yöntemlerle değiştirmeniz gerekir. Örneğin, buildTypes DSL boole öğeleri için is ön ekini kullanmanı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, Kotlin'deki aynı kod verilmiştir. Özelliklerin önünde is ön eki bulunduğunu 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 eşlemeler farklı söz dizimi kullanılarak tanımlanır. Groovy, [] kullanırken Kotlin, listOf veya mapOf kullanarak koleksiyon oluşturma yöntemlerini 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:
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:
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ınlanan derleme türleri dolaylı olarak kullanılabilir. Diğer tüm özel derleme türleri manuel olarak oluşturulmalıdır.
Groovy'de hata ayıklama, yayınlama ve diğer bazı derleme türlerini önceden oluşturmadan kullanabilirsiniz. Aşağıdaki kod snippet'inde, Groovy'de debug, release ve benchmark derleme türlerini içeren 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 geçiş yapma
Derlemeniz projeye eklenti eklemek için buildscript {} bloğunu kullanıyorsa bunun yerine plugins {} bloğunu kullanacak şekilde yeniden düzenlemeniz gerekir. plugins {} bloğu, eklentileri uygulamayı 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ı bilir. Bu bağlam, Studio IDE'nin kod tamamlama ve diğer faydalı öneriler sunmasına olanak tanıdığı için Kotlin DSL dosyalarınızda düzeltmeler 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 eklerken plugins {} bloğu bunun yerine eklenti kimliklerini kullanır.
Çoğu eklenti için eklenti kimliği, eklentileri apply plugin kullanarak uygularken kullanılan dizedir. Örneğin, aşağıdaki eklenti kimlikleri Android Gradle Eklentisi'nin bir parçasıdır:
com.android.applicationcom.android.librarycom.android.lintcom.android.test
Eklentilerin tam listesini Google Maven deposunda bulabilirsiniz.
Kotlin eklentilerine birden fazla eklenti kimliğiyle referans verilebilir. Ad alanlı eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre kısa formdan ad alanlı eklenti kimliğine yeniden düzenlemenizi öneririz:
| Kısa eklenti kimlikleri | Ad alanına sahip 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 Plugin Portal, Maven Central Repository 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 düzenleme işlemini gerçekleştirme
Kullandığınız eklentilerin kimliklerini öğrendikten sonra aşağıdaki adımları uygulayın:
buildscript {}bloğunda tanımlanan eklentiler için hâlâ depolarınız varsa bunlarısettings.gradledosyasına taşıyın.Eklentileri üst düzey
build.gradledosyasındakiplugins {}bloğuna ekleyin. Burada eklentinin kimliğini ve sürümünü belirtmeniz gerekir. Eklentinin kök projeye uygulanması gerekmiyorsaapply falsekullanın.Üst düzey
build.gradle.ktsdosyasındanclasspathgirişlerini kaldırın.Eklentileri, modül düzeyindeki
build.gradledosyasındaplugins {}bloğuna ekleyerek uygulayın. Sürüm, kök projeden devralındığı için burada yalnızca eklentinin kimliğini belirtmeniz gerekir.Eklenti için
apply pluginçağrısını modül düzeyindekibuild.gradledosyasından kaldırın.
Örneğin, bu kurulumda buildscript {} bloğu 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ğunu kullanan 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ürme
plugins {} bloğundan eklenti uygulama işlemi Groovy ve Kotlin'de benzerdir.
Aşağıdaki kodda, sürüm kataloglarını kullanırken Groovy'de 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'de 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 belgelerindeki Eklenti uygulama bölümüne bakın.
Çeşitli
Diğer işlevlerle ilgili Kotlin kod örnekleri için aşağıdaki doküman sayfalarına bakın:
- ProGuard yapılandırmanız varsa Küçültme, kod karartma ve optimizasyonu etkinleştirme başlıklı makaleyi inceleyin.
signingConfig {}bloğunuz varsa İmzalama bilgilerini derleme dosyalarınızdan kaldırma başlıklı makaleyi inceleyin.- Proje genelindeki özellikleri kullanıyorsanız Proje genelindeki özellikleri yapılandırma başlıklı makaleyi inceleyin.
Bilinen sorunlar
Kotlin ile derleme hızının Groovy'ye göre daha yavaş olabileceği bilinen bir sorundur.
Sorun bildirme
Sorununuzu önceliklendirmek için ihtiyaç duyduğumuz bilgileri nasıl sağlayacağınızla ilgili talimatları Derleme araçları ve Gradle hatalarıyla ilgili ayrıntılar bölümünde bulabilirsiniz. Ardından, Google'ın herkese açık Issue Tracker'ını 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.