Gradle, çok dilli yazılım geliştirme ortamları için esnek şekilde tasarlanmış açık kaynaklı bir derleme otomasyon aracıdır. Derleme, paketleme, test, dağıtım ve yayınlama görevlerinde geliştirme süreçlerini takip eden Gradle Java platformlarında sıklıkla kullanmakla birlikte C/C++ ve JavaScript dillerini de desteklemektedir. Gradle’ı anlamak için daha uzun ve detaylı bilgilere ihtiyacımız var. Bu yazıda Gradle’a Android penceresinden bakıp kullanımına ve adım adım yapılandırmasına bakacağız.
Bir Android projesinin oluşturulmasından tamamlanmasına giden yolda derleme, test etme, paketleme gibi işlemler söz konusudur. Gradle, Android uygulaması geliştirme aşamalarını yapılandırmamızı sağlayan, açık kaynak kodlu, Android Studio üzerinde çalışan bir inşa sistemidir.Android Studio üzerinde bir proje oluşturduğumuzda, Gradle build sistemi otomatik olarak devreye girer ve build işlemini gerçekleştirir.
Burada build etmekten anlayacağımız; uygulama kaynaklarını ve kaynak kodunu derlemek, bunları test edilebilir-uygulanabilir-imzalanabilir ve yayınlayacağımız APK’lar haline getirmek olmalıdır.
Öncelikle bir Android projesi nelerden oluşuyor hatırlayalım;
- Kaynak kodlar
- Kaynak kodların referanslarını taşıyan dosyalar
- Kütüphanelerin bulunduğu dosyalar
- Proje için genel tüm kaynakların bulunduğu dosyalar
- Build dosyaları
- Manifest
Tüm bu klasör ve dosyaların bir araya getirilip derlenmesiyle bir uygulama elde ediyoruz diyebiliriz. İşte bunu Gradle sağlıyor.
Projeye bağlı olmakla beraber; bazen Gradle’da sadece bağımlılıklar ekleyip çıkararak ve min-target SDK değerlerini değiştirirerek, Gradle’a çok müdahale etmeden proje geliştirebiliyoruz. Ama bundan daha karmaşık bir değişikliğe ihtiyacımız olabilir. Öncelikle Gradle ile neler yapılabileceğini bilmeli sonraki aşamada da bunları kullanabilmeliyiz.
Gradle, bir proje oluşturduğumuzda bize görseldeki klasör yapısını oluşturuyor.
Buradaki başlıca klasörleri kısaca tanıyalım;
App: Projemizin modülüdür.Eğer çok daha karmaşık projeler yapmayacaksak sadece bu modül içinde çalışacağız demektir.
Build: Build dosyalarının tutulduğu klasördür.Derleme dosyalarını içerir.
Libs: Kütüphanelerin bulunduğu klasördür.
Src: Kaynak dosyalarının bulunduğu klasördür.
Src/Main/Java: Uygulama ekranları için kaynak kodları içerir.
Src/Main/Res: Uygulamayla ilgili her türlü kaynağın bulunduğu klasördür.
Src/Main/Res/drawable: Uygulamada kullanılan resim dosyalarını içerir.Dosyalar PNG ve JPEG formatında olmalıdır.
Src/Main/Res/layout: Ekran tasarımı dosyalarının (xml) bulduğu klasördür.
Src/Main/Res/values: Uygulamadaki renk, metin, stil gibi değerleri tanımlandığı xml dosyalarını içerir.
Src/Main/Res/mipmap: Uygulamanın logolarını içerir.
AndroidManifest.xml: Bu dosya projemizin temel bilgilerini taşıyan projenin en önemli parçalarından biridir.
Build.gradle(project module): En üst düzey build.gradle dosyasıdır. Projedeki tüm modullere uygulanan yapılandırılmaları bu dosya içerisinde yönetilir. Gradle’ın version kontrolünü de bu dosya içerisinden yaparız.
Projenin Build.gradle (project module) dosyası
Build.gradle(app module): Bu dosya derleme sistemi için değiştirilebilir özellikleri içeren, bu yazının ana konusu olan olayların gerçekleştiği yerdir. Projemizin yapılandırma ayarlarını bu dosya içerinde belirliyoruz.
Not: Gradle projelerinde, her modül için birer tane, genel proje içinse tek bir tane build.gradle dosyası vardır.
Projenin Build.gradle (app module) dosyası
Gradle’ın ne işe yaradığını ve modül yapısını öğrendik peki bu yapıya nasıl müdahalede bulunacağız? Bunun için önce bu dosyalardaki elementlerin anlamlarını bilmemiz gerekiyor.Kısaca bahsedelim;
buildscript: Gradle’ın kendi depolarını ve bağımlılıklarını yapılandırdığımız bloktur.
repositories: Gradle’ın depolarını veya kendi uzak depolarımızı tanımladığımız yerdir.
dependencies : Projeyi oluşturmak için Gradle’ın kullanması gereken bağımlılıkların eklendiği yerdir.
allprojects : Bu blok özel özellikleri taşır ve bunları tüm proje üzerindeki modüllere sunar.
apply plugin: Android üzerinde kullanılan eklentilerin Android üzerinde kullanılabilir hale getirilmesi için belirtildiği satırdır.Örneğin görselde kotlin-android eklentisini belirtmişiz.Projemiz kotlin koduyla yazılıp derlenebilecek.
applicationId: Uygulamamızın paket adıdır.
minSdkVersion: Uygulamanın en düşük hangi sürümde çalışabileceğini belirtir.
targetSdkVersion: Uygulama için belirlenen geçerli versiondur.SDK platformunun en yüksek version değerini almalıdır.Eğer bu değer belirtilmediyse minSdkVersion değeri ne ise o kullanılır.Her yeni Android sürümü çıktığında targetSdkVersion güncellenmelidir ki uygulamamızda yer alan bazı özelliklerin son sürümle uyumlu çalışıp çalışmadığını görelim.
compileSdkVersion: Uygulamayı compile etmek istediğimiz versiondur.minSdkVersiondan düşük olmamalıdır.
buildToolsVersion: Dependencies bloğundaki kütüphanelerin uygulamamızla uyumlu kullanabilmemiz için, kütüphanelerin versionlarının buildToolsVersion versionuna eşit olması gerekir.Aşağıdaki kod bloğundaki gibi;
android{ buildToolsVersion "25.0.0" } dependencies { compile 'com.android.support:appcompat-v7:25.0.0' }
versionCode: Uygulamamızı Play Store’a yüklerken ve güncelleyeceğimiz zaman sayısal olarak tutulan version değeridir.
versionName: Version bilgisinin metinsel halidir.
Buradaki element ve satırları daha da örneklendirebiliriz ama ben bunları ezberlemektense önce sistemin mantığını ve nasıl yapılandırıldığını anlamaktan yanayım.
Bu yazıda Gradle’ın yapısı ve en çok karşımıza çıkan tagleri ile ilgili fikir sahibi olduk, daha detaylı bir inceleme için;