A 'togail pròiseact Android ann an Docker container

Nuair a bhios tu a 'leasachadh pròiseact airson an àrd-ùrlar Android, eadhon am fear as lugha, luath no mall feumaidh tu dèiligeadh ris an àrainneachd leasachaidh. A bharrachd air an Android SDK, feumar an dreach as ùire de Kotlin, Gradle, innealan àrd-ùrlair, innealan togail. Agus ma thèid na h-eisimeileachd sin uile fhuasgladh gu ìre nas motha air inneal an leasaiche a’ cleachdadh an Android Studio IDE, an uairsin air an t-seirbheisiche CI / CD faodaidh gach ùrachadh tionndadh gu bhith na cheann goirt. Agus ma tha Docker air a thighinn gu bhith na fhuasgladh àbhaisteach air duilgheadas àrainneachd ann an leasachadh lìn, carson nach feuch thu ri fuasgladh fhaighinn air duilgheadas coltach ris ann an leasachadh Android le bhith ga chleachdadh ...

Dhaibhsan aig nach eil fios dè a th’ ann an Docker, airson a chuir gu sìmplidh, tha e na inneal airson an rud ris an canar a chruthachadh. “soithichean” anns a bheil glè bheag de kernel OS agus an seata bathar-bog riatanach as urrainn dhuinn a chleachdadh ge bith càite a bheil sinn ag iarraidh, fhad ‘s a tha sinn a’ gleidheadh ​​​​na h-àrainneachd. Tha dè dìreach a bhios anns a’ ghobhar againn air a dhearbhadh anns an Dockerfile, a tha an uairsin air a chruinneachadh ann an ìomhaigh a ghabhas a chuir air bhog an àite sam bith agus aig a bheil feartan neo-chomasach.

Tha am pròiseas stàlaidh agus bunaitean Docker air am mìneachadh gu foirfe anns an fhear aige làrach-lìn oifigeil. Mar sin, a’ coimhead air adhart beagan, is e seo an Dockerfile a chrìochnaich sinn le:

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

Sàbhailidh sinn e sa phasgan leis a’ phròiseact Android againn agus tòisichidh sinn a’ togail an t-soithich leis an àithne

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

Parameter -t a’ sònrachadh taga no ainm ar soitheach, a bhios mar as trice a’ toirt a-steach ainm agus dreach. Anns a’ chùis againn, thug sinn android-build air agus anns an dreach chomharraich sinn seata de dhreachan de gradle, android-sdk agus platform-tools. Anns an àm ri teachd, bidh e nas fhasa dhuinn an ìomhaigh a tha a dhìth oirnn a lorg le ainm a’ cleachdadh an “dreach” seo.

Às deidh don cho-chruinneachadh a bhith deiseil, is urrainn dhuinn an ìomhaigh againn a chleachdadh gu h-ionadail, is urrainn dhuinn a luchdachadh sìos leis an àithne putadh docker gu stòr ìomhaighean poblach no prìobhaideach airson a luchdachadh sìos gu innealan eile.

Mar eisimpleir, leig leinn pròiseact a thogail gu h-ionadail. Gus seo a dhèanamh, anns a 'phasgan leis a' phròiseact, ruith an àithne

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

Feuch sinn a-mach dè tha e a 'ciallachadh:

docker run - an òrdugh cur air bhog ìomhaigh fhèin
-rm - a’ ciallachadh, às deidh don inneal stad, gun cuir e às do gach nì a chaidh a chruthachadh rè a bheatha
-v "$PWD":/dachaigh/gradle/ - cuir suas am pasgan gnàthach leis a’ phròiseact Android againn a-steach don phasgan container a-staigh / dachaigh / gradle /
-w / dachaigh / gradle - a’ sònrachadh eòlaire obrach an t-soithich
android-togail: 5.4.1-28-27 — ainm ar soitheach a chruinnich sinn
gradle assembleDebug - an fhìor sgioba cruinneachaidh a bhios a’ cruinneachadh ar pròiseact

Ma thèid a h-uile càil gu math, an uairsin ann an diog no dhà / mionaid chì thu air do sgrion rudeigin mar Togail soirbheachail ann an 8m 3s! Agus bidh an tagradh cruinnichte anns a’ phasgan app/togail/toradh/apk.

Faodaidh tu gnìomhan gradle eile a dhèanamh san aon dòigh - thoir sùil air a’ phròiseact, ruith deuchainnean, msaa. Is e am prìomh bhuannachd ma dh'fheumas sinn am pròiseact a thogail air inneal sam bith eile, chan fheum sinn dragh a ghabhail mu bhith a 'stàladh na h-àrainneachd gu lèir agus bidh e gu leòr an ìomhaigh riatanach a luchdachadh sìos agus an togail a ruith ann.

Chan eil an soitheach a 'stòradh atharrachaidhean sam bith, agus thèid gach co-chruinneachadh a chuir air bhog bhon toiseach, a tha, air an aon làimh, a' gealltainn dearbh-aithne an t-seanaidh ge bith càite a bheil e air a chuir air bhog, air an làimh eile, gach uair a dh'fheumas tu a h-uile eisimeileachd a luchdachadh sìos. agus cuir ri chèile an còd gu lèir a-rithist, agus uaireannan bheir seo ùine mhòr. Mar sin, a bharrachd air an tòiseachadh àbhaisteach “fuar”, tha roghainn againn an togail a thòiseachadh fhad ‘s a tha sinn a’ sàbhaladh an rud ris an canar. “cache”, far an sàbhail sinn am pasgan ~/.gradle le bhith dìreach ga chopaigeadh gu pasgan obrach a’ phròiseict, agus aig toiseach an ath thogail bidh sinn ga thilleadh air ais. Ghluais sinn a h-uile modh copaidh gu sgriobtaichean fa leth agus thòisich an àithne cur air bhog fhèin a’ coimhead mar seo

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"

Mar thoradh air an sin, chaidh an ùine togail pròiseict cuibheasach againn a lughdachadh grunn thursan (a rèir an àireamh de eisimeileachd air a ’phròiseact, ach mar sin thòisich am pròiseact cuibheasach air a chruinneachadh ann an 1 mionaid an àite 5 mionaidean).

Chan eil seo uile, gu dearbh, a’ dèanamh ciall ach ma tha an frithealaiche CI/CD a-staigh agad fhèin, a bheir thu taic dhut fhèin. Ach a-nis tha mòran sheirbheisean sgòthan ann far a bheil na duilgheadasan sin uile air am fuasgladh agus cha leig thu leas a bhith draghail mu dheidhinn, agus faodar na feartan cruinneachaidh riatanach a shònrachadh cuideachd ann an roghainnean a ’phròiseict.

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

Am bi thu a’ cumail do shiostam CI/CD a-staigh no a’ cleachdadh seirbheis treas-phàrtaidh?

  • Bidh sinn a’ cleachdadh frithealaiche a-staigh

  • Bidh sinn a’ cleachdadh seirbheis bhon taobh a-muigh

  • Cha bhith sinn a’ cleachdadh CI/CD

  • Eile

Bhòt 42 neach-cleachdaidh. Sheall 16 neach-cleachdaidh.

Source: www.habr.com

Cuir beachd ann