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.
Kotlin, daha okunabilir olması ve daha iyi derleme zamanı kontrolü ile IDE desteği sunması nedeniyle Gradle komut dosyaları yazmak için Groovy'ye tercih edilir.
Kotlin şu anda Android Studio'nun kod düzenleyicisinde Groovy'ye kıyasla daha iyi entegrasyon sunsa da Kotlin kullanılarak oluşturulan derlemeler Groovy kullanılarak oluşturulan derlemelere göre daha yavaş olma eğilimindedir. Bu nedenle, geçiş yapıp yapmayacağınıza 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 projelerde derleme yapılandırması için varsayılan olarak Kotlin DSL (build.gradle.kts
) kullanılır. Bu, söz dizimi vurgulama, kod tamamlama ve bildirimlere gitme gibi özellikleriyle Groovy DSL'den (build.gradle
) daha iyi bir düzenleme deneyimi sunar. Daha fazla bilgi edinmek için Gradle Kotlin DSL Primer'a bakın.
Genel terimler
Kotlin DSL: Öncelikle Android Gradle eklentisi Kotlin DSL'yi veya bazen de temel Gradle Kotlin DSL'yi ifade eder.
Bu taşıma kılavuzunda "Kotlin" ve "Kotlin DSL" terimleri birbirinin yerine kullanılmaktadır. Aynı şekilde, "Groovy" ve "Groovy DSL" terimleri birbirinin yerine kullanılır.
Komut dosyası adlandırma
Komut dosyası uzantı adları, derleme dosyasının yazıldığı dile göre belirlenir:
- Groovy ile yazılmış 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 dizimi açısından bazı genel farklılıklar vardır. Bu nedenle, bu değişiklikleri derleme komut dosyalarınızda 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 kullanmak zorunludur. Yapılandırmanızı taşımak için bu tür yöntem çağrılarına parantez ekleyin. Bu kodda, Groovy'de bir ayarın nasıl yapılandırılacağı gösterilmektedir:
compileSdkVersion 30
Aynı kod Kotlin'de şu şekilde yazılır:
compileSdkVersion(30)
Ödev çağrılarına =
ekleme
Groovy DSL, özellik atarken atama operatörünü =
atlamanıza olanak tanır. Kotlin ise bu operatörün kullanılmasını zorunlu kılar. Bu kod, Groovy'de özelliklerin nasıl atanacağını gösterir:
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 ile Kotlin arasındaki dize farklılıkları:
- Dizeler için çift tırnak: Groovy, dizelerin tek tırnak kullanılarak tanımlanmasına izin verirken Kotlin'de çift tırnak kullanılması gerekir.
-
Noktalı ifadelerde dize enterpolasyonu: Groovy'de noktalı ifadelerde dize enterpolasyonları için yalnızca
$
önekini kullanabilirsiniz ancak Kotlin'de noktalı ifadeleri küme parantezleriyle sarmalamanız gerekir. Ö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 yukarıdaki kod,
toString()
işleviniproject.rootDir
üzerinde değil,project
üzerinde çağırır. Kök dizinin değerini almak 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 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 dosya içeriğini Kotlin'e dönüştürün. Her derleme dosyası taşındıktan 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ı birlikte kullanabilirsiniz. Bu nedenle, geçişi dikkatli bir şekilde yapmak için zaman ayırın.
def
yerine val
veya var
koyun
def
yerine val
veya var
kullanın. val
veya var
, Kotlin'de değişkenleri tanımlama şeklinizdir.
Bu, Groovy'deki bir değişken bildirimidir:
def building64Bit = false
Aynı kod Kotlin'de şu şekilde yazılır:
val building64Bit = false
Boole özelliklerinin önüne is
ekleyin
Groovy, mülk adlarına dayalı mülk çıkarımı mantığı kullanır. Bir boole özelliği foo
için çıkarılan 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 çıkarılmış yöntemlerle değiştirmeniz gerekir. Örneğin, buildTypes
DSL boolean öğelerine is
önekini 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ğıda, Kotlin'deki aynı kod verilmiştir. Özelliklerin başına 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 dizimleri 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 []
yerine listOf
veya mapOf
yazdığınızdan emin olun.
Groovy ve Kotlin'de liste tanımlama arasındaki farklar:
jvmOptions += ["-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError</code>"]
Aynı kod Kotlin'de şu şekilde yazılır:
jvmOptions += listOf("-Xms4000m", "-Xmx4000m", "-XX:+HeapDumpOnOutOfMemoryError")
Groovy ve Kotlin'de harita tanımlama arasındaki farklar:
def myMap = [key1: 'value1', key2: 'value2']
Aynı kod Kotlin'de şu şekilde yazılı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 yayın derleme türleri örtülü olarak kullanılabilir. Diğer tüm özel derleme türleri manuel olarak oluşturulmalıdır.
Groovy'de hata ayıklama, yayın ve belirli diğer derleme türlerini önce 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 taşıma
Derlemeniz, projeye eklentiler 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 derleme başarısız olsa bile Android Studio bağlamın farkındadır. Bu bağlam, Studio IDE'nin kod tamamlama işlemini gerçekleştirmesine ve diğer faydalı önerileri 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, eklentilerin com.android.tools.build:gradle:7.4.0
gibi Maven koordinatlarını 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, apply plugin
kullanarak uyguladığınızda 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
Eklentilerin tam listesini Google Maven deposunda bulabilirsiniz.
Kotlin eklentilerine birden fazla eklenti kimliğiyle referans verilebilir. Ad alanı içeren eklenti kimliğini kullanmanızı ve aşağıdaki tabloya göre kısaltılmış eklenti kimliğinden ad alanı içeren eklenti kimliğine yeniden düzenleme yapmanızı öneririz:
Kısa 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 |
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üzenlemeyi gerçekleştirme
Kullandığınız eklentilerin kimliklerini öğrendikten sonra aşağıdaki adımları uygulayın:
buildscript {}
bloğunda bildirilen eklentiler için depolarınız varsa bunlarısettings.gradle
dosyasına taşıyın.Eklentileri üst düzeydeki
plugins {}
dosyasındabuild.gradle
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.Eklentileri, modül düzeyindeki
build.gradle
dosyası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.gradle
dosyadan 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")
Bu, plugins {}
bloğu kullanılarak yapılan 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()
}
}
Eklentiler bloğunu dönüştürme
plugins {}
bloğundan eklentileri uygulama, 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 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 Eklentileri uygulama bölümüne bakın.
Çeşitli
Diğer işlevlere yönelik Kotlin kodu örnekleri için aşağıdaki doküman sayfalarına bakın:
- ProGuard yapılandırmanız varsa Küçültme, karartma ve optimizasyonu etkinleştirme başlıklı makaleyi inceleyin.
signingConfig {}
bloğunuz varsa Derleme dosyalarınızdan imza bilgilerini kaldırma başlıklı makaleyi inceleyin.- Proje genelinde özellikler kullanıyorsanız Proje genelinde özellikleri yapılandırma başlıklı makaleye bakın.
Bilinen sorunlar
Şu anda bilinen bir sorun olarak, Kotlin ile derleme hızının Groovy'ye kıyasla daha yavaş olabileceği belirtilmektedir.
Sorun bildirme
Sorununuzu önceliklendirmek için ihtiyacımız olan bilgileri nasıl sağlayacağınızla ilgili talimatları Derleme araçları ve Gradle hatalarıyla ilgili ayrıntılar başlıklı makalede 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.