Gradle Scripts Dosyaları: Android Projelerinde Yapılandırma ve Özelleştirme -Bölüm 2

Beyzanur Akkuzu
4 min readJul 20, 2023

--

Herkese merhaba, bu makalemde “proguard-rules.pro” , “gradle.properties”, “gradle-wrapper.properties”, “local.properties” dosyalarının ne işe yaradıklarını ve nasıl kullanılması gerektiğini anlattım. Umarım faydalı olur, keyifli okumalar :)

proguard-rules.pro

ProGuard, Android uygulamalarının boyutunu küçültmek ve uygulamaların daha güvenli olmasını sağlamak için kullanılan bir araçtır. Bu amaçla, ProGuard, uygulamanın APK’sinde kullanılmayan kodları (kullanılmayan sınıflar, yöntemler, değişkenler vb.) kaldırır ve sıkıştırma yaparak APK boyutunu azaltır. Ayrıca, uygulamanın kodunu karmaşık hale getirerek tersine mühendisliği zorlaştırır.

ProGuard kurallarını belirleyen “proguard-rules.pro” dosyası, uygulamanın ihtiyaçlarına ve kullanılan kütüphanelere göre özelleştirilebilir. ProGuard kuralları, çeşitli kütüphanelerin sıkıştırılmasını engellemek veya düzgün çalışmasını sağlamak için özel olarak ayarlanabilir. Ayrıca, belirli sınıf, yöntem veya değişkenlerin korunmasını sağlamak için kurallar ekleyebilirsiniz.

Kotlin ile ProGuard kullanırken, ProGuard’ın Kotlin’in özelliklerini düzgün bir şekilde işlemesi için proguard-rules.pro dosyasına aşağıdaki kurallardan bazılarını eklemek genellikle gereklidir:

# Keep Kotlin classes and metadata
-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }

# Keep Kotlin standard library
-dontwarn kotlin.**
-keep class kotlin.coroutines.** { *; }

# Keep custom classes and packages (replace com.example with your package name)
-keep class com.example.mypackage.MyClass { *; }

# Keep models (if using Kotlin data classes)
-keep class com.example.mypackage.models.** { *; }
  1. # Keep Kotlin classes and metadata Bu kural, Kotlin sınıflarını ve Kotlin dili tarafından kullanılan meta verileri (kotlin.Metadata) korumak için kullanılır. Kotlin sınıflarının ve meta verilerinin silinmemesini sağlar.
  2. -keep class kotlin.** { *; } Bu kural, tüm Kotlin sınıflarını korur. Bu, uygulamanızda kullanılan tüm Kotlin sınıflarının silinmesini engeller.
  3. -keep class kotlin.Metadata { *; } Bu kural, kotlin.Metadata sınıfını korur. Bu sınıf, Kotlin tarafından derlenen sınıflar için gerekli önemli bir bileşendir.
  4. # Keep Kotlin standard library Bu kural, Kotlin standard kütüphanesinin sıkıştırılmasını engeller. -dontwarn kotlin.** ifadesi, Kotlin standard kütüphanesine ait uyarıları devre dışı bırakır. -keep class kotlin.coroutines.** { *; } ifadesi ise, Kotlin coroutines yapılarını kullanırken bu sınıfların silinmesini önler.
  5. # Keep custom classes and packages (replace com.example with your package name) Bu kural, belirli paketlerdeki ve sınıflardaki özel kodları korumak için kullanılır. com.example.mypackage.MyClass ifadesi, bu özel sınıfı koruyacaktır.
  6. # Keep models (if using Kotlin data classes) Eğer Kotlin veri sınıfları (data classes) kullanıyorsanız, bu kural bu sınıfları koruyacaktır. com.example.mypackage.models.** ifadesi, bu paketteki tüm Kotlin veri sınıflarını korur.

gradle.properties

gradle.properties, Android projelerinde Gradle yapılandırma dosyasında kullanılan özellik değerlerini tanımlamak için kullanılan bir dosyadır. Bu dosya, proje seviyesinde genel değişkenlerin ve yapılandırma ayarlarının saklandığı bir yerdir. Bu özellik değerleri, projenin tüm yapılandırmalarında kullanılabilir ve uygulama boyunca kolayca değiştirilebilir.

Birçok durumda, projenin farklı yapılandırma ortamları (örneğin, geliştirme, üretim, test) arasında değişiklikler yaparken veya uygulamadaki değişkenleri merkezi bir yerden yönetirken gradle.properties dosyası kullanılabilir. Ayrıca, proje seviyesinde belirli değerlerin tekrarlanmasını önlemeye ve yapılandırmalar arasında tutarlılık sağlamaya yardımcı olur.

Örnek olarak, projenizde kullanılacak bir API anahtarı veya bazı sürüm numaraları veya baseUrl gibi değerleri gradle.properties dosyasında tanımlayabilirsiniz. Ayrıca, dosyada farklı yapılandırma ortamlarına özgü değişkenler de tanımlayabilirsiniz.

# API anahtarı
MY_API_KEY=abcd1234efgh5678

