Android proiektu bat eraikitzea Docker edukiontzi batean

Android plataformarako proiektu bat garatzerakoan, nahiz eta txikia izan, goiz edo beranduago garapen-inguruneari aurre egin behar diozu. Android SDK-az gain, beharrezkoa da Kotlin, Gradle, platform-tools, build-tools-en azken bertsioa izatea. Eta garatzailearen makinan dependentzia horiek guztiak Android Studio IDE erabiliz neurri handiagoan konpontzen badira, CI/CD zerbitzarian eguneratze bakoitza buruhauste bihur daiteke. Eta web garapenean Docker ingurunearen arazoaren irtenbide estandarra bihurtu bada, zergatik ez saiatu Android garapenean antzeko arazo bat konpontzen hura erabiliz...

Docker zer den ez dakienarentzat, besterik gabe, deitutakoa sortzeko tresna da. OS kernel minimo bat eta nahi dugun tokian zabaldu dezakegun beharrezko software multzoa duten "edukiontziak", ingurumena zainduz. Gure edukiontzian zer egongo den zehatz-mehatz Dockerfile-n zehazten da, gero edonon abiarazi daitekeen eta idempotentzia propietateak dituen irudi batean muntatzen dena.

Dockerren instalazio-prozesua eta oinarriak ezin hobeto deskribatzen dira berean webgune ofiziala. Hori dela eta, apur bat aurrera begira, hau da amaitu dugun Dockerfile-a:

# Π’.ΠΊ. основным инструмСнтом для сборки Android-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² являСтся Gradle, 
# ΠΈ ΠΏΠΎ счастливому ΡΡ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π² Π΅ΡΡ‚ΡŒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Docker-ΠΎΠ±Ρ€Π°Π· 
# ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π° основу Π²Π·ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ с Π½ΡƒΠΆΠ½ΠΎΠΉ Π½Π°ΠΌ вСрсиСй Gradle
FROM gradle:5.4.1-jdk8

# Π—Π°Π΄Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с локальной ΠΏΠ°ΠΏΠΊΠΎΠΉ для Android SDK ΠΈ 
# вСрсиями ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ инструмСнтария
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" 
    ANDROID_HOME="/usr/local/android-sdk" 
    ANDROID_VERSION=28 
    ANDROID_BUILD_TOOLS_VERSION=28.0.3

# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡƒ, скачиваСм Ρ‚ΡƒΠ΄Π° SDK ΠΈ распаковываСм Π°Ρ€Ρ…ΠΈΠ²,
# ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послС сборки удаляСм
RUN mkdir "$ANDROID_HOME" .android 
    && cd "$ANDROID_HOME" 
    && curl -o sdk.zip $SDK_URL 
    && unzip sdk.zip 
    && rm sdk.zip 
# Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строчках ΠΌΡ‹ создаСм ΠΏΠ°ΠΏΠΊΡƒ ΠΈ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ 
# с лицСнзиями. На ΠΎΡ„. сайтС Android написано Ρ‡Ρ‚ΠΎ ΠΌΡ‹ 
# ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ с машин Π³Π΄Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ эти 
# Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ ΠΈ Ρ‡Ρ‚ΠΎ автоматичСски 
# ΠΈΡ… ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСльзя
    && mkdir "$ANDROID_HOME/licenses" || true 
    && echo "24333f8a63b6825ea9c5514f83c2829b004d1" > "$ANDROID_HOME/licenses/android-sdk-license" 
    && echo "84831b9409646a918e30573bab4c9c91346d8" > "$ANDROID_HOME/licenses/android-sdk-preview-license"    

# ЗапускаСм ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SDK ΠΈ установку build-tools, platform-tools
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" 
    "platforms;android-${ANDROID_VERSION}" 
    "platform-tools"

Gure Android proiektuarekin karpetan gordetzen dugu eta komandoarekin edukiontzia eraikitzen hasten gara

docker build -t android-build:5.4-28-27 .

Parametroa -t gure edukiontziaren etiketa edo izena zehazten du, normalean bere izenaz eta bertsioaz osatua. Gure kasuan, android-build deitu genion eta bertsioan gradle, android-sdk eta platform-tools-en bertsio multzo bat adierazi genuen. Etorkizunean, errazagoa izango zaigu β€œbertsio” hau erabiliz behar dugun irudia izenez bilatzea.

Muntaia amaitu ondoren, gure irudia lokalean erabil dezakegu, komandoarekin deskargatu dezakegu docker push irudi-biltegi publiko edo pribatu batera beste makina batzuetara deskargatzeko.

Adibide gisa, eraiki dezagun proiektu bat lokalean. Horretarako, proiektua duen karpetan, exekutatu komandoa

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug

Azter dezagun zer esan nahi duen:

docker run - irudia abiarazteko komandoa bera
-rm β€” esan nahi du edukiontzia gelditu ondoren, bere bizitzan zehar sortutako guztia ezabatzen duela
-v "$PWD":/home/gradle/ β€” gure Android proiektuarekin uneko karpeta muntatzen du barneko edukiontzi karpetan /home/gradle/
-w /home/gradle β€” edukiontziaren lan-direktorioa zehazten du
Android-build: 5.4.1-28-27 β€” bildu dugun gure edukiontziaren izena
gradle assembleDebug β€” gure proiektua muntatzen duen benetako muntaia-taldea

Dena ondo badoa, segundo/minutu pare batean zure pantailan antzeko zerbait ikusiko duzu ERAIKITZEN ERAIKITZEN 8m 3s-tan! Eta app/build/output/apk karpetak muntatutako aplikazioa edukiko du.

Graduko beste zeregin batzuk antzera egin ditzakezu: egiaztatu proiektua, exekutatu probak, etab. Abantaila nagusia da proiektua beste edozein makinatan eraiki behar badugu, ez dugula ingurune osoa instalatzeaz kezkatu behar eta nahikoa izango da beharrezko irudia deskargatu eta bertan eraikitzea exekutatzeko.

Edukiontzian ez da aldaketarik gordetzen, eta muntaia bakoitza hutsetik abiarazten da, eta horrek, alde batetik, muntaiaren nortasuna bermatzen du abiarazten den edozein lekutan, bestetik, mendekotasun guztiak deskargatu behar dituzun bakoitzean. eta konpilatu kode guztia berriro, eta batzuetan denbora garrantzitsua izan daiteke. Hori dela eta, ohiko abiarazte β€œhotz”az gain, eraikitzen hasteko aukera dugu deitutakoa gorde bitartean. "cache", non ~/.gradle karpeta gordetzen dugu proiektuaren laneko karpetan kopiatuz, eta hurrengo eraikuntzaren hasieran itzuliko dugu. Kopiatzeko prozedura guztiak script bereizietara eraman genituen eta abiarazteko komandoa bera honela hasi zen

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 /bin/bash -c "./pre.sh; gradle assembleDebug; ./post.sh"

Ondorioz, gure proiektuaren batez besteko eraikuntza-denbora hainbat aldiz murriztu zen (proiektuaren menpekotasun kopuruaren arabera, baina batez besteko proiektua 1 minutu beharrean minutu batean hasi zen muntatzen).

Horrek guztiak, noski, zentzua dauka zure barneko CI/CD zerbitzaria baduzu, zuk zeuk onartzen duzuna. Baina gaur egun arazo horiek guztiak konpontzen diren hodeiko zerbitzu asko daude eta ez duzu horretaz kezkatu beharrik, eta beharrezko muntaketa-propietateak proiektuaren ezarpenetan ere zehaztu daitezke.

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Zure CI/CD sistema etxean mantentzen al duzu edo hirugarrenen zerbitzuren bat erabiltzen duzu?

  • Barne zerbitzari bat erabiltzen dugu

  • Kanpoko zerbitzu bat erabiltzen dugu

  • Ez dugu CI/CD erabiltzen

  • Beste

42 erabiltzailek eman dute botoa. 16 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria