Ho aha projeke ea Android ka sejaneng sa Docker

Ha u ntse u hlahisa morero bakeng sa sethaleng sa Android, esita le se senyenyane ka ho fetisisa, kapele kapa hamorao u tlameha ho sebetsana le tikoloho ea tsoelo-pele. Ho phaella ho Android SDK, hoa hlokahala ho ba le phetolelo ea morao-rao ea Kotlin, Gradle, platform-tools, build-tools. Mme haeba mochining oa nts'etsopele, litšepiso tsena kaofela li rarolloa haholo ho sebelisoa Android Studio IDE, joale ho seva sa CI / CD, ntjhafatso ka 'ngoe e ka fetoha hlooho. 'Me haeba ho nts'etsopele ea webo, Docker e fetohile tharollo e tloaelehileng ea bothata ba tikoloho, ke hobane'ng ha u sa leke ho rarolla bothata bo tšoanang le eona ho nts'etsopele ea Android ...

Bakeng sa ba sa tsebeng hore na Docker ke eng - haeba e le bonolo, joale ena ke sesebelisoa sa ho theha seo ho thoeng ke sona. "Lijana" tse nang le bonyane kernel ea OS le sete e hlokahalang ea software eo re ka e tsamaisang hohle moo re batlang, ha re ntse re boloka tikoloho. Se tla beng se le ka har'a sets'oants'o sa rona se khethoa ho Dockerfile, e ntan'o bokelloa setšoantšong se ka hlahisoang kae kapa kae mme se na le thepa ea boits'oaro.

Ts'ebetso ea ho kenya le metheo ea Docker e hlalositsoe hantle ho ea hae websaete ea molao. Ka hona, ha re sheba pele hanyane, ena ke Dockerfile eo re qeteletseng ka eona:

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

Re e boloka foldareng ka morero oa rona oa Android mme re qala ho haha ​​​​setshelo ka taelo

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

Parameter -t e totobatsa tag kapa lebitso la setshelo sa rona, seo hangata se nang le lebitso la sona le mofuta oa sona. Tabeng ea rona, re e bitsitse android-build mme phetolelong re bonts'itse sehlopha sa mefuta ea gradle, android-sdk le platform-tools. Nakong e tlang, ho tla ba bonolo ho rona ho batla setšoantšo seo re se hlokang ka lebitso re sebelisa "phetolelo" ena.

Ka mor'a hore mohaho o fete, re ka sebelisa setšoantšo sa rona sebakeng sa heno, re ka se khoasolla ka taelo docker push ho polokelo ea litšoantšo ea sechaba kapa ea poraefete e le hore o ka e khoasolla mecheng e meng.

E le mohlala, ha re aheng morero sebakeng sa heno. Ho etsa sena, foldareng e nang le morero, tsamaisa taelo

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

Ha re bone hore na e bolela eng:

docker e matha - taelo ea ho qala setšoantšo ka boeona
-rm - e bolela hore ka mor'a ho emisa setshelo, e hlakola ntho e 'ngoe le e' ngoe e bōpiloeng nakong ea bophelo ba eona
-v "$PWD":/home/gradle/ - e kenya foldara ea hajoale ka projeke ea rona ea Android ka har'a foldara ea ka hare ea setshelo /home/gradle/
-w /home/gradle - e hlalosa bukana e sebetsang ea setshelo
android-buid: 5.4.1-28-27 - lebitso la setshelo sa rona seo re se bokeletseng
gradle assembleDebug - sehlopha sa 'nete sa kopano se kopanyang morero oa rona

Haeba tsohle li tsamaea hantle, ka mor'a metsotsoana / metsotso e seng mekae u tla bona ntho e kang ena ETSA KATLEHO ho 8m 3s! Mme foldara ea app/build/output/apk e tla ba le ts'ebeliso e kopaneng.

U ka etsa mesebetsi e meng ea gradle ka tsela e ts'oanang - hlahloba projeke, etsa liteko, jj. Molemo o ka sehloohong ke hore haeba re hloka ho haha ​​​​morero ka mochine ofe kapa ofe, ha ho hlokahale hore re tšoenyehe ka ho kenya tikoloho eohle 'me ho tla lekana ho kopitsa setšoantšo se hlokahalang le ho tsamaisa mohaho ho eona.

Setshelo ha se boloke liphetoho leha e le life, 'me kopano e' ngoe le e 'ngoe e qalisoa ho tloha qalong, eo, ka lehlakoreng le leng, e tiisang boitsebiso ba kopano ho sa tsotellehe hore na e thakholoa hokae, ka lehlakoreng le leng, nako le nako ha u tlameha ho khoasolla bohle ba itšetlehileng ka eona. le ho bokella khoutu eohle hape, 'me sena ka linako tse ling se ka nka nako e ngata. Ka hona, ho phaella ho qaleho e tloaelehileng ea "batang", re na le khetho ea ho qala kopano ha re ntse re boloka seo ho thoeng ke sona. "cache", moo re bolokang ~/.gradle foldara ka ho e kopitsa feela foldareng e sebetsang ea projeke, 'me qalong ea moaho o latelang re e khutlisa. Re tsamaisitse mekhoa eohle ea ho kopitsa lingoloa tse arohaneng mme taelo ea ho qala ka boeona e qala ho shebahala tjena

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"

Ka lebaka leo, nako ea ho haha ​​​​ka karolelano ea morero e fokotsehile ka makhetlo a 'maloa (ho itšetlehile ka palo ea ho itšetleha ka morero, empa morero o tloaelehileng o ile oa qala ho haha ​​​​ka motsotso oa 1 ho e-na le metsotso ea 5).

Sena sohle, ehlile, sea utloahala haeba u na le seva sa hau sa kahare sa CI / CD, seo u iphelisang ka sona. Empa hona joale ho na le lits'ebeletso tse ngata tsa leru tseo mathata ana kaofela a rarolloang ho tsona 'me ha ho hlokahale hore u tšoenyehe ka eona,' me thepa e hlokahalang ea kopano e ka boela ea boleloa litlhophisong tsa morero.

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Na u boloka sistimi ea hau ea CI/CD ka tlung kapa u sebelisa litšebeletso tsa batho ba bang?

  • Re sebelisa seva ea ka hare

  • Re sebelisa tšebeletso ea kantle

  • Ha re sebelise CI/CD

  • Tse ling

Basebelisi ba 42 ba ile ba khetha. Basebelisi ba 16 ba ile ba hana.

Source: www.habr.com

Eketsa ka tlhaloso