Bati yon pwojè android nan yon veso Docker

Lè w ap devlope yon pwojè pou platfòm android a, menm pi piti a, pi bonè oswa pita ou gen fè fas ak anviwònman an devlopman. Anplis SDK Android, li nesesè pou gen dènye vèsyon Kotlin, Gradle, platfòm-zouti, bati-zouti. Men, si sou machin pwomotè a tout depandans sa yo rezoud nan yon pi gwo limit lè l sèvi avèk Android Studio IDE a, Lè sa a, sou sèvè CI / CD, chak aktyalizasyon ka tounen yon tèt fè mal. Men, si nan devlopman entènèt, Docker te vin solisyon an estanda nan pwoblèm anviwònman an, Lè sa a, poukisa pa eseye rezoud yon pwoblèm ki sanble ak li nan devlopman android ...

Pou moun ki pa konnen ki sa Docker se - si li se byen senp, Lè sa a, sa a se yon zouti pou kreye sa yo rele. "Kontenè" ki genyen nwayo OS minimòm lan ak seri lojisyèl nesesè ke nou ka deplwaye kote nou vle, pandan n ap kenbe anviwònman an. Ki sa egzakteman ki pral nan veso nou an detèmine nan Dockerfile a, ki se Lè sa a, reyini nan yon imaj ki ka lanse nenpòt kote epi ki gen pwopriyete idempotity.

Pwosesis enstalasyon an ak Basics yo nan Docker yo trè byen dekri sou li ofisyèl sou sit wèb. Se poutèt sa, gade pi devan yon ti kras, nou gen tankou yon Dockerfile

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

Nou sove li nan katab la ak pwojè android nou an epi kòmanse bati veso a ak lòd la

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

Paramèt -t mete tag oswa non veso nou an, ki anjeneral konsiste de non ak vèsyon li yo. Nan ka nou an, nou te rele li android-build ak nan vèsyon an nou espesifye yon konbinezon de vèsyon gradle, android-sdk ak platfòm-zouti. Nan lavni, li pral pi fasil pou nou chèche imaj nou bezwen pa non lè l sèvi avèk yon "vèsyon" konsa.

Apre konstriksyon an fin pase, nou ka itilize imaj nou an lokalman, nou ka telechaje li ak lòd la docker pouse nan yon depo imaj piblik oswa prive yo nan lòd yo telechaje li nan lòt machin.

Kòm yon egzanp, ann bati yon pwojè lokal. Pou fè sa, nan katab pwojè a, kouri lòd la

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

Ann chèche konnen sa sa vle di:

Dokè kouri - kòmand lansman imaj la tèt li
-rm - vle di ke apre yo fin sispann veso a, li efase tout sa ki te kreye pandan lavi li
-v "$PWD":/kay/gradle/ - monte katab aktyèl la ak pwojè android nou an nan katab entèn veso a /home/gradle/
-w /kay/gradle - mete anyè k ap travay nan veso a
android-build: 5.4.1-28-27 - non veso nou an ke nou te kolekte
gradle assembleDebug - ekip la bati tèt li, ki rasanble pwojè nou an

Si tout bagay ale byen, apre yon koup de segonn / minit ou pral wè yon bagay tankou KONSTWI SIKSÈ nan 8m 3s! Ak nan katab aplikasyon an / bati / pwodiksyon / apk pral gen yon aplikasyon reyini.

Menm jan an tou, ou ka fè lòt travay gradle - tcheke pwojè a, fè tès yo, elatriye. Avantaj prensipal la se ke si nou bezwen bati pwojè a sou nenpòt lòt machin, nou pa bezwen enkyete sou enstale anviwònman an tout antye, epi li pral ase yo telechaje imaj ki nesesè yo epi kouri bati nan li.

Veso a pa estoke okenn chanjman, epi chak asanble lanse nan grafouyen, ki, sou yon bò, garanti idantite asanble a kèlkeswa kote li te lanse, nan lòt men an, chak fwa ou gen telechaje tout depandans yo. epi konpile tout kòd la ankò, e sa ka pafwa pran yon kantite tan enpòtan. Se poutèt sa, nan adisyon a nòmal "frèt" kòmanse a, nou gen opsyon pou yo kòmanse asanble a pandan w ap kenbe sa yo rele an. "kachèt", kote nou sove katab ~/.gradle a pa tou senpleman kopye li nan katab la k ap travay nan pwojè a, epi nan kòmansman an nan pwochen bati a nou retounen li tounen. Nou te deplase tout pwosedi kopye nan scripts separe ak lòd lansman an tèt li te kòmanse sanble sa a

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"

Kòm yon rezilta, tan an mwayèn bati pwojè a te redwi pa plizyè fwa (depann sou kantite depandans sou pwojè a, men pwojè an mwayèn konsa yo te kòmanse bati nan 1 minit olye pou yo 5 minit).

Tout bagay sa a pou kont li fè sans sèlman si ou gen pwòp sèvè entèn CI / CD ou, ki ou menm ou sipòte. Men koulye a, gen anpil sèvis nwaj kote tout pwoblèm sa yo rezoud epi ou pa bezwen enkyete sou li, epi pwopriyete yo bati nesesè yo ka espesifye tou nan anviwònman pwojè yo.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Èske w kenbe sistèm CI/CD w entèn oswa itilize yon sèvis twazyèm pati

  • Sèvi ak yon sèvè entèn

  • Sèvi ak yon sèvis ekstèn

  • Nou pa sèvi ak CI/CD

  • Lòt

42 itilizatè yo te vote. 16 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè