Kuunda mradi wa Android kwenye chombo cha Docker

Wakati wa kuendeleza mradi wa jukwaa la Android, hata ndogo zaidi, mapema au baadaye unapaswa kukabiliana na mazingira ya maendeleo. Mbali na SDK ya Android, ni muhimu kuwa na toleo la hivi karibuni la Kotlin, Gradle, zana za jukwaa, zana za kujenga. Na ikiwa kwenye mashine ya msanidi tegemezi hizi zote zinatatuliwa kwa kiwango kikubwa kwa kutumia Android Studio IDE, basi kwenye seva ya CI / CD, kila sasisho linaweza kugeuka kuwa maumivu ya kichwa. Na ikiwa katika ukuzaji wa wavuti, Docker imekuwa suluhisho la kawaida kwa shida ya mazingira, basi kwa nini usijaribu kutatua shida kama hiyo nayo katika ukuzaji wa Android ...

Kwa wale ambao hawajui Docker ni nini - ikiwa ni rahisi sana, basi hii ni zana ya kuunda kinachojulikana. "Vyombo" ambavyo vina kiwango cha chini cha OS kernel na seti muhimu ya programu ambayo tunaweza kupeleka popote tunapotaka, huku tukidumisha mazingira. Ni nini hasa kitakachokuwa kwenye kontena yetu imedhamiriwa katika Dockerfile, ambayo inakusanywa kwenye picha ambayo inaweza kuzinduliwa mahali popote na ina sifa za ufahamu.

Mchakato wa usakinishaji na misingi ya Docker imeelezewa kwa uzuri kwenye yake tovuti rasmi. Kwa hivyo, tukiangalia mbele kidogo, tunayo Dockerfile kama hiyo

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

Tunaihifadhi kwenye folda na mradi wetu wa Android na kuanza kuunda chombo kwa amri

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

Parameter -t huweka lebo au jina la chombo chetu, ambacho kwa kawaida huwa na jina na toleo lake. Kwa upande wetu, tuliiita android-build na katika toleo tulibainisha mchanganyiko wa matoleo ya gradle, android-sdk na platform-tools. Katika siku zijazo, itakuwa rahisi kwetu kutafuta picha tunayohitaji kwa jina kwa kutumia "toleo" kama hilo.

Baada ya ujenzi kupita, tunaweza kutumia picha yetu ndani ya nchi, tunaweza kuipakua kwa amri kushinikiza docker kwa hifadhi ya picha ya umma au ya kibinafsi ili kuipakua kwa mashine zingine.

Kwa mfano, wacha tujenge mradi wa ndani. Ili kufanya hivyo, kwenye folda ya mradi, endesha amri

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

Wacha tujue maana yake:

docker kukimbia - amri ya uzinduzi wa picha yenyewe
-rm - ina maana kwamba baada ya kuacha chombo, inafuta kila kitu kilichoundwa wakati wa maisha yake
-v "$PWD":/home/gradle/ - huweka folda ya sasa na mradi wetu wa Android kwenye folda ya ndani ya chombo /home/gradle/
-w /home/gradle - huweka saraka ya kazi ya chombo
android-build:5.4.1-28-27 - jina la chombo chetu ambacho tumekusanya
polepole kukusanyikaDebug - timu ya kujenga yenyewe, ambayo inakusanya mradi wetu

Ikiwa kila kitu kitaenda vizuri, basi baada ya sekunde / dakika chache utaona kitu kama hicho JENGA KWA MAFANIKIO katika 8m 3s! Na katika folda ya programu/build/output/apk kutakuwa na programu iliyokusanyika.

Vile vile, unaweza kufanya kazi nyingine za taratibu - angalia mradi, fanya vipimo, nk. Faida kuu ni kwamba ikiwa tunahitaji kujenga mradi kwenye mashine nyingine yoyote, hatuna haja ya kuwa na wasiwasi juu ya kufunga mazingira yote, na itakuwa ya kutosha kupakua picha muhimu na kukimbia kujenga ndani yake.

Chombo hakihifadhi mabadiliko yoyote, na kila kusanyiko linazinduliwa kutoka mwanzo, ambayo, kwa upande mmoja, inahakikisha utambulisho wa kusanyiko bila kujali ni wapi ilizinduliwa, kwa upande mwingine, kila wakati unapaswa kupakua utegemezi wote. na kukusanya msimbo wote tena, na hii inaweza wakati mwingine kuchukua kiasi kikubwa cha muda. Kwa hiyo, pamoja na kuanza kwa kawaida "baridi", tuna fursa ya kuanzisha mkusanyiko wakati wa kudumisha kinachojulikana. "cache", ambapo tunahifadhi folda ya ~/.gradle kwa kuiga tu kwenye folda ya kazi ya mradi huo, na mwanzoni mwa ujenzi unaofuata tunarudisha nyuma. Tulihamisha taratibu zote za kunakili katika hati tofauti na amri ya uzinduzi yenyewe ilianza kuonekana kama hii

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"

Matokeo yake, muda wa wastani wa ujenzi wa mradi ulipunguzwa kwa mara kadhaa (kulingana na idadi ya utegemezi wa mradi huo, lakini mradi wa wastani hivyo ulianza kujenga kwa dakika 1 badala ya dakika 5).

Haya yote yenyewe yana mantiki tu ikiwa unayo seva yako ya ndani ya CI / CD, ambayo wewe mwenyewe unaunga mkono. Lakini sasa kuna huduma nyingi za wingu ambazo matatizo haya yote yanatatuliwa na huna wasiwasi juu yake, na mali muhimu ya kujenga inaweza pia kutajwa katika mipangilio ya mradi.

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Je, unaweka mfumo wako wa CI/CD ndani au unatumia huduma ya watu wengine

  • Kutumia seva ya ndani

  • Kutumia huduma ya nje

  • Hatutumii CI/CD

  • P "SΠ‚SΡ“RΡ–RΡ•RΞΌ

Watumiaji 42 walipiga kura. Watumiaji 16 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni