Android Gradle eklentisi 4.0, Gradle yapılandırma dosyalarında geleneksel olarak kullanılan programlama dili olan Groovy'nin yerine, Gradle derleme yapılandırmanızda Kotlin kullanma desteği ekledi.
Daha okunabilir olduğu ve daha iyi derleme zamanı denetimi ve IDE desteği sunduğu için Kotlin, Gradle komut dosyaları yazmak için Groovy yerine Kotlin'i tercih eder.
Kotlin, Android Studio'nun kod düzenleyicisiyle Groovy ile karşılaştırıldığında şu anda daha iyi entegrasyon sunsa da Kotlin kullanan derlemeler, Groovy kullanan derlemelerden daha yavaş olma eğilimindedir. Bu nedenle, taşıma konusunda 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 sağlanmaktadır. Daha kapsamlı bir taşıma rehberi için Gradle'ın resmi belgelerini inceleyin.
Zaman Çizelgesi
Android Studio Giraffe'dan başlayarak, yeni projelerde derleme yapılandırması için varsayılan olarak Kotlin DSL (build.gradle.kts
) kullanılmaktadır. Bu özellik, 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ına bakın.
Ortak terimler
Kotlin DSL: Öncelikle Android Gradle eklentisi Kotlin DSL'yi veya bazen alttaki Gradle Kotlin DSL'sini ifade eder.
Bu geçiş kılavuzunda "Kotlin" ve "Kotlin DSL" birbirinin yerine kullanılmaktadır. Benzer bir şekilde, "Groovy" ve "Groovy DSL" birbirinin yerine kullanılır.
Komut dosyası dosyası adlandırma
Komut dosyası dosya uzantısı adları, derleme dosyasının yazıldığı dile bağlıdır:
- Groovy ile yazılan Gradle derleme dosyalarında
.gradle
dosya adı uzantısı kullanılır. - Kotlin'de yazılan Gradle derleme dosyaları,
.gradle.kts
dosya adı uzantısını kullanır.
Söz dizimini dönüştürme
Groovy ve Kotlin arasında söz diziminde bazı genel farklar 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 olanak tanırken Kotlin için bunlar 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ılan kodla aynıdır:
compileSdkVersion(30)
=
adlı kişiyi atama görüşmelerine ekle
Groovy DSL, mülk atarken =
atama operatörünü atlamanızı sağlar ancak Kotlin bunu gerektirir. Bu kod, Groovy'de
özelliklerin nasıl atanacağını gösterir:
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Bu kod, Kotlin'de mülklerin nasıl atanacağını gösterir:
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
Dizeleri dönüştür
Groovy ve Kotlin arasındaki dize farkları:
- 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, noktalı ifadeleri süslü ayraçlarla sarmalamanızı gerektirir. Ö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
toString()
işleviniproject.rootDir
değilproject
üzerinde ç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 edinmek için Kotlin dokümanlarındaki 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 sonra yolunuza devam edin. Bir projede Kotlin ve Groovy derleme dosyalarını karışık olarak bulundurabilirsiniz. Bu yüzden, dikkatli bir şekilde harekete geçmek için acele etmeyin.
def
yerine val
veya var
koyun
def
öğesini val
veya var
ile değiştirin. Bu, Kotlin'de değişkenleri açıklama şeklidir.
Bu, Groovy'deki bir değişken bildirimidir:
def building64Bit = false
Bu, Kotlin'de yazılan kodla aynıdır:
val building64Bit = false
Boole özelliklerini is
ile öne çıkarın
Groovy, mülk adlarına göre mülk kesinti mantığını kullanır. foo
boole özelliği için çıkarılmış yöntemler getFoo
, setFoo
veya isFoo
olabilir. Böylece, Kotlin'e dönüştürüldükten sonra özellik adlarını Kotlin tarafından desteklenmeyen çıkarım yapılan yöntemlerle değiştirmeniz gerekir. Örneğin, buildTypes
DSL boole öğeleri için bunların önüne is
eklemeniz 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'de aynıdır. Özelliklerin önekinin is
olduğ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 haritalar farklı söz dizimi kullanılarak tanımlanır. Groovy []
kullanırken Kotlin, listOf
veya mapOf
kullanarak koleksiyon oluşturma yöntemlerini açık bir şekilde çağırıyor. Taşıma sırasında []
değerini listOf
veya mapOf
ile değiştirdiğinizden emin olun.
Groovy ve Kotlin karşılaştırmasında bir listeyi şu şekilde tanımlayabilirsiniz:
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ı nasıl tanımlayacağınız aşağıda açıklanmıştır:
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 dolaylı 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 belirli diğer derleme türlerini oluşturmadan önce kullanabilirsiniz. Aşağıdaki kod snippet'i, Groovy'de debug
, release
ve benchmark
derleme türlerini içeren 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") {
...
}
}
Buildscript'ten eklenti blokuna taşı
Derlemeniz, projeye eklenti eklemek için buildscript {}
bloğunu kullanıyorsa bunun yerine plugins {}
blokunu kullanmak için yeniden düzenleme yapmanız gerekir. plugins {}
bloku, eklentilerin uygulanmasını kolaylaştırır ve sürüm kataloglarıyla uyumlu bir şekilde çalışır.
Ayrıca, derleme dosyalarınızda plugins {}
blokunu kullandığınızda, derleme başarısız olsa bile Android Studio bağlamdan haberdar olur. Bu bağlam, Studio IDE'nin kod tamamlamayı gerçekleştirmesine ve başka yararlı öneriler sağlamasına olanak tanıdığından Kotlin DSL dosyalarınızda düzeltmeler yapılmasına yardımcı olur.
Eklenti kimliklerini bulma
buildscript {}
bloğu, örneğin com.android.tools.build:gradle:7.4.0
gibi eklentinin Maven koordinatlarını kullanarak eklentileri derleme sınıf yoluna eklerken plugins {}
bloğu bunun yerine eklenti kimliklerini kullanır.
Çoğu eklentide, eklenti kimliği, eklentileri apply plugin
kullanarak uyguladığınızda kullanılan dizedir. Örneğin, aşağıdaki eklenti kimlikleri Android Gradle Plugin'in 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. Adlandırılmış eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre yeniden düzenleme yaparak ad alanı oluşturulmuş eklenti kimliğini kullanmanızı öneririz:
Steno eklenti kimlikleri | Ad alanlı 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 |
Gradle Eklenti Portalı'nda, Maven Central Repository'de ve Google Maven deposunda da eklenti arayabilirsiniz. Eklenti kimliklerinin işleyiş şekli hakkında daha fazla bilgi edinmek için Özel Gradle Eklentileri Geliştirme bölümünü okuyun.
Yeniden düzenleme işlemini gerçekleştirin
Kullandığınız eklentilerin kimliklerini öğrendikten sonra, aşağıdaki adımları uygulayın:
buildscript {}
blokunda bildirilen eklentiler için depolarınız hâlâ 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
işlevini kullanın.classpath
girişlerini üst düzeybuild.gradle.kts
dosyasından kaldırın.Eklentileri, modül düzeyindeki
build.gradle
dosyasındakiplugins {}
blokuna ekleyerek uygulayın. Sürüm kök projeden devralındığı için 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, şu 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")
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ür
plugins {}
blokundan eklentiler uygulamak Groovy ve Kotlin'de benzerdir.
Aşağıdaki kod, sürüm kataloglarını kullanırken Groovy'de eklentilerin nasıl uygulanacağını gösterir:
// 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, bu 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, sürüm kataloglarını kullanmadığınızda Groovy'de eklentilerin nasıl uygulanacağını gösterir:
// 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, bu 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 {}
bloku hakkında daha fazla bilgi için Gradle dokümanlarındaki Eklentileri uygulama bölümüne bakın.
Diğer
Diğer işlevlere yönelik Kotlin kod örnekleri için aşağıdaki belge sayfalarına bakın:
- ProGuard yapılandırmanız varsa Daraltma, kod karartma ve optimizasyonu etkinleştirme konusuna bakın.
signingConfig {}
engellemeniz varsa İmzalama bilgilerini derleme dosyalarınızdan 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 bilinen bir sorun, kotlin ile derleme hızının Groovy ile kıyaslandığında daha yavaş olabilmesidir.
Sorunları bildirme
Sorununuzu önceliklendirmek amacıyla ihtiyacımız olan bilgileri nasıl sağlayacağımız hakkında talimatlar için Derleme araçları ve Gradle hataları ile ilgili ayrıntılar bölümüne bakın. Ardından, Google herkese açık sorun izleyicisini kullanarak bir 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.