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'i 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ı yazma konusunda Groovy yerine Kotlin'i tercih eder.
Kotlin, Android Studio'nun kod düzenleyicide Groovy ile karşılaştırıldığında şu anda daha iyi entegrasyon sunsa da Kotlin kullanan derlemeler genellikle Groovy ile yapılan derlemelere göre daha yavaştır. Bu nedenle, geçiş yapıp yapmamaya karar verirken derleme performansını göz önünde bulundurun.
Bu sayfada, Android uygulamanızın Graadle derleme dosyalarını Groovy'den Kotlin'e dönüştürmeyle ilgili temel bilgiler verilmektedir. Daha kapsamlı bir geçiş kılavuzu için Gradle'ın resmi belgelerine bakın.
Zaman Çizelgesi
Android Studio Zürafa'dan başlayarak, yeni projelerde derleme yapılandırması için varsayılan olarak Kotlin DSL
(build.gradle.kts
) kullanılmaktadır. Söz dizimi vurgulama, kod tamamlama ve bildirimlerde gezinme özellikleriyle Groovy DSL'ye (build.gradle
) kıyasla daha iyi bir düzenleme deneyimi sunar. Daha fazla bilgi için Gradle Kotlin DSL Primer'a bakın.
Ortak terimler
Kotlin DSL: Öncelikle Android Gradle eklentisi Kotlin DSL'ye veya bazen de temel Gradle Kotlin DSL'sine atıfta bulunur.
Bu geçiş kılavuzunda "Kotlin" ve "Kotlin DSL" birbirinin yerine kullanılmaktadır. Benzer bir şekilde, "Groovy" ve "Groovy DSL" birbirlerinin yerine kullanılıyor.
Komut dosyası adlandırma
Komut dosyası uzantısı adları, derleme dosyasının yazıldığı dile bağlıdır:
- Groovy ile yazılan Gradle derleme dosyaları
.gradle
dosya adı uzantısını kullanı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 olduğundan 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 bunları gerektirir. 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ış kodun aynısıdır:
compileSdkVersion(30)
=
adlı kullanıcıyı atama aramalarına 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 nasıl mülk 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 için çift tırnak kullanılması gerekir.
-
Noktalı ifadelerde dize interpolasyonu: Groovy'de, noktalı ifadelerde dize interpolasyonları için yalnızca
$
önekini kullanabilirsiniz ancak Kotlin, noktalı ifadeleri süslü ayraçlarla 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
'de değilproject
üzerindetoString()
çağırır. Kök dizinin değerini elde etmek için${project.rootDir}
ifadesini küme parantezleriyle 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. Dosyanın adını settings.gradle.kts
ve içeriğini Kotlin olarak değiştirin. 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 daha sonra yolunuza devam edin. Projede Kotlin ve Groovy derleme dosyalarını karışık olarak bulundurabilirsiniz. Bu nedenle, çok dikkatli bir şekilde harekete geçmek için acele etmeyin.
def
yerine val
veya var
yazın
def
değerini, Kotlin'de değişkenleri tanımlama yöntemi olan val
veya var
ile değiştirin.
Bu, Groovy'de kullanılan bir değişken bildirimidir:
def building64Bit = false
Bu, Kotlin'de yazılmış kodun aynısıdır:
val building64Bit = false
Boole özelliklerini is
ile önek
Groovy, özellik adlarına dayalı özellik kesinti mantığını kullanır. foo
boole özelliği için türetilen yöntemler getFoo
, setFoo
veya isFoo
olabilir. Bu nedenle, Kotlin'e dönüştürüldükten sonra özellik adlarını Kotlin tarafından desteklenmeyen türetilmiş 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ürün
Groovy ve Kotlin'deki listeler ve haritalar farklı söz dizimi kullanılarak tanımlanır. Groovy, []
yöntemini kullanırken Kotlin, listOf
veya mapOf
kullanarak koleksiyon oluşturma yöntemlerini açıkça ç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ılmış kodun aynısıdır:
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
Groovy ve Kotlin için harita şu şekilde tanımlanır:
def myMap = [key1: 'value1', key2: 'value2']
Bu, Kotlin'de yazılmış kodun aynısı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 diğer derleme türlerini önceden oluşturmadan kullanabilirsiniz. Aşağıdaki kod snippet'i, Groovy'de debug
, release
ve benchmark
derleme türleriyle bir yapılandırmayı gösterir.
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 bloğuna geçiş
Derlemeniz projeye eklenti eklemek için buildscript {}
blokunu 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 Android Studio, derleme başarısız olsa bile içeriğin farkındadır. Bu bağlam, Studio IDE'nin kod tamamlamayı gerçekleştirmesine ve başka faydalı ö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, eklentinin Maven koordinatlarını (örneğin, com.android.tools.build:gradle:7.4.0
) kullanarak derleme sınıf yoluna eklentileri eklerken plugins {}
bloğu bunun yerine eklenti kimliklerini kullanır.
Çoğu eklentide, eklenti kimliği, bunları apply plugin
kullanarak uyguladığınızda kullanılan dizedir. Örneğin, aşağıdaki eklenti kimlikleri Android Gradle Eklentisi'nin 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ış alanlı eklenti kimliğini kullanmanızı ve aşağıdaki tabloyu kullanarak kısaltma yerine ad alanlı eklenti kimliğini yeniden düzenlemenizi öneririz:
Steno eklentisi kimlikleri | Ad aralıklı 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 Merkezi Veri Havuzu'nda 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ştirme
Kullandığınız eklentilerin kimliklerini öğrendikten sonra, aşağıdaki adımları uygulayın:
Hâlâ
buildscript {}
bloğunda tanımlanan eklentiler için 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
işlevini kullanın.Üst düzey
build.gradle.kts
dosyasındanclasspath
girişlerini kaldırın.Eklentileri, modül düzeyindeki
build.gradle
dosyasındakiplugins {}
bloğuna 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 {}
bloğundaki eklentileri 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ö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 kod, aynı işlemi Kotlin'de nasıl yapacağınızı göstermektedir:
// 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östermektedir:
// 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, aynı işlemi Kotlin'de nasıl yapacağınızı göstermektedir:
// 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 belge sayfalarına bakın:
- ProGuard yapılandırmanız varsa Daraltma, kod karartma ve optimizasyonu etkinleştirme konusuna bakın.
signingConfig {}
engellemeniz 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 bilinen bir sorun, derleme hızının Kotlin ile Groovy ile kıyaslandığında daha yavaş olabilmesidir.
Sorun bildirme
Sorununuzun önceliğini belirlemek için gereken bilgilerin nasıl sağlanacağıyla ilgili talimatları Derleme araçları ve Gradle hatalarıyla ilgili ayrıntılar bölümünde bulabilirsiniz. Ardından Google genel 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.