Android ááááºáá±á¬ááºážá¡ááœáẠááá±á¬áá»ááºáá
áºáá¯ááᯠáá®ááœááºáá±á¬á¡áá«á á¡áá±ážáááºáá¯á¶ážáá
áºáá¯áááºá áááŒá¬áá® ááá¯á·ááá¯áẠáá±á¬ááºááá¯ááºážááœáẠáááºááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯ááºáᬠáááºáááºážáá»ááºááŸáá·áº áááºááá¯ááºááááºááŒá
áºáá«áááºá Android SDK á¡ááŒááºá Kotliná Gradleá platform-toolsá build-tools áá»á¬ážá áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááŸáááẠááá¯á¡ááºáá«áááºá á¡áááºá developer áá
ááºááœáẠá€ááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠAndroid Studio IDE ááá¯á¡áá¯á¶ážááŒá¯á ááá¯ááá¯á¡ááá¯ááºážá¡áá¬áá
áºáá¯á¡ááááŒá±ááŸááºážáá«á CI / CD áá¬áá¬ááœááºá á¡ááºááááºáá
áºáá¯á
á®ááẠáá±á«ááºážááá¯ááºááœá¬ážááá¯ááºáááºá á¡áááºá áááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠDocker ááẠáááºáááºážáá»ááºááŒá¿áá¬á¡ááœáẠá
á¶ááŒá±ááŸááºážáá»ááºáá
áºáᯠááŒá
áºáá¬áá²á·áá«áá Android ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááœáẠáááºážááŸáá·áº á¡áá¬ážáá°ááŒá¿áá¬ááᯠááŒá±ááŸááºážááẠá¡áááºááŒá±á¬áá·áº áááŒáá¯ážá
á¬ážáááááºážá
Docker á áá¬áá²ááá¯áᬠááááá²á·áá°ááœá±á¡ááœáẠ- á¡áá±á¬áºáá±ážááá¯ážááŸááºážáááºááá¯áááºá á¡á²áá«ááᯠáááºáá®ážááá¯á· tool áá
áºáá¯áá«á á¡áááá·áºáá¯á¶áž OS kernel ááŸáá·áº áááºáááºážáá»ááºááᯠááááºážááááºážáá¬ážá
ááºááœáẠáá»áœááºá¯ááºááá¯á· á¡ááá¯ááŸááᬠáá±áá¬ááá¯ááºážááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ áá±á¬á·ááºáá²á¡á
á¯á¶áá«ááŸááá±á¬ "ááœááºááááºáá¬áá»á¬áž" áá»áœááºá¯ááºááá¯á·áááœááºááááºáá¬ááœááºáááºáááºá¡ááá¡áá»ááŒá
áºáááºááᯠDockerfile ááœááºáá¯á¶ážááŒááºáááºá ááá¯á·áá±á¬ááºáááºááá·áºáá±áá¬ááœááºáááá¯ááœáá·áºááá¯ááºááá·áºáá¯á¶ááŸáá·áº ideempotency áá¯ááºááá¹áááá»á¬ážááŸááá±á¬áá¯á¶áá
áºáá¯á¡ááŒá
áºá
á¯á
ááºážáá¬ážáááºá
áááºáááºááŒááºážáá¯ááºáááºážá
ááºááŸáá·áº Docker áá¡ááŒá±áá¶áá»á¬ážááᯠáááºážááá±á«áºááœáẠááŸáá
áœá¬áá±á¬áºááŒáá¬ážáááºá
# Т.к. ПÑМПвМÑÐŒ ОМÑÑÑÑЌеМÑПЌ ÐŽÐ»Ñ ÑбПÑкО 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 ááá±á¬áá»ááºááŒáá·áº ááá¯ááºááœá²ááœáẠááááºážáááºážááŒá®áž command ááŒáá·áº ááœááºááááºáá¬ááᯠá áááºáááºáá±á¬ááºáá«á
docker build -t android-build:5.4-28-27 .
parameter ááẠ-t á¡áá»á¬ážá¡á¬ážááŒáá·áº áááºážáá¡áááºááŸáá·áº áá¬ážááŸááºážáá«ááŸááá±á¬ áá»áœááºá¯ááºááá¯á·áááœááºááááºáá¬á tag ááá¯á·ááá¯áẠá¡áááºááᯠáááºááŸááºáá±ážáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áááºážááᯠandroid-build áá¯áá±á«áºááŒá®áž áá¬ážááŸááºážááœáẠgradleá android-sdk ááŸáá·áº platform-tools áá¬ážááŸááºážáá»á¬ážááᯠáá±á«ááºážá ááºáááºááŸááºáá¬ážáááºá á¡áá¬áááºááœááºá ááá¯ááá¯á·áá±á¬ âáá¬ážááŸááºážâ ááᯠá¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºááá¯á· ááá¯á¡ááºáá±á¬ áá¯á¶ááᯠá¡áááºááŒáá·áº ááŸá¬ááœá±ááẠááá¯ááá¯ááœááºáá°áá¬áá«áááºá
áááºáá±á¬ááºááŸá¯ááŒá®ážááœá¬ážáá±á¬á¡áá«ááœááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¯á¶ááᯠá ááºááœááºážááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áááºážááᯠcommand ááŒáá·áº áá±á«ááºážáá¯ááºáá¯ááºááá¯ááºáá«áááºá docker ááœááºážáááºá áááºážááᯠá¡ááŒá¬ážá ááºáá»á¬ážááá¯á· áá±á«ááºážáá¯ááºáá¯ááºáááºá¡ááœáẠá¡áá»á¬ážááá¯áẠááá¯á·ááá¯áẠáá®ážááá·áºáá¬ááºáá¯á¶ ááá¯ááŸá±á¬ááºáá¯á¶ááá¯á·á
á¥ááá¬á¡áá±áá²á·á áá±ááá¹ááááá±á¬áá»ááºáá áºáá¯ááᯠáááºáá±á¬ááºááŒáá·áºáá¡á±á¬ááºá áá«ááá¯áá¯ááºááá¯á·á ááá±á¬áá»ááºááá¯ááºááœá²ááŸá¬ command ááᯠrun áá«á
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug
áá¬ááá¯ááá¯ááá¯áááºááᯠá¡ááŒá±ááŸá¬ááŒáá·áºáá¡á±á¬ááºá
docker ááŒá±áž - image launch command ááá¯ááºááá¯ááº
-rm - ááá¯ááá¯áááºááŸá¬ ááœááºááááºáá¬ááᯠáááºááá·áºááŒá®ážáá±á¬ááºá áááºážááẠáááºážááááºáááºážá¡ááœááºáž áááºáá®ážáá¬ážááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»ááºáá
áºáááºá
-v "$PWD":/home/gradle/ - áááºááŸáááá¯ááºááœá²ááᯠáá»áœááºá¯ááºááá¯á·á Android ááá±á¬áá»ááºááŒáá·áº ááœááºááááºáá¬áá¡ááœááºážááá¯ááºážááá¯ááºááœá² /home/gradle/ ááá¯á· áááºáááºáááºá
-w /home/gradle - ááœááºááááºáá¬á á¡áá¯ááºáááºážááœáŸááºááᯠáááºááŸááºáá±ážáááºá
android-build-5.4.1-28-27 - áá»áœááºá¯ááºááá¯á·á
á¯áá±á¬ááºážáá¬ážáá±á¬ ááœááºááááºáá¬á¡áááº
gradle assembleDebug - áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºááᯠá
á¯á
ááºážáá±ážáá±á¬ áááºáá±á¬ááºáá±ážá¡ááœá²á·ááá¯ááºááá¯ááº
á¡á¬ážáá¯á¶ážá¡áááºááŒá±ááẠá áá¹ááá·áº/áááá áºáá±á¬ááºááŒá¬ááŒá®ážááẠáá áºáá¯áá¯ááᯠááœá±á·ááá«áááá·áºáááºá 8m 3s ááŒáá·áº á¡á±á¬ááºááŒááºá áœá¬áááºáá±á¬ááºáá«á! ááŒá®ážáá±á¬á· app/build/output/apk folder áá²ááŸá¬ á á¯á ááºážáá¬ážáá²á· application áá áºáᯠááŸááá«áááá·áºáááºá
á¡áá¬ážáá°á áááºááẠááá±á¬áá»ááºááᯠá á áºáá±ážááŒááºážá á ááºážáááºááŸá¯áá»á¬áž áá¯ááºáá±á¬ááºááŒááºáž á¡á ááŸááááºááá¯á·ááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá á¡áááá¡á¬ážáá¬áá»ááºááŸá¬ á¡ááŒá¬ážá ááºáá»á¬ážááœáẠááá±á¬áá»ááºááᯠáááºáá±á¬ááºááẠááá¯á¡ááºáá«áá áááºáááºážáá»ááºáá áºáá¯áá¯á¶ážááᯠááá·áºááœááºážááŒááºážá¡ááœáẠá áááºáá°á áá¬áááá¯áá² ááá¯á¡ááºáá±á¬áá¯á¶ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž áááºážááœáẠáááºáá±á¬ááºááẠáá¯á¶áá±á¬ááºáááºááŒá áºáááºá
ááœááºááááºáá¬ááẠáááºááá·áºááŒá±á¬ááºážáá²ááŸá¯ááá¯áá»áŸ áááááºážáááºážáá¬ážáá² áááºáááºááŸá¯áá áºáá¯á á®ááᯠá¡á ááŸá áááºáá¯ááºáá±á¬ááºááŒá®áž áá áºáááºááœáẠáááºážá¡á¬áž áááºááá·áºáá±áá¬ááááºááŒá áºá á± á¡ááŒá¬ážáá áºáááºááœáẠáááºááẠááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážáá¯ááºáá¯ááºááá·áºá¡áá«ááá¯ááºážá áá áºáááºááœáẠá ááºážáá±ážááœá²áá¡áá±á¬ááºá¡áá¬ážááᯠá¡á¬ááá¶áá«áááºá áá¯ááºá¡á¬ážáá¯á¶ážááᯠáááºáá¶á á¯á ááºážááŒá®áž áááºážááẠáá áºáá«áá áºáá¶ááœáẠá¡áá»áááºáá»á¬ážá áœá¬ááŒá¬ááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá áá¯á¶ááŸáẠ"á¡á¡á±áž" á áááºááŒááºážá¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠááááºážááááºážáá¬ážá ááºááœáẠá ááºážáá±ážááœá²ááᯠá áááºááẠááœá±ážáá»ááºááœáá·áºááŸááááºá "cache" áá±áá¬ááœáẠ~/.gradle ááá¯ááºááœá²ááᯠááá±á¬áá»ááºá áá¯ááºáá±á¬ááºáá±áá±á¬ ááá¯ááºááœá²ááá¯á· áá°ážáá°áá¯á¶ááŒáá·áº ááááºážáááºážáᬠáá±á¬ááºáááºáá±á¬ááºááŸá¯á¡á ááœáẠáááºážááᯠááŒááºáá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá°ážáá°ááŒááºážááá¯ááºáᬠáá¯ááºáá¯á¶ážáá¯ááºáááºážá¡á¬ážáá¯á¶ážááᯠáá®ážááŒá¬áž scripts áá»á¬ážá¡ááŒá áºááá¯á· ááœáŸá±á·ááá¯ááºáááºááŸáá·áº launch command ááá¯ááºááá¯ááºá á€áá²á·ááá¯á· ááŒá áºáá¬áá«áááºá
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"
ááááºá¡áá±ááŒáá·áºá áá»áŸááºážáá»áŸááá±á¬áá»ááºáááºáá±á¬ááºáá»áááºááᯠá¡ááá»á¬ážá áœá¬áá»áŸá±á¬á·áá»áá²á·ááẠ(ááá±á¬áá»ááºá¡áá±á«áº ááŸá®ááá¯ááŸá¯á¡áá±á¡ááœááºáá±á«áºáá°áááºá áá»ááºážáá»áŸááá±á¬áá»ááºááẠá áááá áºá¡á á¬áž á áááá áºá¡ááœááºáž á áááºáááºáá±á¬ááºáááº)á
ááá·áºááœáẠáááºááá¯ááºááá¯ááºáá¶á·ááá¯ážáá±ážáá±á¬ ááá·áºááá¯ááºááá¯ááºá¡ááœááºážááá¯ááºáž CI/CD áá¬áá¬ááŸáááŸáᬠá€á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡áááá¹áá¬ááºááŸááááºááŒá áºáááºá ááá¯á·áá±á¬áº ááá¯ááŒá¿áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒá±ááŸááºážááŒá®ážááŒá áºááá·áº cloud áááºáá±á¬ááºááŸá¯áá»á¬ážá áœá¬ááŸááá±ááŒá®ááŒá áºááŒá®áž áááºážááŸáá·áºáááºáááºááŒá®áž áááºá áá¯ážááááºáá±á áá¬áááá¯áá² ááá¯á¡ááºáá±á¬áááºáá±á¬ááºááŸá¯áá¯ááºááá¹áááá»á¬ážááᯠááá±á¬áá»ááºáááºáááºáá»á¬ážááœááºáááºáž áááºááŸááºááá¯ááºáá«áááºá
á
á¬áááºážááœááºážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᬠá
á
áºáááºážááœáẠáá«áááºááá¯ááºáá«áááºá
áááºááẠáááºá CI/CD á áá áºááᯠá¡ááœááºážááœáẠáá¬ážááŸáááá¬áž ááá¯á·ááá¯áẠááŒááºáá¡ááœá²á·á¡á ááºáž áááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«ááá¬ážá
-
á¡ááœááºážááá¯ááºážáá¬áá¬ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
-
ááŒááºááááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
-
áá»áœááºá¯ááºááá¯á·ááẠCI/CD ááá¯á¶ážáá«á
-
á¡ááŒá¬áž
á¡áá¯á¶ážááŒá¯áá° 42 áŠáž áá²áá±ážáá²á·áááºá áá¯á¶ážá
áœá²áá° áá áŠáž ááŸá±á¬ááºáá±áá²á·áá«áááºá
source: www.habr.com