Gradle nedir? Flutter’da Gradle nedir? Gradle neden ihtiyaç duyarız? gibi soruların cevaplarına bu makalede değineceğim.
Öncelikle makalemin başlığını özelleştirmemin nedeni bir Flutter projesi üzerinde gradle’ı anlatacağımdan dolayıdır.
Gradle, Anroid uygulaması geliştirme aşamalarının optimize eden Açık kaynak kodlu Android Studio üzerinde çalışan bir inşa aracıdır.( build tool ) Bir Android (Flutter) projesi oluşturuğumuzda aslında Gradle build sistemi devreye girer ve otomatik olarak projemizi build eder. Bir projenin çalışması için gereken bütün yapıyı ve dosyaları oluşturur. Peki bir projenin çalışması için gereken yapılar nelerdir? build sistemi neleri kapsar?
Gradle build sistemi bir uygulamanın derlenmesini, test edilebilir halde olmasını , imzalama ve yayınlama süreçlerindeki gerekli konfigürasyonları ele alır. Kısacası bir uygulamanın dağıtıma (apk) kadar olan bütün süreçlerini bizim yerimizi optimize eder ve dağıtıma hazır hale getirir. Geriye sadece kodları yazmak kalır.
Bir Flutter projesi oluşturduk ve gradle build sistemi otomatik devreye girdi projemizin ilk dosya ve klasör yapısını inceleyelim:
Gördüğünüz üzere projemizin kaynak dosyaları, kaynak kodların referans dosyaları , packageların bulunduğu dosyalar , package cache yapısı ve build dosyaları gelmektedir. Biraz daha derin bir inceleme yaparsak. Gradle build sisteminden sonra Anroid projelerinden Activitylerle çalışırken otomatik olarak bir MainActivity dosyası oluşup FlutterActivity‘e bağlanıyor ve Flutter yaşamına başlıyor.
Ayrıca Bir projenin native olarak Splash screen(Beyaz bir ekran) ve Uygulama iconunun bizim için default olarak ayarlıyor. xml dosyalarını, iconları ve iconların farklı boyutlardaki versiyonlarını bizim için üretiyor.
Androidmanifest.xml: Manifest dosyası genel olarak uygulamamızın işlevlerini, gereksinimlerini , adını , iconunu , temasını bildirmek , izinlerini (permission) bildirmek için ve activityler arası etkileşimi sağlamak için kullandığımız yapıdır. Örnek olarak bu projede default gelen androidmanifest.xml:
En basitinden internet iznini nasıl eklemeniz gerektiğini gösteren bir döküman bırakıyorum.
Gradle build sistemi tetiklenmesinden sonra lib klasörü ve bir main.dart dosyası oluşuyor her yazılım dilinin bir başlangıç metodu olduğu gibi bizimde başlangıç metodumuz main metodudur.
Evet test işlemlerimizi yapabilmemiz için bir klasör yapısı da sunmaktadır.
packageların projemize dahil edildiği ,bununla birlikte varsa projemizdeki custom iconlar , fontlar ve imagelerin bulunduğu klasörlerinde projemize tanıtılmasını sağlayan pubspec.yaml dosyasınında ilk hali:
Dikkatinizi çekmek isterim ki iki tür gradle oluşturma dosyası yer aldığını göreceksiniz. Bu makalerimizde bunların detayına değinmemiz yararınıza olacaktır.
Build.gradle(project module): Uygulamadaki tüm modüllere uygulanan yapılandırmalar burada yönetilir. Gradle’ın version kontrolünü de bu dosya içerisinden yapabiliriz.
- buildscript: Gradle’ın kendi repoları ve bağımlılıklarını yönettiğimiz bloktur.
- repositories: Gradle’ın depolarını veya kendi uzak depolarımızı tanımladığımız bloktur.
- allprojects : Bu blok özel özellikleri taşır ve bunları tüm proje üzerindeki modüllere sunar.
- dependencies : Projeyi oluşturmak için Gradle’ın kullanması gereken bağımlılıkların eklendiği yerdir.
build.gradle(app module): Projenin yapılandırma ayarlarının yapıldığı dosyadır. Kütüphane eklemeleri, uygulamanın sürümü ve birçok özelliği burada tanımlıyoruz.
- apply plugin: İlgili pluginlerin Android uygulama içinde kullanılabilir hale getirilmesini sağlayan etikettir.
- compileSdkVersion: Uygulamanın compile edilmek istenen versiyonudur. compileSdkVersion > minSdkVersiondan olmalı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.
- applicationId: Uygulamamızın paket adıdır.
- minSdkVersion: Uygulamanın en düşük hangi sürümde çalışabileceğini belirtir.
- targetSdkVersion: Uygulamanın geçerli sürümüdür. SDK platformu en yüksek versiyon değerini almalıdır. Eğer bu değeri belirtmediyseniz minSdkVersion değerini alarak kullanır.
- versionCode: Uygulamanın Play Store’a yüklemek istendiği zaman ya da güncellenmesi gerektiği zaman numeric olarak tutulan versiyon bilgisidir. Bu değer uniq olmalıdır. Uygulamanın her güncellenmesinde bu değer arttırılmadır ya da değiştirilmelidir.
- versionName: Version bilgisinin metinsel halidir.
- dependencies: Bağımlılıkların(Dependency) tanımlandığı bloktur. AndroidX ile birlikte artık aşağıdaki gibi tanımlamıyoruz.
gradle-wrapper.properties: Bu dosya Gradle’ın doğru sürümünün yüklü olup olmadığını denetler ve gerekirse gerekli sürümü indirir.
settings.gradle: Projenizi oluşturan tüm modülleri referanslar. Gradle’a hangi alt projelerin bu yapının bir parçası olduğunu , fiziksel yollarının ne olduğunu ( path ) , build komut dosyalarının adının nasıl verileceğini söyler.
Gradle ile ilgili anlatacaklarımız bu kadar arkadaşlar çok kapsamlı bir konu sadece Gradle’n Android(Flutter) tarafında ne işe yaradığını ve temel olarak Gradle konusunda bilgi sahibi olmanız açısından bu bilgileri sizlere aktardım. Gradle ile detaylı bilgiye buradan ulaşabilirsiniz.
Gradle son versiyon için tıklayınız
Android 11 için compile ve sdk version için tıklayınız
Flutterda Gradle build sisteminde oluşacak bir hatayı gidermek için bu yöntemi kullanabilirsiniz.
Örnek hata:
Launching lib\main.dart on Asus in debug mode…
Running Gradle task ‘assembleDebug’…
(This is taking an unexpectedly long time.)
flutterRoot packages flutter_tools gradle/flutter gradle
Windows gradle download
Gradle task assembleDebug failed with exit code 1 Flutter hatasi
- Öncelikle sürümlerinizi kontrol ediniz ve Android SDK araçlarını yüklediğinizden ve bunları çevre yoluna eklediğinizden emin olun.
- Bazı bilgisayarlarda Güvenlik duvarına takılabilirsiniz geçici süreliğine devre dışı bırakabilirsiniz.
- Projenizi android studio ile açıp .gradle klasörünü silininiz
- Terminalden proje dizinine gidiniz: cd android
- ./gradlew clean
- ./gradlew build
- flutter clean
- metodlarını sırasıyla çalıştırıp baştan bir gradle build sistemi oluşturmaya çalışınız.
- Sorun devam ediyorsa, Flutter gradle update ile sürümünüzü yükseltip deneyiniz.
Gradle nedir? Flutter’da Gradle nedir? sorularını cevaplamış bulundum bir sonraki makalemizde görüşmek üzere İyi kodlamalar 🙂