Gradle Nedir?

Hakan Yücel
4 min readOct 24, 2020

--

Merhaba,

Bu yazımda Gradle’ın ne olduğunu, nasıl ve niçin kullanıldığı hakkında bilgiler paylaşacağım.

Öncelikle bilmemiz gereken şey Gradle ın bir build sistemi olduğudur.

Gradle, Android Studio için geliştirilmiş bir build sistemidir ve kullanıcılar için oldukça fazla kolaylık sağlar.

Gradle build sistemi, kullanıcılar için kolaylıklar sağlar dedik. Peki nasıl?

Gradle, proje oluşturulduğunda Android Studio tarafından otomatik olarak devreye girer ve build işlemlerini gerçekleştirir. Maven gibi diğer build sistemini kullananlar zaten Gradle kullanmakta zorlanmayacağını da söylemek isterim. İçerisinde xml, resim ve font dosyaları gibi Android projesinde gereken diğer bileşenleri barındıran paketlerin oluşturmasından kaynaklı Android için tercih edilir. Bu sebeple Maven’den daha gelişmiş diyebiliriz.

Build etmek derken bilmemiz gereken; kaynak kodunu derlemek, bunları test edilebilir ve yayınlayacağımız APK’lar haline getirmektir.

Şimdi gelin Gradle’ın Android projesi üzerinde oluşturduğu dosyaları inceleyelim.

File Structre

Android oluştuğunda Gradle görseldeki gibi bir klasör yapısı oluşturuyor.

Burda inceleyeceğimiz kısımlar;

app: Projenin asıl yapısıdır. Çok kompleks yapımız yoksa bu klasörün altında çalışacağız.

libs: Kütüphane dosyalarını barındıran klasördür.

src: Kaynak dosyalarını barındıran klasördür.

build.gradle: Gradle’ın oluşturduğu konfigürasyon dosyasıdır.

Gradle’ın özelliklerini merak etmiş olabilirsiniz. Peki bunu öğrenmek için ne yapacağız? Özellikleri nasıl kontrol edeceğiz?

build.gradle

Gradle’ı güzelce anlattık; ne olduğunu, ne işe yaradığını öğrendik. Peki Gradle’ı nasıl kullanacağız? Bunun için build.gradle dosyasına gidiyoruz ve özellikleri karşımıza çıkıyor. Buradan değiştirmek istediğimiz özelliğe müdahale edebiliyoruz. Özellikleri anlatmak gerekirse;

android: Android versiyonlaması ve android özelliklerinin tanımladığı bölümdür.

dependencies: Projeyi oluşturmak için Gradle’ın çalışması için gerekli eklentilerin bulunduğu bölümdür.

applicationId: Uygulamanın paket adıdır. Bu bilgi çok önemlidir çünkü kimlik niteliği taşır.

minSdkVersion: Uygulamanın çalışabileceği en düşük sürümü belirtir.

targetSdkVersion: Uygulamanın güncel versiyonudur. Eğer bu değer belirtilmediyse minSdkVersion değerini kullanır.

versionCode: Uygulamamızı Play Store’a yüklerken ve güncelleyeceğimiz zaman tutulan versiyondur.

versionName: Versiyon bilgisinin tanımıdır.

Plugin (Eklenti)

Şimdide gelelim Gradle pluginlerine. Yazımın bundan sonraki kısmı için eklenti adında anlatacağım. Android Gradle Eklentisi, Android Studio’dan ayrılmıştır — Android Studio, ilgili Android Gradle Eklentisini veya şu anda Android Gradle Eklentisi 1.1'e kadar olan önceki herhangi bir kararlı sürümü kullanan projeleri açabilir.

Plugin dediğimiz şey aslında uygulamaya yüklenen ekstra yazılımlardır.

Gradle ve Android Gradle Eklentisi, kullanım durumuna bağlı olarak yapıyı farklı şekillerde yapılandırma ve genişletme yeteneği sağlar.

Bir projeye bir eklenti uygulamak, eklentinin projenin yeteneklerini genişletmesine izin verir

Eklenti uygularken dikkat etmeniz gerekenler;

  • Gradle modelini genişletin (ör. Yapılandırılabilen yeni DSL öğeleri ekleyin)
  • Projeyi kurallara göre yapılandırın (ör. Yeni görevler ekleyin veya makul varsayılanları yapılandırın)
  • Belirli bir yapılandırma uygulayın (ör. Kurumsal havuzlar ekleyin veya standartları uygulayın)

Signing Config (İmza Konfigürasyonu)

Gradle tabanlı android projelerinde, imzalama yapılandırması gradle build betiklerinde belirtilmelidir.

Aşağıda, gradle oluşturma komut dosyasında belirtilmesi gereken ayrıntılar verilmiştir

  • keystore(anahtar deposu)
  • keystore password(anahtar deposu şifresi)
  • key alias name(anahtar takma adı)
  • key password(anahtar şifresi)
  • The store type(anahtar deposunun türü)

Bu bilgiler dahilinde Gradle imzası tanımlayabiliriz. Peki nasıl tanımlama yapacağız?

gradle.properties

Öncelikle görseldeki tanımlama yapacağımız dosyaya geliyoruz.

RELEASE_STORE_FILE={anahtar depo yolu}
RELEASE_STORE_PASSWORD=*****
RELEASE_KEY_ALIAS=*****
RELEASE_KEY_PASSWORD=*****

şeklinde tanımlamamızı yapıyoruz. Sonrasında app/build.gradle yolundaki dosyada tanımladığımız özellikleri Gradle’a ekliyoruz.

...    
signingConfigs {

release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD

// İsteğe bağlı, kullanılan imzalama sürümlerini belirtin
v1SigningEnabled true
v2SigningEnabled true
}
}

buildTypes {
release {
signingConfig signingConfigs.release
}
}
....

android{ kod bloğunun içine üstteki gibi ekleme yapıyoruz. Bu noktadan sonra debug ediyoruz ve imza işlemi gerçekleşiyor.

BuildConfig Nedir?

Uygulama build edilirken, Gradle BuildConfig sınıfını oluşturur, böylece uygulama kodunuz mevcut yapı hakkındaki bilgileri inceleyebiliriz.

Gradle build konfigürasyon dosyasında BuildConfig sınıfına özel alanlar eklemek ve uygulamanızın çalışma zamanında kodun bu erişmesini isteyebiliriz. Bu durumda buildConfigField() kullanacağız. Aynı şekilde, resValue() ile uygulama kaynak değerleri de ekleyebiliriz.

android {
...
buildTypes {
release {
// Bu değerler yalnızca, genellikle tam derlemeler ve sürekli
// derlemeler için kullanılan yayın derlemesi için tanımlanır
buildConfigField("String", "BUILD_TIME", "\"${minutesSinceEpoch}\"")
resValue("string", "build_time", "${minutesSinceEpoch}")
...
}
debug {
// Artımlı derlemeler için statik değerler kullanın.
// kaynak dosyaları ve BuildConfig her çalıştırmada yeniden
//oluşturulmaz.
// Bunlar dinamik olarak yeniden oluşturulursa,
// Değişikliklerin yanı sıra GÜNCEL GEÇİŞ kontrollerini
//uygulayın
buildConfigField("String", "BUILD_TIME", "\"0\"")
resValue("string", "build_time", "0")
}
}
}
...

Product Flavors Nedir?

Product Flavors oluşturmak, build türleri oluşturmaya benzer. İstediğimiz ayarları yapabilmek için konfigürasyon dosyasında yapmak istediğiniz ayarı productFlavors bloğuna ekleyelim.

Product Flavors, defaultConfig ile aynı özellikleri destekler — Bunun nedeni, defaultConfig’in aslında ProductFlavor sınıfına ait olmasıdır. Bu, defaultConfig bloğundaki tüm flavors için temel yapılandırmayı sağlayabileceğiniz ve her bir flavors, applicationId gibi bu varsayılan değerlerden herhangi birini değiştirebileceği anlamına gelir.

Aşağıdaki kod örneği, “version” adlı bir flavors boyutu oluşturur ve “demo” ve “full” product flavors ekler. Bu flavorslar kendi applicationIdSuffix ve versionNameSuffix’lerini sağlar;

android {
...
defaultConfig {...}
buildTypes {
debug{...}
release{...}
}
// Bir flavors boyutu belirtir.
flavorDimensions "version"
productFlavors {
demo {
// Bu product çeşidini "version" çeşidi boyutuna atar.
// Yalnızca bir boyut kullanıyorsanız, bu özellik isteğe
//bağlıdır ve eklenti, modülün tüm çeşitlerini otomatik
//olarak o boyuta atar.
dimension "version"
applicationIdSuffix ".demo"
versionNameSuffix "-demo"
}
full {
dimension "version"
applicationIdSuffix ".full"
versionNameSuffix "-full"
}
}
}

Bu yazımda sizlere Gradle build sisteminin mantığını anlattım. Umarım faydalı olmuştur.

Kendinizi geliştirmeyi unutmayın 💻 :)

Sağlıcakla..👋

--

--