Configurarea mediilor de dezvoltare și staging cu Gradle

  • Implementarea unei arhitecturi decuplate între codul sursă și configurația specifică fiecărui mediu.
  • Utilizarea variantelor de compilare și a dimensiunilor de produs pentru a gestiona mai multe versiuni ale unei aplicații.
  • Sincronizarea dependențelor și a implementărilor automate prin rezolvarea artefactelor de configurare.
  • Personalizare avansată a seturilor de surse pentru optimizarea testării și ambalării software-ului.

Configurarea mediilor de dezvoltare și staging cu Gradle

Când ne adâncim în dezvoltarea profesională de software, ne dăm seama că simpla funcționare a codului pe mașina noastră nu este suficientă. Adevărata provocare constă în modul în care gestionăm ciclul de viață al produsului, în special prin separarea logicii de business de setările tehnice care variază în funcție de mediu , cum ar fi conexiunile la baza de date sau parametrii mașinii virtuale.

Echipele se confruntă adesea cu fișiere de proprietăți conflictuale sau configurații care se suprapun. De aceea, stăpânirea unui instrument precum Gradle ne permite nu doar să automatizăm procesul de construire, ci și să creăm un sistem de implementare robust și flexibil care suportă totul, de la dezvoltarea locală la staging și producție, fără a întrerupe nimic pe parcurs.

Managementul configurației decuplate

În proiectele de amploare, este o greșeală uriașă să amesteci codul cu configurația. În mod ideal, configurația dependentă de mediu ar trebui tratată ca un artefact cu propriul ciclu de viață. Aceasta înseamnă că, în timp ce dezvoltatorii licitează cod, administratorii de sistem sau inginerii DevOps pot gestiona independent pool-urile de conexiuni sau politicile Garbage Collector.

Pentru a realiza acest lucru cu Gradle, putem defini o dependență specială, să o numim envConfig, că nu este inclus direct în compilația finală, ci este menționat în Fișier MANIFEST.MF a pachetului (fie că este vorba de un JAR, WAR sau ZIP). În acest fel, executabilul știe exact ce versiune de configurare are nevoie pentru a rula într-un anumit mediu.

Trucul este de a crea proiecte de configurare separate pentru fiecare mediu (local, dev, int, pre). Aceste proiecte sunt de obicei ambalate ca fișiere ZIP care conțin fișiere de proprietăți, configurații de server precum Nginx sau Tomcat și scripturi de pornire. Acest lucru face ca migrarea de la un mediu la altul să fie, în esență, un proces de îmbinare a ramurilor Git.

Medii de pregătire Gradle

Automatizarea implementării și rezoluției

Pentru a conecta aplicația cu configurația sa, putem programa un script Gradle generic. Acest script acționează ca un consumator care primește GAV-ul (GroupId, ArtifactId, Version) și numele mediului aplicației. Sarcina sa este de a descărca artefactul aplicației , de a citi manifestul pentru a găsi dependența de configurare și de a rezolva fișierul corespunzător prin adăugarea sufixului de mediu.

Acest flux de lucru este extrem de puternic, deoarece permite furnizarea consistentă a infrastructurii și implementarea aplicațiilor . Poate fi chiar integrat cu instrumente externe de automatizare, cum ar fi Ansible, unde proiectul de configurare Gradle conține manualul necesar pentru a pregăti mașina înainte de lansarea aplicației.

AAR
Articol asociat:
Diferențe între fișierele .aar și .jar pe Android: Ghid complet

Variante de compilare și dimensiuni de produs

Dacă lucrăm în ecosistemul Android sau cu aplicații complexe, Gradle oferă variante de compilare. Acestea sunt create prin combinarea tipurilor de compilare și a variantelor de produs . De exemplu, dacă avem un tip de compilare „debug” și o variantă „demo”, Gradle generează automat varianta „demoDebug”.

Este foarte util să folosiți applicationIdSuffix pentru a diferenția versiunile pe același dispozitiv. În acest fel, puteți avea versiunile de dezvoltare și de testare instalate simultan, fără ca una să o suprascrie pe cealaltă. În plus, prin intermediul dimensiunile variantelorPutem grupa aromele (cum ar fi „gratuit” vs. „plătit”) și le putem combina cu niveluri API, multiplicând posibilitățile de împachetare.

Pentru a preveni crearea unor combinații absurde de care nu avem nevoie, putem folosi blocul variantFilter. Acest lucru ne permite eliminarea variantelor redundante, menținând proiectul curat și prevenind creșterea vertiginoasă a timpului de compilare prin generarea de fișiere APK sau artefacte pe care nimeni nu le va folosi.

Optimizarea setului sursă

Gradle nu ne obligă să punem totul în folder main. Putem crea seturi de origini specifice pentru fiecare variantă. Aceasta este o adevărată încântare atunci când vrei ca anumite clase Java sau resurse XML să existe doar în versiunea de depanare și să nu ajungă niciodată la utilizatorul final în producție.

Sistemul de priorități al lui Gradle este foarte clar: fișierele din setul sursă al variantei de compilare (cum ar fi demoDebugAcestea au cea mai mare prioritate, urmate de cele legate de tipul de compilare, apoi cele legate de aroma produsului și, în final, cele legate de mainDacă un fișier cu același nume există în mai multe locații, Gradle îl va alege pe cel cu cea mai mare prioritate.permițându-ne să suprascriem elegant configurațiile.

Pentru cei care au nevoie de teste foarte specifice, cum ar fi testarea imaginilor native cu GraalVM, modelul poate fi extins prin crearea unei noi configurații. Prin definirea unui nou SourceSet pentru teste , putem atribui dependențe exclusive (cum ar fi biblioteci SQL specifice) care nu contaminează restul proiectului, menținând consistența graficului de dependențe.

Teste UI în JVM cu Robolectric
Articol asociat:
Execută rapid teste de interfață utilizator pe JVM cu Robolectric

Mediul de lucru și configurația sculelor

Dincolo de codul în sine, mediul în care lucrăm este fundamental. Instrumente precum NetBeans sau IntelliJ vă permit să personalizați managementul de proiect , de la locația pachetelor sursă până la opțiunile de ambalare a fișierelor .jar. Este vital să aveți o structură de foldere organizată pentru a evita căutarea excesivă a fișierelor.

Un element cheie este Încapsulator Gradle (fișierul gradlewAcest script este o salvare pentru echipele mari, deoarece permite rularea lui Gradle fără ca fiecare dezvoltator să fie nevoit să instaleze manual instrumentul pe sistemul său de operare, asigurând că toată lumea folosește exact aceeași versiune de la Gradle, evitând clasicul „funcționează pe mașina mea”.

Pentru a completa bucla de securitate, în special în timpul implementărilor de versiuni, este esențial să configurați semnarea artefactelor. Cea mai bună practică este să evitați scrierea parolelor în scriptul de compilare , ci să le încărcați din variabile de mediu sau fișiere de proprietăți locale folosind un Android Keystore pentru a gestiona securitatea , protejând astfel integritatea cheii private.

Faptul că aveți control complet asupra modului în care este construit software-ul, de la utilizarea variantelor și dimensiunilor până la decuplarea configurației în funcție de mediu, permite ca tranziția de la dezvoltare la implementare să fie un proces lin și fără probleme, asigurând că aplicația se comportă previzibil indiferent de locul în care este implementată.

Cum să creezi o aplicație Android de succes și profesională
Articol asociat:
Cum să creezi o aplicație Android de succes și profesională: Ghid complet, pași, instrumente și exemple

Adăugați ca sursă preferată în Google