# Sürüm numarası
APP_VERSION=1.2.3

# Farklı yapılandırmalar için ayrı değerler
debug_mode=true
base_url=http://example.com/api

Gradle yapılandırma dosyasında (build.gradle) bu değerleri kullanmak için buildConfigField veya resValue yöntemlerini kullanın (ilk makalemden de defaultConfig içeriğine ulaşabilirsiniz).

android {
defaultConfig {
// API anahtarı ve sürüm numarasını gradle.properties dosyasından alın
buildConfigField "String", "MY_API_KEY", "\"${MY_API_KEY}\""
buildConfigField "String", "APP_VERSION", "\"${APP_VERSION}\""
}
}

Bu şekilde gradle.properties dosyasında tanımlanan özellikleri, projenizin kodunda kullanabilirsiniz:

fun getApiKey(): String {
return BuildConfig.MY_API_KEY
}

fun getAppVersion(): String {
return BuildConfig.APP_VERSION
}

Bu örnekte, gradle.properties dosyasına tanımlanan MY_API_KEY ve APP_VERSION değerleri, proje seviyesindeki build.gradle dosyasında kullanılarak BuildConfig sınıfına yansıtılır. Daha sonra bu değerlere uygulama kodundan erişebilirsiniz.

Kotlin dilinde gradle.properties dosyasını kullanarak yapılandırmalarınızı daha yönetilebilir ve esnek hale getirebilirsiniz.

gradle-wrapper.properties

gradle-wrapper.properties, Gradle'in dağıtımını ve sürümünü proje düzeyinde tanımlamak için kullanılan dosyadır. Bu dosya, projenizde Gradle'i kullanırken hangi Gradle sürümünün kullanılacağını belirlemeye yardımcı olur ve projenin bağımlılıklarını taşınabilir hale getirir.

Projenizi paylaştığınızda veya farklı geliştiricilerle işbirliği yaptığınızda, herkesin aynı Gradle sürümünü kullanması önemlidir. Bu, projenin tutarlılık ve uyumluluk açısından daha iyi çalışmasını sağlar. gradle-wrapper.properties dosyası, tüm ekip üyelerinin aynı Gradle sürümünü kullanmasını garantileyerek bu sorunu çözmeye yardımcı olur.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • distributionUrlile Gradle’in indirileceği URL belirtilir. Bu, Gradle dağıtımının bütünlüğünü kontrol etmeye yardımcı olur.
  • Gradle’inizi kullanmaya başlamak için Gradle Wrapper’ı çalıştırın. Bu, projenizde belirtilen Gradle sürümünü indirecek ve kullanmanızı sağlayacaktır.
gradlew.bat

Gradle Wrapper, projenizi bağımlılıklarını taşınabilir hale getirir ve farklı sistemlerde (Windows, macOS, Linux) çalışırken herhangi bir ek kurulum gerektirmez. Projenizi farklı makinelerde veya başka bir geliştiriciyle paylaştığınızda, Gradle Wrapper kullanarak tüm ekip üyelerinin aynı Gradle sürümünü kullanmasını sağlayabilirsiniz.

local.properties

local.properties, Android projelerinde yerel geliştirme ortamında kullanılan çevresel değişkenleri saklamak için kullanılan dosyadır. Bu dosya, Android Studio tarafından otomatik olarak oluşturulur ve projenizin kök dizininde yer alır.

local.properties dosyası genellikle bilgisayarınızdaki Android SDK'nın yolunu belirtmek için kullanılır. Android SDK, Android uygulama geliştirme işlemlerinin gerçekleştirilebilmesi için gerekli olan araçları ve kütüphaneleri içerir.

Ayrıca, bu dosyada yerel olarak ayarlanması gereken diğer çevresel değişkenler de bulunabilir. Örneğin, bazı geliştiriciler Android projelerini çalıştırmak için özel cihazlar veya emulatörler kullanır. Bu durumda, local.properties dosyası, özel cihaz veya emulatör ayarlarını belirten değişkenleri içerebilir.

local.properties dosyasında genellikle aşağıdaki türde bilgiler bulunur:

  • SDK yolu: Android SDK’nın yolunu belirlemek için kullanılır.
sdk.dir=/Users/kullanici/Android/sdk
  • İmza dosyaları: APK’leri yayınlamak için kullanılan imza dosyalarının yolunu belirlemek için kullanılabilir.
key.store=/Users/kullanici/my-release-key.keystore
key.alias=my-key-alias
key.store.password=my-key-store-password
key.alias.password=my-key-alias-password

Not: local.properties dosyası, projeyi paylaşırken veya başka bir ortamda çalıştırırken gizli bilgiler içerebilir. Bu nedenle, bu dosyayı güvenli bir şekilde paylaşmaktan ve sürüm kontrol sistemine (örn. Git) eklemekten kaçınılmalıdır. Her geliştirici veya ortam için ayrı bir local.properties dosyası kullanmak, bu tür bilgilerin gizliliğini ve güvenliğini sağlamak için daha iyi bir uygulamadır.

--

--