2- Migrate to Kotlin DSL in QNB Android Mobile📢
Herkese selam, ben Musa 👋
Bu makalemizde QNB Mobil uygulamamıza eklediğimiz harika bir özellikle karşınızdayım. Kotlin DSL (Domain-Specific Language)’in sunduğu benzersiz katkıları ve geçiş adımlarını sizinle paylaşmak istiyorum. Kotlin DSL, Gradle configuration dosyalarınızı Groovy yerine Kotlin kullanarak yazmanızı sağlar. Geçiş sürecinde özellikle `buildscript`, `plugins` ve `dependencies` bloklarında değişiklikler yapılır.
Bu değişiklikler, daha güçlü bir type safety, daha iyi IDE desteği ve daha okunabilir kodlar sunar. Type safety, derleme zamanı hatalarını azaltır ve kodun daha güvenilir olmasını sağlar.Bu sayede, hataları daha erken yakalayarak ve daha açık bir yapı sunarak projelerinizin bakımını ve geliştirmesini kolaylaştırır.
Artık projemize yeni dependency’ler eklerken daha eğlenceli ve üretken bir şekilde ilerliyoruz.
Siz de Kotlin DSL dünyasına katılmaya hazır mısınız?” 🌟
Kotlin DSL
Android Studio Giraffe’den itibaren, yeni proje oluşturduğunuz da varsayılan olarak Kotlin DSL (build.gradle.kts) kullanır.
Avantajlar :
✨ Kod Okunabilirliği: Daha az boilerplate kod ile temiz ve okunabilir kod yazımına olanak tanır.
🔒 Type Safety: Kotlin, statik tip sistemi sayesinde daha güvenli ve öngörülebilir kod yazımı sağlar.
🔒 Null Safety: Null pointer hatalarını önlemek için tasarlanmış bir dil yapısı vardır.
🛠️ IDE Support: Gelişmiş IDE desteği ile kod yazımı sırasında daha iyi otomatik tamamlama ve hata tespiti sunar.
🔄 Coroutines: Asenkron işlemleri kolaylaştıran ve performansı artıran coroutine desteği bulunur.
🌟 Modern Dil Özellikleri: Extension functions ve smart casts gibi modern programlama özellikleri içerir.
Dezavantajlar :
⏳ Compile Time: Groovy’ye kıyasla derleme süresi biraz daha uzun olabilir.
📈 Öğrenme Eğrisi: Kotlin DSL, Groovy’ye göre daha yeni ve farklı bir syntax sahip olduğu için, öğrenmesi biraz daha zaman alabilir.
💡Mevcut Scriptlerle Uyumluluk: Mevcut Groovy script’lerini Kotlin DSL’ye dönüştürmek ekstra çaba gerektirebilir.
Kotlin DSL vs Groovy :
Migrate to Kotlin DSL: Değişim Zamanı!
Android için Kotlin DSL’ye geçiş yaparken öncelikli olarak izleyeceğimiz adımlar ;
1. Ön Koşullar :
- Gradle Wrapper: En az 5.0 veya daha yüksek bir sürüm kullanın.
- Java: Java 8 veya üzeri bir sürüm kullanın.
- Gradle Eklentileri: Tüm Gradle eklentilerinizi güncelleyin.
2. Dosya Adı Değişiklikleri :
- “.gradle” dosya uzantılarını “.gradle.kts” olarak değiştirin.
3. Syntax Değişiklikleri :
- Groovy ve Kotlin arasındaki syntax farklarını göz önünde bulundurarak gerekli değişiklikleri uygulayın.
Syntax Değişiklikleri
Projenizin ihtiyaçlarına göre çeşitli syntax değişikliklerine ihtiyaç duyabilirsiniz. En sık rastlanan değişikliklere örnekler vererek birlikte göz atalım. Kodlarınızı güncellemek için beraber keşif zamanı!
method çağrılarına parantez () ekleyin :
Groovy:
compileSdkVersion 30
Kotlin:
compileSdkVersion(30)
Atama çağrılarına “=” ekleyin :
Groovy:
java {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Kotlin:
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
Tek tırnakları (‘) çift tırnaklarla (“) değiştirin,
‘compile’ yerine ‘implementation’ kullanalım
Groovy:
dependencies {
compile 'com.google.android.gms:play-services-maps:17.0.0'
}
Kotlin:
dependencies {
implementation("com.google.android.gms:play-services-maps:17.0.0")
}
“def” yerine “var veya val” kullanalım
Groovy:
def apiKey = "YOUR_API_KEY"
Kotlin:
val apiKey = "YOUR_API_KEY"
Build Types:
Groovy:
buildTypes {
release {
minifEnabled true
proguardFiles(
getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
)
}
}
Kotlin:
buildTypes {
getByName("release") {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro"
)
}
}
Signing Configuration
Groovy:
signingConfigs {
release {
storeFile file("mykeystore.jks")
storePassword "password"
keyAlia "key1"
keyPassword "key_password"
}
}
release {
signingConfig signingConfigs.release
}
Kotlin:
signingConfigs {
create("release") {
storeFile = file("mykeystore.jks")
storePassword = "password"
keyAlias = "key1"
keyPassword = "key_password"
}
}
getByName("release") {
signingConfig = signingConfigs.getByName("release")
}
Product Flavors
Groovy:
productFlavors {
dev {
applicationIdSuffix '.dev'
...
}
prod {
applicationIdSuffix '.prod'
...
}
}
flavorDimensions 'env'
Kotlin:
productFlavors {
create("dev") {
applicationIdSuffix = ".dev"
...
}
create("prod") {
applicationIdSuffix = ".prod"
...
}
}
productDimensions("env")
Task Configuration
Groovy:
def check = tasks.register("check")
tasks.register("detekt") { detekt ->
// Configure detekt
check.get().dependsOn detekt
}
check.configure {
dependsOn detekt
}
Kotlin:
val check by tasks.registering
tasks.register("detekt") {
// Configure detekt
check.get().dependsOn(this)
}
check {
dependsOn(detekt)
}
Kotlin DSL ile Kazanımlarımız
Kotlin DSL’e geçiş sürecimiz, projemizin geliştirme aşamalarında önemli bir dönüşüm sağladı.Multi-module projemizde, her modülü tek tek Kotlin DSL’ye geçirerek kod tekrarını minimuma indirdik ve bakım süreçlerimizi iyileştirdik. Modüller arası bağımlılıkları yönetirken, `build.gradle.kts` dosyalarındaki benzerliklerden faydalanarak ortak yapılar oluşturmak genel tutarlılığı artırdı.Ortak yapıları `buildSrc` içindeki Kotlin dosyalarında tanımlayarak, tüm modüllerde aynı yapılandırmaları kullandık.
Örneğin; `Dependencies` ve `Versions` dosyalarını oluşturduk. Tüm modüllerimizde kullanılan dependency ve versiyon tanımlarını bu dosyalara ekledik.Böylece, bir dependency versiyonunu güncellemek veya yeni bir dependency eklemek gerektiğinde tek bir yerden yönetebilir hale geldik. Tüm modüllerde aynı `compileSdkVersion` ve `targetSdkVersion` değerlerini kullanarak proje tutarlılığını sağladık.Statik tiplendirme özelliği sayesinde, yanlış tanımlanmış bağımlılıkları veya yapılandırmaları derleme aşamasında tespit edebiliyoruz. Bu, runtime hatalarını azaltarak daha güvenilir bir geliştirme ortamı sağlıyor.
Kotlin DSL’nin projemize getirdiği bu yenilikler sayesinde, geliştirme süreçlerimizde büyük adımlar attık.Artık daha temiz kodlar yazıyor ve projelerimizi daha hızlı ve güvenilir bir şekilde geliştiriyoruz.
Siz de bu dönüşüme katılarak projelerinizi Kotlin DSL ile daha verimli hale getirebilirsiniz. Haydi, kod dünyasında Kotlin DSL’nin sunduğu avantajların tadını çıkaralım! 🚀