Android için Gradle Mastering: Gradle görevleri ve Kotlin

Yazar: Lewis Jackson
Yaratılış Tarihi: 11 Mayıs Ayı 2021
Güncelleme Tarihi: 1 Temmuz 2024
Anonim
Android için Gradle Mastering: Gradle görevleri ve Kotlin - Uygulamaların
Android için Gradle Mastering: Gradle görevleri ve Kotlin - Uygulamaların

İçerik


Java, XML veya Kotlin yerine, bu Gradle derleme dosyaları Groovy tabanlı alana özgü dili (DSL) kullanır. Groovy'ye aşina değilseniz, o zaman bu Gradle derleme dosyalarının her birine ayrı ayrı göz atacağız, bu nedenle bu makalenin sonunda basit Groovy kodunu okumaktan ve yazmaktan rahat olacaksınız.

Gradle, en az manuel yapılandırma ile sık kullanabileceğiniz bir dizi varsayılan ayar sağlayarak hayatınızı kolaylaştırmayı amaçlar - projenizi oluşturmaya hazır olduğunuzda, Android Studio'nun “Çalıştır” düğmesine basın; Gradle, derleme işlemini başlatır. senin için.

Gradle’ın “yapılandırma konvansiyonu” yaklaşımına rağmen, varsayılan ayarları ihtiyaçlarınızı tam olarak karşılamıyorsa, derleme işlemini özelleştirebilir, yapılandırabilir ve genişletebilir ve hatta çok özel görevleri gerçekleştirmek için Gradle ayarlarını değiştirebilirsiniz.


Gradle komut dosyaları kendi dosyalarında bulunduğundan, uygulamanızın kaynak koduna dokunmanıza gerek kalmadan uygulamanızın oluşturma işlemini istediğiniz zaman değiştirebilirsiniz. Bu eğiticide, lezzetler, derleme biçimleri ve özel Gradle görevi kullanarak derleme işlemini değiştireceğiz - tümü hiç uygulama kodumuza dokunarak.

Gradle derleme dosyalarını keşfetme

Bir proje oluşturduğunuzda, Android Studio aynı Gradle derleme dosyaları koleksiyonunu oluşturur. Mevcut bir projeyi Android Studio'ya aktarsanız bile, yine tam olarak aynı Gradle dosyalarını oluşturun ve bunları projenize ekleyin.

Gradle ve Groovy sözdizimini daha iyi anlamaya başlamak için, Android’in Gradle derleme dosyalarının her birine ayrı ayrı göz atalım.

1. settings.grad

Settings.gradle dosyası, "include" anahtar sözcüğünü kullanarak tüm uygulamanızın modüllerini ada göre tanımlayacağınız yerdir. Örneğin, bir "uygulama" ve "secondModule" içeren bir projeniz varsa, settings.grad dosyalarınız şuna benzer:


dahil: app,: secondmodule rootProject.name = BenimProje

Projenizin boyutuna bağlı olarak, bu dosya oldukça uzun olabilir.

Derleme işlemi sırasında Gradle, projenizin settings.gradle dosyasının içeriğini inceleyecek ve derleme işlemine dahil etmesi gereken tüm modülleri tanımlayacaktır.

2. build.gradle (proje seviyesi)

Proje düzeyinde build.gradle dosyası, projenizin kök dizininde bulunur ve uygulanacak ayarları içerir. herşey modülleriniz (Gradle tarafından “projeler” olarak da bilinir).

Bu projeyi, Android projenizdeki her modül için geçerli olan eklentileri, depoları, bağımlılıkları ve yapılandırma seçeneklerini tanımlamak için kullanmalısınız. Proje düzeyinde build.gradle dosyasındaki herhangi bir Gradle görevini tanımlarsanız, ilgili modülleri düzenleyerek bu görevleri tek tek modüller için geçersiz kılmanın veya genişletmenin mümkün olduğunu unutmayın. Modül düzeyi build.gradle dosyası.

Tipik bir proje düzeyinde build.gradle dosyası şuna benzer:

buildscript {repositories {google () jcenter ()} bağımlılıklar {classpath com.android.tools.build:gradle:3.5.0-alpha06 // NOT: Uygulama bağımlılıklarınızı buraya yerleştirmeyin; bunlar kendilerine ait // birimler modülünde build.gradle}} allprojects {repositories {google () jcenter ()}} görev temiz (tip: Sil) {delete rootProject.buildDir}

Bu proje düzeyinde build.gradle dosyası aşağıdaki bloklara ayrılmıştır:

  • Buildscript. Bu, yapıyı gerçekleştirmek için gereken ayarları içerir.
  • Depolar. Gradle, projenizin bağımlılıklarını bulmaktan ve bunları yapınızda kullanıma sunmaktan sorumludur. Ancak, tüm bağımlılıklar aynı depodan gelmez, bu nedenle projenizin bağımlılıklarını almak için Gradle'ın araması gereken tüm depoları tanımlamanız gerekir.
  • Bağımlılıklar. Bu bölüm yerel önbellekte indirilen ve saklanan eklenti bağımlılıklarınızı içerir. Malısın değil Bu blok içindeki herhangi bir modül bağımlılığını tanımlayın.
  • Allprojects. Burası uygun olması gereken depoları tanımlayacağınız yer herşey projenizin modüllerinden.

3. build.gradle (modül seviyesi)

Bu, projenizdeki her modülde bulunan modül düzeyinde build.gradle dosyasıdır. Android projeniz birden fazla modülden oluşuyorsa, aynı zamanda birden fazla modül düzeyinde build.gradle dosyasından da oluşacaktır.

Her modül düzeyinde build.gradle dosyası, projenizin paket adını, sürüm adını ve sürüm kodunu ve bu belirli modül için minimum ve hedef SDK'yı içerir.

Bir modül düzeyinde build.gradle dosyası ayrıca kendine özgü bir yapı talimatları ve bağımlılıkları kümesine sahip olabilir. Örneğin, bir Wear OS bileşenine sahip bir uygulama oluşturuyorsanız, Android Studio projeniz ayrı bir akıllı telefon / tablet modülünden ve bir Aşınma modülünden oluşacaktır - tamamen farklı aygıtları hedeflediklerinden, bu modüller büyük ölçüde farklıdır. bağımlılıkları!

Basit bir modül düzeyinde build.gradle dosyası tipik olarak şuna benzer:

eklenti uygulayın: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.speechtotext" minSdkVersion 23 targetSdkVersion 28 versionCode 1 sürümAdı "1.0" testInstrumentationRunner "androidx.test.runnerFunnerFunnerFunnerre2" getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} bağımlılıklar {application fileTree (dir: libs, include:) uygulama androidx.appcompat: appcompat: 1.0.2 uygulama androidx.constraintlayout: constraintlayout: 1.1. 3 testUygulama junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestUygulama androidx.test.espresso: espresso-core: 3.1.1}

Bu bölümlerin her birine daha yakından bakalım:

  • eklentiyi uygula. Bu, bu modülü oluşturmak için gereken eklentilerin bir listesi. Com.android.application eklentisi, Android'e özgü derleme işlemini ayarlamak için gereklidir, bu nedenle bu otomatik olarak eklenir.
  • android. Modülün platforma özgü seçeneklerini yerleştirmeniz gereken yer burasıdır.
  • compileSdkVersion. Bu, bu modülün derlendiği API seviyesidir. Bu değerden daha yüksek bir API’nin özelliklerini kullanamazsınız.
  • buildToolsVersion. Bu derleyicinin sürümünü gösterir. Gradle 3.0.0 ve daha yüksek sürümlerde, buildToolsVersion isteğe bağlıdır; Bir buildToolsVersion değeri belirtmezseniz, Android Studio varsayılan olarak Build Tools'un en son sürümüne varsayılan olacaktır.
  • defaultConfig. Bu, hata ayıklama ve sürüm oluşturmalarınız gibi uygulamanızın tüm derleme sürümlerine uygulanacak seçenekleri içerir.
  • Uygulama Kimliği. Bu, uygulamanızın benzersiz tanımlayıcısı.
  • minSdkVersion'ın. Bu parametre, bu modülün desteklediği en düşük API seviyesini tanımlar.
  • targetSdkVersion. Bu, uygulamanızın test edildiği maksimum API seviyesidir. İdeal olarak, uygulamanızı en son API kullanarak test etmeniz gerekir; bu, targetSdkVersion değerinin her zaman compileSdkVersion değerine eşit olacağı anlamına gelir.
  • versionCode. Bu, uygulama sürümünüz için sayısal bir değerdir.
  • versionName. Bu, uygulama sürümünüzü temsil eden, kullanıcı dostu bir dizedir.
  • buildTypes. Varsayılan olarak, Android iki yapı türünü destekler: hata ayıklama ve bırakma. Uygulamanızın türüne özgü ayarları belirtmek için "hata ayıklama" ve "bırakma" bloklarını kullanabilirsiniz.
  • bağımlılıkları. Burası, bu modülün dayandığı kütüphaneleri tanımlayacağınız yer.

Projenizin bağımlılıklarını bildirme: Yerel kütüphaneler

Bir veya daha fazla proje bağımlılığı ekleyerek, Android projeleriniz için ek işlevler sağlayabilirsiniz. Bu bağımlılıklar yerel olabilir veya uzak bir depoda saklanabilir.

Yerel bir JAR dosyasına bağımlılık bildirmek için, o JAR'ı projenizin “libs” dizinine eklemeniz gerekir.

Modül düzeyinde build.gradle dosyasını daha sonra bu dosyaya bir bağımlılık bildirmek için değiştirebilirsiniz. Örneğin, burada “gizemli” bir JAR'a bağımlılık ilan ediyoruz.

uygulama dosyaları (libs / mylibrary.jar)

Alternatif olarak, “libs” klasörünüz birkaç JAR içeriyorsa, projenizin “libs” klasörü içindeki tüm dosyalara bağlı olduğunu belirtmek daha kolay olabilir, örneğin:

uygulama fileTree (dir: libs, dahil:)

Bir yapı bağımlılığı ekleme: Uzak havuzlar

Bir kitaplık uzak bir depoda bulunuyorsa, aşağıdaki adımları tamamlamanız gerekir:

  • Bu bağımlılığın bulunduğu depoyu tanımlayın.
  • Bireysel bağımlılığı ilan edin.

Uzak bir havuza bağlanma

İlk adım, projenizin tüm bağımlılıklarını almak için Gradle'a hangi depoyu (veya depoları) kontrol etmesi gerektiğini söylemektir. Örneğin:

depolar {google () jcenter ()}}

Burada, “jcenter ()” satırı, Gradle'ın bintray'de barındırılan ücretsiz, halka açık bir depo olan JCenter deposunu kontrol etmesini sağlar.

Alternatif olarak, siz veya kuruluşunuz kişisel bir depoya sahipse, bu havuzun URL'sini bağımlılık bildiriminize eklemelisiniz. Depo şifre korumalıysa, giriş bilgilerinizi de girmeniz gerekir, örneğin:

depoları {mavenCentral () maven {// Hedef URL'yi yapılandırın // url "http://repo.mycompany.com/myprivaterepo"} maven {credentials {kullanıcı adı myUsername password myPassword} url "http://repo.mycompany.com / myprivaterepo "}

Birden fazla havuzda bir bağımlılık varsa, Gradle, her bir deponun yaşı ve statik sürüm gibi faktörlere bağlı olarak bu bağımlılığın “en iyi” versiyonunu seçer.

Uzak bir bağımlılık bildirme

Sonraki adım, modül düzeyinde build.gradle dosyanızdaki bağımlılığı bildirmektir. Aşağıdakilerden birini kullanarak bu bilgiyi “bağımlılıklar” bloğuna eklersiniz:

  • Uygulama. Bu, projenizi oluştururken ihtiyacınız olan normal bir bağımlılıktır. Bir "uygulama" bağımlılığı genelinde ortaya çıkacak herşey senin yapıların.
  • Testimplementation. Bu, uygulamanızın test kaynağını derlemek ve JVM tabanlı testler yapmak için gereken bir bağımlılıktır. Bir bağımlılığı “Test Uygulaması” olarak işaretlediğinizde, Gradle normal bir yapım sırasında bu bağımlılık için görevleri yapmak zorunda olmadığını bilir ve bu da yapım süresini kısaltır.
  • Androidtestimplementation. Bu, bir cihaz üzerinde test yaparken gerekli olan bir bağımlılıktır, örneğin Espresso çerçevesi yaygın bir “Android testi” uygulamasıdır.

Yukarıdaki anahtar kelimelerden birini kullanarak, ardından bağımlılığın grubunu, adını ve sürüm özelliklerini izleyen bir uzak bağımlılık tanımlarız, örneğin:

bağımlılıklar {application fileTree (dir: libs, include:) uygulama androidx.appcompat: appcompat: 1.0.2 uygulama androidx.constraintlayout: kısıtlama: 1.1.3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso çekirdeği: 3.1.1}

Birden fazla APK oluşturma: Build varyantları nasıl oluşturulur

Bazen, uygulamanızın birden çok sürümünü oluşturmanız gerekebilir. Örneğin, bazı ek özellikler içeren ücretsiz bir sürümünü ve ücretli bir sürümünü yayınlamak isteyebilirsiniz.

Bu Gradle'ın size yardımcı olabileceği bir yapım işidir, bu nedenle, tek bir projeden birden fazla APK oluşturmak için oluşturma işlemini nasıl değiştirdiğinize bakalım:

  • Strings.xml dosyanızı açın ve orijinal uygulama ad dizinizi silin.
  • Ardından, oluşturmak istediğiniz her ürün lezzetinin adını tanımlayın; bu durumda kullanıyorum:

Ücretsiz uygulamam Ücretli uygulamam

  • AndroidManifest.xml dosyanızı açın ve android: label = ”@ string / app_name” ile değiştirin:

android: label = "$ {appName}"

  • Modül düzeyinde build.gradle dosyanızı açın ve aşağıdakileri "android" bloğuna ekleyin:

flavorDimensions "mode" productFlavors {free {boyut "modu" applicationIdSuffix ".free" manifestPlaceholders =} ücretli {boyut "mode" applicationIdSuffix ".paid" manifestPlaceholders =}}}

Burada olanları parçalayalım:

  • flavorDimensions. Android eklentisi, lezzetleri farklı boyutlardan birleştirerek yapı değişkenleri oluşturur. Burada, uygulamamızın "ücretsiz" ve "ücretli" sürümlerinden oluşan bir lezzet boyutu yaratıyoruz. Yukarıdaki koda göre, Gradle dört derleme türevi üretecektir: paidDebug, paidRelease, freeDebug ve freeRelease.
  • productFlavors. Bu, yukarıdaki kodda "ücretli" ve "ücretsiz" olan aromaların ve ayarlarının listesini belirtir.
  • Ücretsiz / ücretli. Bunlar iki ürün çeşidimizin adı.
  • Boyut. Bir “boyut” parametre değeri belirtmemiz gerekiyor; bu durumda, “modu” kullanıyorum.
  • applicationIdSuffix. Uygulamamızın birden fazla versiyonunu oluşturmak istediğimiz için, her APK'ye benzersiz bir uygulama tanımlayıcısı vermemiz gerekiyor.
  • manifestPlaceholders. Her projenin, projenizin yapılandırması hakkında önemli bilgiler içeren tek bir Manifest dosyası vardır. Birden fazla derleme değişkeni oluştururken, genellikle bu Manifest özelliklerinin bazılarını derleme zamanında değiştirmek isteyeceksiniz. Derleme yapı dosyalarını, her bir yapı değişkeni için benzersiz Manifest girişleri belirtmek için kullanabilirsiniz; bu, derleme sırasında Manifest'inize eklenecektir. Yukarıdaki kodda, Gradle'ın uygulamanın ücretsiz veya ücretli sürümünü oluşturup oluşturmadığına bağlı olarak “appName” değerini değiştiriyoruz.

Özel Gradle görevi oluşturma

Bazen, Dereceyi kullanarak derleme işlemini özelleştirmeniz gerekebilir görevler.

Görev, Gradle'ın bir yapı gerçekleştirirken gerçekleştireceği, örneğin bir Javadoc oluşturmak gibi adlandırılmış bir eylemler topluluğudur. Gradle, varsayılan olarak birçok görevi destekler, ancak çok özel bir yapı talimatları kümesi varsa kullanışlı olabilecek özel görevler de oluşturabilirsiniz.

Bu bölümde, tüm projemizin varyantlarını (paidDebug, paidRelease, freeDebug ve freeRelease) inşa ederek yineleyecek, bir tarih ve zaman damgası oluşturacak ve bu bilgiyi oluşturulan her APK'ye ekleyecek özel bir Gradle görevi oluşturacağız.

Modül düzeyinde build.gradle dosyanızı açın ve aşağıdakileri ekleyin:

görev addDateAndTime () {// Tüm yapı oluşturma değişkenlerini yineleyin // android.applicationVariants.all {variant -> // Tüm APK dosyalarını yineleyin // variant.outputs.all {output -> // Bir örnek oluşturun Geçerli tarih ve saat, belirtilen biçimde / def dateAndTime = new Date (). format ("yyyy-AA-gg: HH-mm") // Bu bilgiyi APK'nin dosya adına ekleyin // def dosyaAdı = değişken. ad + "_" + dateAndTime + ".apk" output.outputFileName = fileName}}}

Sonra Gradle’a söylemeliyiz ne zaman bu görevi yerine getirmelidir. Bir derleme sırasında Gradle, indirmek için ihtiyaç duyduğu her şeyi ve yürütmesi gereken tüm görevleri tanımlar ve bunları Directed Acyclic Graph (DAG) olarak düzenler. Gradle daha sonra DAG’da tanımlanan sıraya göre tüm bu görevleri yerine getirecektir.

Uygulamam için, DAG doldurulduktan sonra görevimizin çağrılmasını sağlayan ve "Gradle" görevlerini yapmaya hazır olan Gradle görevini yapmaya hazır olan “whenReady” yöntemini kullanacağım.

Modül düzeyinde build.gradle dosyanıza aşağıdakileri ekleyin:

// Bu görevi yürütün // gradle.taskGraph.whenReady {addDateAndTime}

Özel görevimizi koyalım ve derleme değişken kodumuzu test ederek, bu projeyi bir Gradle komutu kullanarak inşa ederek.

Projenizi Gradle sarmalayıcı ile inşa etme

Gradle sarmalayıcısını kullanarak Gradle komutları verirsiniz (“gradlew”). Bu komut dosyası, bir Gradle derlemesini başlatmak için tercih edilen yoldur, çünkü derlemenin yürütülmesini Gradle sürümünüzden bağımsız kılar. Bu ayrıştırma, mutlaka Gradle'ın aynı sürümünün kurulu olmadığı başkalarıyla işbirliği yapıyorsanız yararlı olabilir.

Gradle sarmalayıcı komutlarınızı verirken, macOS dahil Unix benzeri işletim sistemleri için “gradlew” ve Windows için “gradlew.bat” kullanacaksınız. Bir Mac'im var, bu yüzden "gradlew" komutlarını kullanıyorum.

Gradle komutlarını Android Studio içinden düzenleyebilirsiniz:

  • Android Studio araç çubuğunda, “Görünüm> Araçlar Windows> Terminal” i seçin. Bu, IDE penceresinin altındaki Terminal panelini açar.
  • Terminal'e aşağıdaki komutu girin:

./gradlew yapı

Android Studio şöyle görünmeli:

  • Klavyenizdeki “Enter” tuşuna basın. Gradle şimdi projenizi inşa edecek.

Gradle, oluşturulan tüm APK'ları projenizin app / build / output / apk dizininde saklar, bu yüzden bu dizine gidin. “APK” klasörü birkaç klasör ve alt klasör içermelidir; Gradle'ın derleme varyantlarınızın her biri için bir APK oluşturduğundan ve her dosyaya doğru tarih ve saat bilgilerinin eklendiğinden emin olun.

Başka Gradle görevleri nelerdir?

Yaratabileceğiniz özel görevlere ek olarak, Gradle önceden tanımlanmış görevlerin bir listesini de destekler. Hangi görevlerin uygun olduğunu görmek istiyorsanız, o zaman:

  • Açık değilse, Android Studio’nun Terminal penceresini açın (Android Studio araç çubuğundan “Görünüm> Araçlar Windows> Terminal” i seçerek).
  • Terminal'e aşağıdakileri yazın:

./gradlew -q görevler

  • Klavyenizdeki “Enter” tuşuna basın.

Bu “görevler” görevi şimdi çalışacak ve birkaç dakika sonra Terminal bu proje için mevcut tüm görevlerin bir listesini gösterecek ve her görev için kısa bir açıklama gösterecektir.

Gradle'dan daha fazlasını elde etme: Eklentileri ekleme

Gradle önceden yüklenmiş bir dizi eklentiyle birlikte gelir, ancak Gradle'ı yeni eklentiler ekleyerek daha da genişletebilirsiniz. Bu eklentiler Android projeleriniz için yeni görevler sunar; örneğin Java eklentisi, Java kaynak kodunu derlemenize, birim testlerini çalıştırmanıza ve “compileJava”, “compileText”, “jar” gibi bir JAR dosyası oluşturmanıza olanak veren görevleri içerir. “Javadoc” ve “temiz”

Bir eklenti uygulamak için, modül düzeyinde build.gradle dosyanıza “eklenti uygula” bildirisini ve ardından eklentinin adını ekleyin. Örneğin, burada Java eklentisini uyguluyoruz:

eklenti uygula: java

Hangi eklentilerin mevcut olduğunu görmek istiyorsanız, Gradle eklentilerinin kapsamlı bir kaydını sağlayan Gradle Plugin aramasına bakın.

Gradle Kotlin DSL

Varsayılan olarak, Gradle derleme komut dosyalarınızı Groovy DSL kullanarak yazacaksınız, ancak Android geliştirme için Kotlin'i benimsemiş birçok geliştiriciden biriyseniz, derleme kodlarınızı Kotlin'e yazmayı tercih edebilirsiniz.

Groovy'den farklı olarak, Kotlin statik olarak yazılmış bir programlama dilidir, bu yüzden geçiş yaparsanız derleme dosyalarınız Android Studio’nun otomatik tamamlama ve kaynak kod gezinme özellikleriyle uyumlu olacaktır. Ayrıca, Groovy'den Kotlin'e geçmek, projenizde aynı programlama dilini kullanacağınız anlamına gelir; bu da gelişmeyi daha kolaylaştırabilir - özellikle de Groovy'ye aşırı aşina değilseniz!

Yapı mantığınızı Kotlin'e yazmaya başlamak istiyorsanız, Gradle Kotlin DSL'yi kurmanız ve taşıma kılavuzundaki talimatları izlemeniz gerekir.

Sarma

Bu makalede, Android Studio’nun yapım otomasyonu ve bağımlılık yönetimi aracını inceledik. Gradle'ın yapım sürecini kullanıma hazır hale nasıl getirdiğini ve özel Gradle görevleri oluşturma ve tek bir projeden birden fazla yapı türü oluşturarak, projenizin Gradle yapı dosyalarını düzenleyerek yapı sürecini nasıl değiştirebileceğinizi inceledik.

Android derleme işleminin diğer bölümlerini otomatikleştirmek için Gradle'ı genişlettiniz mi? Aşağıdaki yorumlarda bize bildirin!

Web geliştirmede, çeşitli işletim itemleri, ekran çözünürlükleri ve tarayıcılarla uğraşıyorunuz, bu nedenle uygulamanızın veya itenizin platformlar araında çalışmaın...

Dizütü bilgiayarınızın klavyei çalışmıyora yapabileceğiniz birkaç şey vardır - bazıları nipeten kolaydır, diğerleri biraz daha karmaşıktır. Her durumda, klavyeyle ilgili problemler...

Bizim Seçimimiz