డాకర్ కంటైనర్‌లో Android ప్రాజెక్ట్‌ను రూపొందించడం

ఆండ్రాయిడ్ ప్లాట్‌ఫారమ్ కోసం ప్రాజెక్ట్‌ను అభివృద్ధి చేస్తున్నప్పుడు, చిన్నది కూడా, ముందుగానే లేదా తరువాత మీరు అభివృద్ధి వాతావరణాన్ని ఎదుర్కోవలసి ఉంటుంది. Android SDKతో పాటు, కోట్లిన్, గ్రేడిల్, ప్లాట్‌ఫారమ్-టూల్స్, బిల్డ్-టూల్స్ యొక్క తాజా వెర్షన్‌ను కలిగి ఉండటం అవసరం. మరియు డెవలపర్ మెషీన్‌లో ఈ డిపెండెన్సీలన్నీ Android Studio IDEని ఉపయోగించి చాలా వరకు పరిష్కరించబడితే, CI/CD సర్వర్‌లో ప్రతి అప్‌డేట్ తలనొప్పిగా మారుతుంది. మరియు వెబ్ డెవలప్‌మెంట్‌లో డాకర్ పర్యావరణ సమస్యకు ప్రామాణిక పరిష్కారంగా మారినట్లయితే, ఆండ్రాయిడ్ డెవలప్‌మెంట్‌లో ఇలాంటి సమస్యను పరిష్కరించడానికి ఎందుకు ప్రయత్నించకూడదు...

డాకర్ అంటే ఏమిటో తెలియని వారికి, సరళంగా చెప్పాలంటే, ఇది పిలవబడే వాటిని సృష్టించడానికి ఒక సాధనం. కనిష్ట OS కెర్నల్ మరియు అవసరమైన సాఫ్ట్‌వేర్ సెట్‌ను కలిగి ఉన్న “కంటైనర్‌లు” పర్యావరణాన్ని సంరక్షించేటప్పుడు మనకు కావలసిన చోట అమర్చవచ్చు. మా కంటైనర్‌లో ఖచ్చితంగా ఏమి ఉంటుందో డాకర్‌ఫైల్‌లో నిర్ణయించబడుతుంది, అది ఎక్కడైనా ప్రారంభించబడే మరియు ఐడెంపోటెన్సీ లక్షణాలను కలిగి ఉండే ఇమేజ్‌గా అసెంబుల్ చేయబడుతుంది.

డాకర్ యొక్క ఇన్‌స్టాలేషన్ ప్రాసెస్ మరియు బేసిక్స్ అతనిలో ఖచ్చితంగా వివరించబడ్డాయి అధికారిక వెబ్సైట్. కాబట్టి, కొంచెం ముందుకు చూస్తే, ఇది మేము ముగించిన డాకర్‌ఫైల్:

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

మేము దానిని మా Android ప్రాజెక్ట్‌తో ఫోల్డర్‌లో సేవ్ చేస్తాము మరియు కమాండ్‌తో కంటైనర్‌ను నిర్మించడాన్ని ప్రారంభిస్తాము

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

పరామితి -t మా కంటైనర్ యొక్క ట్యాగ్ లేదా పేరును నిర్దేశిస్తుంది, ఇది సాధారణంగా దాని పేరు మరియు సంస్కరణను కలిగి ఉంటుంది. మా విషయంలో, మేము దీన్ని android-build అని పిలుస్తాము మరియు సంస్కరణలో మేము gradle, android-sdk మరియు ప్లాట్‌ఫారమ్-టూల్స్ యొక్క సంస్కరణల సమితిని సూచించాము. భవిష్యత్తులో, ఈ "వెర్షన్"ని ఉపయోగించి పేరు ద్వారా మనకు అవసరమైన చిత్రం కోసం శోధించడం సులభం అవుతుంది.

అసెంబ్లీ పూర్తయిన తర్వాత, మేము మా చిత్రాన్ని స్థానికంగా ఉపయోగించవచ్చు, మేము దానిని కమాండ్‌తో డౌన్‌లోడ్ చేసుకోవచ్చు డాకర్ పుష్ ఇతర మెషీన్‌లకు డౌన్‌లోడ్ చేయడానికి పబ్లిక్ లేదా ప్రైవేట్ ఇమేజ్ రిపోజిటరీకి.

ఉదాహరణకు, స్థానికంగా ఒక ప్రాజెక్ట్‌ను నిర్మించుకుందాం. దీన్ని చేయడానికి, ప్రాజెక్ట్తో ఫోల్డర్లో, ఆదేశాన్ని అమలు చేయండి

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

దీని అర్థం ఏమిటో తెలుసుకుందాం:

డాకర్ రన్ - ఇమేజ్ లాంచ్ కమాండ్ కూడా
-rm — అంటే కంటైనర్ ఆగిపోయిన తర్వాత, అది తన జీవితంలో సృష్టించిన ప్రతిదాన్ని తొలగిస్తుంది
-v "$PWD":/home/gradle/ — మా Android ప్రాజెక్ట్‌తో ప్రస్తుత ఫోల్డర్‌ను అంతర్గత కంటైనర్ ఫోల్డర్ /home/gradle/లో మౌంట్ చేస్తుంది
-w / home/gradle - కంటైనర్ యొక్క పని డైరెక్టరీని పేర్కొంటుంది
android-build:5.4.1-28-27 - మేము సేకరించిన మా కంటైనర్ పేరు
గ్రాడిల్ అసెంబుల్ డీబగ్ - మా ప్రాజెక్ట్‌ను సమీకరించే అసలైన అసెంబ్లీ బృందం

ప్రతిదీ సరిగ్గా జరిగితే, కొన్ని సెకన్లలో/నిమిషాల్లో మీరు మీ స్క్రీన్‌పై అలాంటిదేదో చూస్తారు 8మీ 3 సెకన్లలో విజయవంతంగా నిర్మించండి! మరియు యాప్/బిల్డ్/అవుట్‌పుట్/apk ఫోల్డర్‌లో అసెంబుల్ చేసిన అప్లికేషన్ ఉంటుంది.

మీరు ఇదే విధంగా ఇతర గ్రేడిల్ పనులను చేయవచ్చు - ప్రాజెక్ట్‌ను తనిఖీ చేయండి, పరీక్షలను అమలు చేయండి మొదలైనవి. ప్రధాన ప్రయోజనం ఏమిటంటే, మనం ఏదైనా ఇతర యంత్రంలో ప్రాజెక్ట్‌ను నిర్మించాల్సిన అవసరం ఉన్నట్లయితే, మొత్తం పర్యావరణాన్ని ఇన్‌స్టాల్ చేయడం గురించి మనం ఆందోళన చెందాల్సిన అవసరం లేదు మరియు అవసరమైన చిత్రాన్ని డౌన్‌లోడ్ చేసి, దానిలో బిల్డ్‌ను అమలు చేయడానికి సరిపోతుంది.

కంటైనర్ ఎటువంటి మార్పులను నిల్వ చేయదు మరియు ప్రతి అసెంబ్లీ స్క్రాచ్ నుండి ప్రారంభించబడుతుంది, ఇది ఒక వైపు, ఎక్కడ ప్రారంభించబడిందో దానితో సంబంధం లేకుండా అసెంబ్లీ యొక్క గుర్తింపుకు హామీ ఇస్తుంది, మరోవైపు, ప్రతిసారీ మీరు అన్ని డిపెండెన్సీలను డౌన్‌లోడ్ చేసుకోవాలి మరియు అన్ని కోడ్‌లను మళ్లీ కంపైల్ చేయండి మరియు దీనికి కొన్నిసార్లు గణనీయమైన సమయం పట్టవచ్చు. అందువల్ల, సాధారణ "చల్లని" ప్రారంభంతో పాటు, పిలవబడే వాటిని సేవ్ చేస్తున్నప్పుడు బిల్డ్ను ప్రారంభించే అవకాశం మాకు ఉంది. “cache”, ఇక్కడ మేము ~/.gradle ఫోల్డర్‌ని కేవలం ప్రాజెక్ట్ వర్కింగ్ ఫోల్డర్‌కి కాపీ చేయడం ద్వారా సేవ్ చేస్తాము మరియు తదుపరి బిల్డ్ ప్రారంభంలో మేము దానిని తిరిగి ఇస్తాము. మేము అన్ని కాపీ ప్రక్రియలను ప్రత్యేక స్క్రిప్ట్‌లలోకి తరలించాము మరియు లాంచ్ కమాండ్ కూడా ఇలా కనిపించడం ప్రారంభించింది

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"

ఫలితంగా, మా సగటు ప్రాజెక్ట్ నిర్మాణ సమయం చాలాసార్లు తగ్గించబడింది (ప్రాజెక్ట్‌పై ఆధారపడే సంఖ్యను బట్టి, అయితే సగటు ప్రాజెక్ట్ 1 నిమిషాలకు బదులుగా 5 నిమిషంలో సమీకరించడం ప్రారంభమైంది).

ఇవన్నీ, మీరు మీ స్వంత అంతర్గత CI/CD సర్వర్‌ని కలిగి ఉంటే మాత్రమే అర్ధవంతం అవుతుంది, ఇది మీకు మీరే మద్దతు ఇస్తుంది. కానీ ఇప్పుడు అనేక క్లౌడ్ సేవలు ఉన్నాయి, వీటిలో ఈ సమస్యలన్నీ పరిష్కరించబడతాయి మరియు మీరు దాని గురించి ఆందోళన చెందాల్సిన అవసరం లేదు మరియు ప్రాజెక్ట్ సెట్టింగులలో అవసరమైన అసెంబ్లీ లక్షణాలను కూడా పేర్కొనవచ్చు.

నమోదు చేసుకున్న వినియోగదారులు మాత్రమే సర్వేలో పాల్గొనగలరు. సైన్ ఇన్ చేయండిదయచేసి.

మీరు మీ CI/CD సిస్టమ్‌ని ఇంట్లోనే ఉంచుకుంటున్నారా లేదా మూడవ పక్ష సేవను ఉపయోగిస్తున్నారా?

  • మేము అంతర్గత సర్వర్‌ని ఉపయోగిస్తాము

  • మేము బాహ్య సేవను ఉపయోగిస్తాము

  • మేము CI/CDని ఉపయోగించము

  • ఇతర

42 మంది వినియోగదారులు ఓటు వేశారు. 16 మంది వినియోగదారులు దూరంగా ఉన్నారు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి