En Android Projet an engem Docker Container bauen

Wann Dir e Projet fir d'Android Plattform entwéckelt, och dee klengste, desto oder spéider musst Dir mat der Entwécklungsëmfeld këmmeren. Zousätzlech zu der Android SDK ass et néideg déi lescht Versioun vu Kotlin, Gradle, Plattform-Tools, Build-Tools ze hunn. A wann op der Maschinn vum Entwéckler all dës Ofhängegkeete méi grouss mat der Android Studio IDE geléist ginn, da kann op den CI / CD Server all Update zu engem Kappwéi verwandelen. A wann an der Webentwécklung Docker d'Standardléisung fir den Ëmweltproblem ginn ass, firwat net probéiert en ähnleche Problem an der Android Entwécklung ze léisen andeems se et benotzen ...

Fir déi, déi net wësse wat Docker ass, fir et einfach ze soen, ass et e Tool fir de sougenannte. "Container" déi e minimale OS Kernel enthalen an déi néideg Set vu Software, déi mir kënnen ofsetzen wou mir wëllen, wärend d'Ëmwelt erhalen. Wat genee an eisem Container wäert sinn, gëtt an der Dockerfile festgeluegt, déi dann an e Bild gesammelt gëtt dat iwwerall lancéiert ka ginn an idempotenzeigenschaften huet.

Den Installatiounsprozess an d'Basics vum Docker sinn perfekt a sengem beschriwwen offizieller Websäit. Dofir, e bësse no vir kucken, ass dëst den Dockerfile mat deem mir opgehalen hunn:

# Т.к. основным инструментом для сборки 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"

Mir späicheren et am Dossier mat eisem Android Projet a fänken un de Container mam Kommando ze bauen

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

Parameter -t spezifizéiert den Tag oder den Numm vun eisem Container, deen normalerweis aus sengem Numm a senger Versioun besteet. An eisem Fall hu mir et Android-build genannt an an der Versioun hu mir eng Rei Versioune vu Gradle, Android-sdk a Plattform-Tools uginn. An Zukunft wäert et méi einfach sinn fir d'Bild ze sichen déi mir mam Numm brauchen mat dëser "Versioun".

Nodeems d'Versammlung ofgeschloss ass, kënne mir eist Bild lokal benotzen, mir kënnen et mam Kommando eroflueden docker dréckt zu engem ëffentlechen oder privaten Image Repository fir se op aner Maschinnen erofzelueden.

Als Beispill, loosst eis e Projet lokal bauen. Fir dëst ze maachen, lafen de Kommando am Dossier mam Projet

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

Loosst eis erausfannen wat et heescht:

Docker lafen - d'Bildstartbefehl selwer
-rm - heescht datt nodeems de Container stoppt, alles läscht wat während sengem Liewen erstallt gouf
-v "$PWD":/home/gradle/ - montéiert den aktuellen Dossier mat eisem Android Projet an den internen Container Dossier /home/gradle/
-w /home/gradle - spezifizéiert den Aarbechtsverzeechnes vum Container
Android-bauen: 5.4.1-28-27 - den Numm vun eisem Container dee mir gesammelt hunn
gradle assembleDebug - dat eigentlecht Versammlungsteam dat eise Projet zesummesetzt

Wann alles gutt geet, da gesitt Dir an e puer Sekonnen / Minutten op Ärem Écran eppes wéi BUILD SUCCESSFUL an 8m 3s! An den App / Build / Output / Apk Dossier enthält déi gesammelt Applikatioun.

Dir kënnt aner Grade Aufgaben op eng ähnlech Manéier ausféieren - de Projet iwwerpréiwen, Tester ausféieren, etc. Den Haaptvirdeel ass datt wa mir de Projet op all aner Maschinn musse bauen, brauche mir keng Suergen iwwer d'Installatioun vum ganzen Ëmfeld an et wäert genuch sinn fir dat néidegt Bild erofzelueden an de Bau dran auszeféieren.

De Container späichert keng Ännerungen, an all Assemblée gëtt vun Null lancéiert, wat engersäits d'Identitéit vun der Assemblée garantéiert egal wou se lancéiert gëtt, op der anerer Säit, all Kéier wann Dir all Ofhängegkeeten eroflueden musst a kompiléieren all Code erëm, an dëst kann heiansdo bedeitend Zäit huelen. Dofir, nieft dem üblechen "kalen" Start, hu mir d'Optioun fir de Bau ze starten, während de sougenannte spueren. "Cache", wou mir den ~/.gradle-Ordner späicheren andeems Dir en einfach an den Aarbechtsdossier vum Projet kopéiert, an am Ufank vum nächste Build gi mir et zréck. Mir hunn all Kopieprozeduren an getrennte Skripte geplënnert an de Startbefehl selwer huet ugefaang esou ze kucken

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"

Als Resultat gouf eis duerchschnëttlech Bauzäit vum Projet e puer Mol reduzéiert (ofhängeg vun der Unzuel vun Ofhängegkeeten vum Projet, awer den Duerchschnëttsprojet huet also ugefaang an 1 Minutt anstatt 5 Minutten ze montéieren).

All dëst mécht natierlech nëmme Sënn wann Dir Ären eegenen internen CI/CD Server hutt, deen Dir selwer ënnerstëtzt. Awer elo ginn et vill Cloud Servicer, an deenen all dës Probleemer geléist ginn an Dir musst Iech keng Suergen doriwwer maachen, an déi néideg Versammlungseigenschaften kënnen och an de Projet Astellunge spezifizéiert ginn.

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Halt Dir Ären CI/CD System am Haus oder benotzt en Drëtt Partei Service?

  • Mir benotzen en internen Server

  • Mir benotzen en externen Service

  • Mir benotzen net CI / CD

  • Aner

42 Benotzer hunn gestëmmt. 16 Benotzer hu sech enthalen.

Source: will.com

Setzt e Commentaire