Adeiladu prosiect Android mewn cynhwysydd Docker

Wrth ddatblygu prosiect ar gyfer y platfform Android, hyd yn oed yr un lleiaf, yn hwyr neu'n hwyrach mae'n rhaid i chi ddelio â'r amgylchedd datblygu. Yn ogystal â'r Android SDK, mae angen y fersiwn diweddaraf o Kotlin, Gradle, platfform-offer, offer adeiladu. Ac os ar beiriant y datblygwr mae'r holl ddibyniaethau hyn yn cael eu datrys i raddau helaeth gan ddefnyddio'r Android Studio IDE, yna ar y gweinydd CI / CD, gall pob diweddariad droi'n gur pen. Ac os mewn datblygu gwe, mae Docker wedi dod yn ateb safonol i broblem yr amgylchedd, yna beth am geisio datrys problem debyg ag ef yn natblygiad Android ...

I'r rhai nad ydyn nhw'n gwybod beth yw Docker - os yw'n eithaf syml, yna mae hwn yn offeryn ar gyfer creu'r hyn a elwir. "Cynwysyddion" sy'n cynnwys y cnewyllyn OS lleiaf a'r set angenrheidiol o feddalwedd y gallwn eu defnyddio lle bynnag y dymunwn, tra'n cynnal yr amgylchedd. Mae beth yn union fydd yn ein cynhwysydd yn cael ei bennu yn y Dockerfile, sydd wedyn yn cael ei ymgynnull i ddelwedd y gellir ei lansio yn unrhyw le ac sydd â phriodweddau analluedd.

Disgrifir y broses osod a hanfodion Docker yn hyfryd ar ei gwefan swyddogol. Felly, wrth edrych ymlaen ychydig, mae gennym Dockerfile o'r fath

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

Rydyn ni'n ei gadw yn y ffolder gyda'n prosiect Android ac yn dechrau adeiladu'r cynhwysydd gyda'r gorchymyn

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

Paramedr -t yn pennu tag neu enw ein cynhwysydd, sydd fel arfer yn cynnwys ei enw a'i fersiwn. Yn ein hachos ni, fe wnaethom ei alw'n android-build ac yn y fersiwn fe wnaethom nodi set o fersiynau o gradle, android-sdk a platform-tools. Yn y dyfodol, bydd yn haws i ni chwilio am y ddelwedd sydd ei hangen arnom yn ôl enw gan ddefnyddio’r “fersiwn” hwn.

Ar ôl i'r adeiladwaith fynd heibio, gallwn ddefnyddio ein delwedd yn lleol, gallwn ei lawrlwytho gyda'r gorchymyn gwthio docwr i ystorfa ddelweddau cyhoeddus neu breifat er mwyn ei lawrlwytho i beiriannau eraill.

Er enghraifft, gadewch i ni adeiladu prosiect lleol. I wneud hyn, yn y ffolder prosiect, rhedeg y gorchymyn

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

Gadewch i ni ddarganfod beth mae'n ei olygu:

docker rhedeg - y gorchymyn lansio delwedd ei hun
-rm - yn golygu, ar ôl i'r cynhwysydd ddod i ben, ei fod yn dileu popeth a grëwyd yn ystod ei oes
-v "$PWD":/cartref/gradle/ — yn gosod y ffolder gyfredol gyda'n prosiect Android yn y ffolder cynhwysydd mewnol / home / gradle /
-w/cartref/gradle - yn gosod cyfeiriadur gweithio'r cynhwysydd
Android-adeiladu:5.4.1-28-27 - enw ein cynhwysydd yr ydym wedi'i gasglu
gradle assembleDebug - y tîm adeiladu ei hun, sy'n cydosod ein prosiect

Os aiff popeth yn iawn, yna mewn ychydig eiliadau / munudau fe welwch rywbeth tebyg ar eich sgrin ADEILADU YN LLWYDDIANNUS mewn 8m 3s! Ac yn y ffolder ap / adeiladu / allbwn / apk bydd cymhwysiad wedi'i ymgynnull.

Yn yr un modd, gallwch chi gyflawni tasgau gradle eraill - gwiriwch y prosiect, rhedeg profion, ac ati. Y brif fantais yw, os oes angen i ni adeiladu'r prosiect ar unrhyw beiriant arall, nid oes angen i ni boeni am osod yr amgylchedd cyfan, a bydd yn ddigon i lawrlwytho'r ddelwedd angenrheidiol a rhedeg yr adeilad ynddo.

Nid yw'r cynhwysydd yn storio unrhyw newidiadau, ac mae pob cynulliad yn cael ei lansio o'r dechrau, sydd, ar y naill law, yn gwarantu hunaniaeth y cynulliad waeth ble mae'n cael ei lansio, ar y llaw arall, bob tro y mae'n rhaid i chi lawrlwytho'r holl ddibyniaethau a chrynhoi'r holl god eto, a gall hyn gymryd amser sylweddol weithiau. Felly, yn ychwanegol at y cychwyn “oer” arferol, mae gennym yr opsiwn o gychwyn y gwaith adeiladu wrth arbed yr hyn a elwir. “cache”, lle rydyn ni'n cadw'r ffolder ~/.gradle trwy ei gopïo i ffolder gweithio'r prosiect, ac ar ddechrau'r adeiladwaith nesaf rydyn ni'n ei ddychwelyd yn ôl. Fe wnaethom symud yr holl weithdrefnau copïo i sgriptiau ar wahân a dechreuodd y gorchymyn lansio ei hun edrych fel hyn

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"

O ganlyniad, gostyngwyd ein hamser adeiladu prosiect ar gyfartaledd sawl gwaith (yn dibynnu ar nifer y dibyniaethau ar y prosiect, ond dechreuodd y prosiect cyfartalog felly gael ei ymgynnull mewn 1 munud yn lle 5 munud).

Mae hyn i gyd, wrth gwrs, ond yn gwneud synnwyr os oes gennych chi eich gweinydd CI/CD mewnol eich hun, rydych chi'n ei gynnal eich hun. Ond nawr mae yna lawer o wasanaethau cwmwl lle mae'r holl broblemau hyn yn cael eu datrys ac nid oes rhaid i chi boeni amdano, a gellir nodi'r priodweddau cynulliad angenrheidiol hefyd yng ngosodiadau'r prosiect.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Ydych chi'n cadw'ch system CI/CD yn fewnol neu'n defnyddio gwasanaeth trydydd parti

  • Defnyddio gweinydd mewnol

  • Rydym yn defnyddio gwasanaeth allanol

  • Nid ydym yn defnyddio CI/CD

  • eraill

Pleidleisiodd 42 o ddefnyddwyr. Ymataliodd 16 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw