Mastering Gradle Androidille: Gradle-tehtävät ja Kotlin

Kirjoittaja: Lewis Jackson
Luomispäivä: 11 Saattaa 2021
Päivityspäivä: 1 Heinäkuu 2024
Anonim
Mastering Gradle Androidille: Gradle-tehtävät ja Kotlin - Sovellukset
Mastering Gradle Androidille: Gradle-tehtävät ja Kotlin - Sovellukset

Sisältö


Java, XML tai Kotlin sijaan nämä Gradle-rakennustiedostot käyttävät Groovy-pohjaista verkkotunnuskohtaista kieltä (DSL). Jos et ole perehtynyt Groovyen, tarkastelemme rivi riviltä kaikkia näitä Gradle-rakennustiedostoja, joten tämän artikkelin loppuun mennessä voit lukea ja kirjoittaa yksinkertaista Groovy-koodia.

Gradle pyrkii tekemään elämästäsi helpomman tarjoamalla joukon oletusasetuksia, joita voit usein käyttää pienimmällä manuaalisella konfiguroinnilla - kun olet valmis rakentamaan projektisi, paina vain Android Studion Suorita-painiketta ja Gradle aloittaa rakennusprosessin. sinulle.

Huolimatta Gradlen "kokoonpanon yleissopimus" -lähestymistavasta, jos sen oletusasetukset eivät vastaa tarpeitasi, voit mukauttaa, määrittää ja laajentaa rakennusprosessia ja säätää Gradlen asetuksia jopa suorittaaksesi erityisiä tehtäviä.


Koska Gradle-skriptit sisältyvät niiden omiin tiedostoihin, voit muokata sovelluksesi rakennusprosessia milloin tahansa tarvitsematta koskettaa sovelluksesi lähdekoodia. Tässä opetusohjelmassa muokkaamme rakennusprosessia makujen, rakennusvarianttien ja mukautetun Gradle-tehtävän avulla - kaikki ilman koskaan koskettamalla sovelluskoodiamme.

Gradle-rakennustiedostojen tutkiminen

Aina kun luot projektin, Android Studio luo saman kokoelman Gradle-rakennustiedostoja. Vaikka tuodaan olemassa oleva projekti Android Studioon, se tulee vielä luo nämä täsmälleen samat Gradle-tiedostot ja lisää ne projektiisi.

Katsotaanpa riviltä riviltä jokaisen Androidin Gradle-rakennustiedoston ymmärtämiseksi paremmin Gradlen ja Groovy-syntaksin suhteen.

1. asetukset.korjuu

Settings.gradle-tiedosto määrittelee sovelluksesi kaikki moduulit nimen mukaan käyttämällä "sisällyttää" -sanaa. Jos sinulla olisi esimerkiksi projekti, joka koostuu “sovelluksesta” ja “toisesta moduulista”, niin settings.gradle-tiedostosi näyttäisi tällaiselta:


sisältävät: sovellus,: toinen moduuli rootProject.name = MyProject

Projektin koosta riippuen tämä tiedosto voi olla huomattavasti pidempi.

Rakennusprosessin aikana Gradle tutkii projektisi settings.gradle-tiedoston sisällön ja tunnistaa kaikki moduulit, jotka sen on sisällytettävä rakennusprosessiin.

2. build.gradle (projektitaso)

Projektitason build.gradle-tiedosto sijaitsee projektin juurikansiossa ja sisältää asetukset, joihin sovelletaan kaikki moduulisi (jota Gradle kutsuu myös nimellä “projektit”).

Sinun tulisi käyttää tätä tiedostoa määrittämään kaikki laajennukset, arkistot, riippuvuudet ja kokoonpanoasetukset, jotka koskevat kaikkia moduuleja Android-projektissa. Huomaa, että jos määrität Gradle-tehtävät projektitason build.gradle-tiedostossa, silti on mahdollista ohittaa tai laajentaa näitä tehtäviä yksittäisille moduuleille muokkaamalla niitä vastaavia moduulitason build.gradle-tiedosto.

Tyypillinen projektitason build.gradle-tiedosto näyttää noin:

rakennuskirja {arkistot {google () jcenter ()} riippuvuudet {classpath com.android.tools.build:gradle:3.5.0-alpha06 // HUOMAUTUS: Älä aseta sovellusriippuvuuksia tähän; ne kuuluvat // yksittäisiin moduuleihin build.gradle-tiedostoihin}} kaikki projektit {arkistot {google () jcenter ()}} tehtävän puhdistus (tyyppi: Poista) {poista rootProject.buildDir}

Tämä projektitason build.gradle-tiedosto on jaettu seuraaviin lohkoihin:

  • Buildscript. Tämä sisältää asetukset, joita tarvitaan rakennuksen suorittamiseen.
  • Arkistot. Gradle vastaa projektisi riippuvuuksien löytämisestä ja asettamisesta ne saataville rakenteessasi. Kaikki riippuvuudet eivät kuitenkaan tule samasta arkistosta, joten sinun on määriteltävä kaikki arkistot, joita Gradlen tulisi etsiä, jotta voit hakea projektisi riippuvuudet.
  • Riippuvuuksia. Tämä osa sisältää plugin-riippuvuudet, jotka ladataan ja tallennetaan paikallisessa välimuistissa. Sinun pitäisi ei määritä mahdolliset moduuliriippuvuudet tässä lohkossa.
  • AllProjects. Tässä määrität arkistot, joiden pitäisi olla käytettävissä kaikki projektisi moduuleista.

3. build.gradle (moduulitaso)

Tämä on moduulitason build.gradle-tiedosto, joka on läsnä jokaisessa moduulissa koko projektissa. Jos Android-projekti koostuu useista moduuleista, se koostuu myös useista moduulitason build.gradle-tiedostoista.

Jokainen moduulitason build.gradle-tiedosto sisältää projektisi paketin nimen, version nimen ja version koodin sekä tämän moduulin vähimmäis- ja tavoite-SDK: n.

Moduulitason build.gradle-tiedostolla voi myös olla oma yksilöllinen rakennusohjeiden ja riippuvuussarjojen joukko. Esimerkiksi, jos luot sovelluksen Wear OS -komponentilla, Android Studio -projekti koostuu erillisestä älypuhelin- / tablet-moduulista ja Wear-moduulista - koska ne kohdistuvat täysin erilaisiin laitteisiin, näiden moduulien kanssa on dramaattisesti erilainen riippuvuudet!

Perustaso moduulitasolla build.gradle-tiedosto näyttää tyypillisesti noin:

käytä laajennusta: com.android.application android {compileSdkVersion 28 defaultConfig {applicationId "com.jessicathornsby.speechtotext" minSdkVersion 23 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.Unnativeproduced.runner.And getDefaultProguardFile (proguard-android-optimize.txt), proguard-rules.pro}}} riippuvuudet {toteutustiedostoTree (oh: libs, sisältää:) toteutus androidx.appcompat: appcompat: 1.0.2 toteutus androidx.constraintlayout: rajoittaminen: 1.1. 3 testImplementation junit: junit: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1}

Katsotaanpa tarkemmin näitä kaikkia osioita:

  • käytä laajennusta. Tämä on luettelo laajennuksista, joita tarvitaan tämän moduulin rakentamiseksi. Com.android.application -laajennus on välttämätön Android-erityisen rakennusprosessin määrittämiseksi, joten tämä lisätään automaattisesti.
  • android. Tähän sinun tulee sijoittaa kaikki moduulin alustakohtaiset vaihtoehdot.
  • compileSdkVersion. Tämä on API-taso, johon tämä moduuli on koottu. Et voi käyttää tätä arvoa korkeamman sovellusliittymän ominaisuuksia.
  • buildToolsVersion. Tämä osoittaa kääntäjän version. Gradle 3.0.0: ssa ja uudemmissa versioissa buildToolsVersion on valinnainen; Jos et määritä buildToolsVersion-arvoa, Android Studio käyttää oletusarvoisesti viimeisintä Build Tools -versiota.
  • defaultConfig. Tämä sisältää vaihtoehtoja, joita sovelletaan kaikkiin sovelluksesi rakennusversioihin, kuten virheenkorjaus- ja julkaisujärjestelmiin.
  • applicationId. Tämä on sovelluksesi yksilöivä tunniste.
  • minSdkVersion. Tämä parametri määrittelee alimman API-tason, jota tämä moduuli tukee.
  • targetSdkVersion. Tämä on suurin API-taso, jota sovelluksesi on testattu. Ihannetapauksessa sinun pitäisi testata sovelluksesi uusimmalla API: lla, mikä tarkoittaa, että targetSdkVersion-arvo on aina yhtä suuri kuin compileSdkVersion-arvo.
  • versionCode. Tämä on numeerinen arvo sovellusversiollesi.
  • versionName. Tämä on käyttäjäystävällinen merkkijono, joka edustaa sovellusversiota.
  • buildTypes. Oletuksena Android tukee kahta rakennustyyppiä: virheenkorjaus ja julkaisu. Voit määrittää sovelluksen tyyppikohtaiset asetukset virheenkorjaus- ja vapautuslohkojen avulla.
  • riippuvuuksia. Tässä määrität kirjastot, joista tämä moduuli riippuu.

Projektin riippuvuuksien ilmoittaminen: Paikalliset kirjastot

Voit asettaa lisätoimintoja Android-projektisi käyttöön lisäämällä yhden tai useamman projektiriippuvuuden. Nämä riippuvuudet voivat olla paikallisia tai ne voidaan tallentaa etävarastoon.

Jotta voidaan ilmoittaa riippuvuus paikallisesta JAR-tiedostosta, sinun on lisättävä kyseinen JAR projektiisi ”libs” -hakemistoon.

Voit sitten muokata moduulitason build.gradle-tiedostoa ilmoittamaan riippuvuuden tästä tiedostosta. Esimerkiksi, tässä julistetaan riippuvuus ”omakirjasto” JAR: sta.

toteutustiedostot (libs / mylibrary.jar)

Vaihtoehtoisesti, jos “libs” -kansio sisälsi useita JAR-tiedostoja, voi olla helpompaa yksinkertaisesti todeta, että projekti riippuu kaikista “libs” -kansiossa sijaitsevista tiedostoista, esimerkiksi:

toteutustiedostoTree (rež: libs, sisältää:)

Rakennusriippuvuuden lisääminen: Etävarastot

Jos kirjasto sijaitsee etävarastoissa, sinun on suoritettava seuraavat vaiheet:

  • Määritä arkisto, jossa tämä riippuvuus sijaitsee.
  • Ilmoita henkilökohtainen riippuvuus.

Yhteyden muodostaminen etävarastoon

Ensimmäinen askel on kertoa Gradlelle, mikä arkisto (tai arkistot) sen on tarkistettava, jotta voidaan hakea kaikki projektisi riippuvuudet. Esimerkiksi:

arkistot {google () jcenter ()}}

Täällä “jcenter ()” -rivi varmistaa, että Gradle tarkistaa JCenter-arkiston, joka on ilmainen, julkinen arkisto, jota ylläpidetään bintrayssä.

Vaihtoehtoisesti, jos sinä tai organisaatiosi ylläpidät henkilökohtaista arkistoa, sinun pitäisi lisätä tämän arkiston URL-osoite riippuvuusselvitykseen. Jos arkisto on suojattu salasanalla, sinun on annettava myös kirjautumistietosi, esimerkiksi:

säilytystilat {mavenCentral () maven {// Määritä kohde-URL // url "http://repo.omayritys.com/myprivaterepo"} maven {käyttöoikeustiedot {käyttäjänimi myUsername salasana myPassword} url "http://repo.omayritys.com / myprivaterepo "}

Jos riippuvuus esiintyy useassa arkistossa, Gradle valitsee tämän riippuvuuden "parhaan" version sellaisten tekijöiden perusteella kuin kunkin arkiston ikä ja staattinen versio.

Kauko-riippuvuuden ilmoittaminen

Seuraava vaihe on riippuvuuden ilmoittaminen moduulitason build.gradle-tiedostossa. Lisäät nämä tiedot “riippuvuussuhteisiin” -lohkoon jollain seuraavista:

  • Täytäntöönpanoa. Tämä on normaali riippuvuus, jota tarvitset aina, kun rakennat projektiasi. "Toteutus" -riippuvuus esiintyy kaikkialla kaikki rakentaa.
  • Testimplementation. Tämä on riippuvuus, jota tarvitaan sovelluksen testilähteen koottamiseen ja JVM-pohjaisten testien suorittamiseen. Kun merkitset riippuvuuden "Testimplementation" -kohteeksi, Gradle tietää, että sen ei tarvitse suorittaa tämän riippuvuuden tehtäviä normaalin rakennuksen aikana, mikä voi auttaa vähentämään rakennusaikaa.
  • Androidtestimplementation. Tämä on riippuvuus, jota vaaditaan testien suorittamisessa laitteella, esimerkiksi Espresso-kehys on yleinen ”Androidtestimplementation”.

Määrittelemme etäriippuvuuden käyttämällä yhtä yllä olevista avainsanoista, joita seuraa riippuvuusryhmän ryhmä-, nimi- ja versiomääritteet, esimerkiksi:

riippuvuudet {toteutustiedostoTree (oh: libs, sisältää:) toteutus androidx.appcompat: appcompat: 1.0.2 toteutus androidx.constraintlayout: rajoituksen esitys: 1.1.3 testImplementation junit: kesäkuu: 4.12 androidTestImplementation androidx.test.ext: junit: 1.1.0 androidTestImplementation androidx.test.espresso: espresso-core: 3.1.1}

Useiden APK-tiedostojen luominen: Kuinka luoda rakennusvariantteja

Joskus joudut ehkä luomaan sovelluksesta useita versioita. Voit esimerkiksi julkaista ilmaisen version ja maksetun version, joka sisältää joitain lisäominaisuuksia.

Tämä on rakennustehtävä, josta Gradle voi auttaa sinua, joten katsotaanpa kuinka muokkaat rakennusprosessia luodaksesi useita APK: ita yhdestä projektista:

  • Avaa strings.xml-tiedosto ja poista alkuperäinen sovellusnimi.
  • Määritä seuraavaksi kunkin tuotettavan maun nimet, jotka haluat luoda; tässä tapauksessa käytän:

Oma ilmainen sovellus Maksullinen sovellus

  • Avaa AndroidManifest.xml-tiedosto ja korvaa android: label = ”@ string / app_name” seuraavilla:

android: label = "$ {appName}"

  • Avaa moduulitason build.gradle-tiedosto ja lisää seuraava android-lohkoon:

flavorDimensions "mode" productFlavors {ilmainen {dimensiotila "applicationIdSuffix" .free "manifestPlaceholders =} maksettu {mitta" tila "applicationIdSuffix" .paid "manifestPlaceholders =}}}}

Tarkastellaan mitä täällä tapahtuu:

  • flavorDimensions. Android-laajennus luo rakennusvaihtoehtoja yhdistämällä makuja eri ulottuvuuksista. Täällä luomme makuulottuvuuden, joka koostuu sovelluksemme "ilmaisesta" ja "maksetusta" versiosta. Yllä olevan koodin perusteella Gradle tuottaa neljä rakennusvarianttia: paidDebug, paidRelease, freeDebug ja freeRelease.
  • productFlavors. Tämä määrittelee luettelon makuista ja niiden asetuksista, jotka yllä olevassa koodissa ovat “maksettu” ja “ilmainen”.
  • Ilmainen / maksettu. Nämä ovat kahden tuotteemme makujen nimet.
  • Ulottuvuus. Meidän on määritettävä parametrin ”mitta” arvo; tässä tapauksessa käytän “tilaa”.
  • applicationIdSuffix. Koska haluamme luoda sovelluksestamme useita versioita, jokaiselle APK: lle on annettava yksilöivä sovellustunniste.
  • manifestPlaceholders. Jokaisella projektilla on yksi manifesti-tiedosto, joka sisältää tärkeitä tietoja projektisi kokoonpanosta. Kun luot useita rakennusvariantteja, haluat yleensä muokata joitain näistä Manifest-ominaisuuksista rakennusaikana. Gradle-rakennustiedostojen avulla voit määrittää yksilölliset Manifest-merkinnät jokaiselle rakennusmuunnelmalle, jotka lisätään sitten manifestiin rakennusaikana. Yllä olevassa koodissa muokkaamme “appName” -arvoa sen mukaan, rakentaako Gradle sovelluksemme ilmaista vai maksettua versiota.

Muokatun Gradle-tehtävän luominen

Joskus joudut ehkä mukauttamaan rakennusprosessia Gradlen avulla tehtävät.

Tehtävä on nimetty kokoelma toimintoja, jotka Gradle suorittaa suorittaessaan rakennuksen, esimerkiksi generoimalla Javadoc. Gradle tukee oletuksena runsaasti tehtäviä, mutta voit myös luoda mukautettuja tehtäviä, jotka voivat olla hyödyllisiä, jos mielessäsi on erityinen rakennusohjeiden sarja.

Tässä osiossa luomme mukautetun Gradle-tehtävän, joka toistuu kaikissa projektimme rakennusvariantteissa (paidDebug, paidRelease, freeDebug ja freeRelease), luo päivämäärä ja aikaleima ja liittää sitten nämä tiedot jokaisessa luodussa APK: ssa.

Avaa moduulitason build.gradle-tiedosto ja lisää seuraava:

tehtävä addDateAndTime () {// Toista kaikki ulostulon rakennusvariantit // android.applicationVariants.all {variant -> // Toista kaikki APK-tiedostot // variant.outputs.all {output -> // Luo ilmentymä nykyinen päivämäärä ja kellonaika määritellyssä muodossa // def dateAndTime = uusi päivämäärä () .muoto ("vvv-kk-pp: pll-kk") // Lisää nämä tiedot APK: n tiedostonimeen // def tiedostonimi = variantti. nimi + "_" + dateAndTime + ".apk" output.outputFileName = tiedostonimi}}}

Seuraavaksi meidän on kerrottava Gradlelle kun sen pitäisi suorittaa tämä tehtävä. Rakennuksen aikana Gradle tunnistaa kaiken, mitä se tarvitsee ladatakseen, ja kaikki suoritettavat tehtävät, ja järjestää ne DAG: hen (Directed Acyclic Graph). Gradle suorittaa sitten kaikki nämä tehtävät DAG: ssa määritellyn järjestyksen mukaisesti.

Sovelluksessani aion käyttää ”whenReady” -menetelmää, joka varmistaa, että tehtävämme kutsutaan heti, kun DAG on täytetty, ja Gradle on valmis aloittamaan tehtäviensä suorittamisen.

Lisää seuraava moduulitason build.gradle-tiedostoon:

// Suorita tämä tehtävä // gradle.taskGraph.whenReady {addDateAndTime}

Laitetaan mukautettu tehtävämme ja rakennuksen varianttikoodimme testiin rakentamalla tämä projekti Gradle-komennolla.

Projektisi rakentaminen Gradle-kääreellä

Voit antaa Gradle-komentoja käyttämällä Gradle-käärettä (“gradlew”). Tämä komentosarja on suositeltava tapa aloittaa Gradle-rakennus, koska se tekee rakennuksen suorittamisen riippumattomaksi Gradlen versiosta. Tämä erottelu voi olla hyödyllinen, jos teet yhteistyötä muiden kanssa, joilla ei välttämättä ole asennettu samaa Gradlen versiota.

Kun annat Gradle-käärekomentoja, käytät “gradlew” Unix-kaltaisissa käyttöjärjestelmissä, mukaan lukien macOS, ja “gradlew.bat” Windowsissa. Minulla on Mac, joten käytän gradlew-komentoja.

Voit antaa Gradle-komentoja Android Studiosta:

  • Valitse Android Studio -työkaluriviltä ”Näytä> Työkalut Windows> Pääte.” Tämä avaa päätepaneelin IDE-ikkunan alareunaa pitkin.
  • Kirjoita seuraava komento terminaaliin:

./gradlew rakentaa

Android Studion pitäisi näyttää noin:

  • Paina näppäimistön Enter-näppäintä. Gradle rakentaa nyt projektisi.

Gradle tallentaa kaikki luodut APK: t projektisi sovellus / build / output / apk-hakemistoon, joten siirry tähän hakemistoon. APK-kansion tulisi sisältää useita kansioita ja alikansioita; Varmista, että Gradle on luonut APK: n jokaiselle rakennusvaihtoehdollesi ja että jokaiselle tiedostolle on lisätty oikeat päivämäärä- ja aikatiedot.

Mitä muita Gradle-tehtäviä on saatavana?

Mahdollisten luomiesi mukautettujen tehtävien lisäksi Gradle tukee luetteloa ennalta määritetyistä tehtävistä. Jos haluat nähdä tarkalleen, mitkä tehtävät ovat käytettävissä, niin:

  • Avaa Android Studion terminaali-ikkuna, jos sitä ei vielä ole avattu (valitsemalla Android Studio -työkaluriviltä Näytä> Työkalut Windows> Pääte).
  • Kirjoita terminaaliin seuraava:

./gradlew -q tehtävät

  • Paina näppäimistön Enter-näppäintä.

Tämä ”tehtävät” -tehtävä suoritetaan nyt, ja hetken kuluttua päätelaite näyttää luettelon kaikista tämän projektin käytettävissä olevista tehtävistä sekä lyhyt kuvaus jokaisesta tehtävästä.

Hyödyntämällä enemmän Gradlesta: Lisäosien lisääminen

Gradle toimitetaan useilla laajennuksilla esiasennettuna, mutta voit jatkaa Gradle-sovellusta lisäämällä uusia laajennuksia. Nämä liitännäiset antavat uusia tehtäviä Android-projektijesi käyttöön, esimerkiksi Java-laajennus sisältää tehtäviä, joiden avulla voit koota Java-lähdekoodin, suorittaa yksikkötestejä ja luoda JAR-tiedoston, kuten “compileJava”, “compileText”, “jar”. “Javadoc” ja “puhdas”.

Jos haluat käyttää laajennusta, lisää ”Käytä laajennusta” -ilmoitus moduulitason build.gradle-tiedostoosi ja seuraa pluginin nimi. Esimerkiksi, tässä käytetään Java-laajennusta:

käytä laajennusta: Java

Jos sinulla on uteliaisuus nähdä, mitä laajennuksia on saatavilla, tutustu Gradle-laajennushakuun, joka tarjoaa kattavan rekisterin Gradle-laajennuksista.

Gradle Kotlin DSL

Olet oletuksena, että kirjoitat Gradle-rakennuskomentosarjojasi Groovy DSL: llä, mutta jos olet yksi monista kehittäjistä, jotka ovat ottaneet käyttöön Kotlinin Android-kehitykseen, voit kirjoittaa rakennuskomentosarjojasi Kotlinin sijasta.

Toisin kuin Groovy, Kotlin on staattisen tyyppinen ohjelmointikieli, joten jos vaihdat, rakennustiedostot ovat yhteensopivia Android Studion automaattisen täydennys- ja lähdekoodinavigointiominaisuuksien kanssa. Lisäksi siirtyminen Groovy-palvelusta Kotliniin tarkoittaa, että käytät samaa ohjelmointikieltä koko projektissasi, mikä voi tehdä kehityksestä yksinkertaisempaa - varsinkin jos et tunne liian Groovya!

Jos haluat aloittaa rakennuslogiikan kirjoittamisen Kotlinissa, sinun on asennettava Gradle Kotlin DSL ja noudatettava siirtymisoppaan ohjeita.

Käärimistä

Tässä artikkelissa tutkimme Android Studion rakennusautomaatio- ja riippuvuushallintatyökalua. Tutkimme, kuinka Gradle automatisoi rakennusprosessin valmiiksi ja miten voit muokata rakennusprosessia muokkaamalla projektisi Gradle-rakennustiedostoja, mukaan lukien luomalla mukautettuja Gradle-tehtäviä, ja luomalla useita rakennusvariantteja yhdestä projektista.

Oletko laajentanut Gradlea automatisoidaksesi muita Android-rakennusprosessin osia? Kerro meille alla olevissa kommenteissa!

Google Pixel 4 on viimeiin Android-puhelinperhe, joka ottaa käyttöön 3D-kavot lukituken avaamieki. e on yki turvalliimmita biometriitä todennumenetelmitä. Valitettavati BBC hu...

Oikean hetken kaappaaminen voi olla uuri haate, vaikka ominaiuudet, kuten arjakuvautila, helpottavat aioita. Googlella on myö vaihtoehtoinen lähetymitapa, koka uuden Pixel 4 -arjan avulla vo...

Tuoreet Julkaisut