{"id":37565,"date":"2019-10-31T22:18:20","date_gmt":"2019-10-31T19:18:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sborka-android-proekta-v-docker-kontejnere\/"},"modified":"2019-10-31T22:18:20","modified_gmt":"2019-10-31T19:18:20","slug":"sborka-android-proekta-v-docker-kontejnere","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere","title":{"rendered":"Android projekta veido\u0161ana Docker konteiner\u0101","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Izstr\u0101d\u0101jot projektu Android platformai, pat vismaz\u0101kaj\u0101 projekt\u0101 agr\u0101k vai v\u0113l\u0101k ir j\u0101saskaras ar izstr\u0101des vidi. Papildus Android SDK nepiecie\u0161ams, lai b\u016btu jaun\u0101k\u0101 versija Kotlin, Gradle, platform-tools, build-tools. Un, ja izstr\u0101d\u0101t\u0101ja dator\u0101 visas \u0161\u012bs atkar\u012bbas liel\u0101kaj\u0101 da\u013c\u0101 tiek risin\u0101tas galvenok\u0101rt ar Android Studio IDE, tad CI\/CD server\u012b katra atjaunin\u0101\u0161ana var p\u0101rv\u0113rsties par galvass\u0101pes. Un, ja t\u012bmek\u013ca izstr\u0101d\u0113 risin\u0101jums vid\u0113m ir k\u013cuvis par standartu - Docker, tad k\u0101p\u0113c gan neizm\u0113\u0123in\u0101t atrisin\u0101t l\u012bdz\u012bgu probl\u0113mu ar\u012b Android izstr\u0101d\u0113...<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPavisam vienk\u0101r\u0161i \u2014 Docker ir r\u012bks, lai izveidotu t\u0101 sauktos \u00abkonteinerus\u00bb, kuros ir minim\u0101la oper\u0113t\u0101jsist\u0113mas kodols un nepiecie\u0161amais programmat\u016bras komplekts, ko m\u0113s varam izvietot, kur v\u0113lamies, saglab\u0101jot vidi. Kas tie\u0161i b\u016bs m\u016bsu konteiner\u0101 tiek noteikts Dockerfile, kas p\u0113c tam tiek sav\u0101kts att\u0113l\u0101, kuru var palaist jebkur un kas ir ar idempotences \u012bpa\u0161\u012bb\u0101m.<\/p>\n<p>Docker instal\u0101cijas process un pamati ir lieliski aprakst\u012bti t\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">ofici\u0101laj\u0101 m\u0101jaslap\u0101<\/a><\/noindex>. T\u0101p\u0113c, nedaudz izv\u0113rt\u0113jot, \u0161\u0101ds Dockerfile mums san\u0101ca<\/p>\n<pre><code class=\"plaintext\"># \u0422.\u043a. \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 Android-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Gradle, \n# \u0438 \u043f\u043e \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u043e\u043c\u0443 \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044e \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0435\u0441\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 Docker-\u043e\u0431\u0440\u0430\u0437 \n# \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432\u0437\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0441 \u043d\u0443\u0436\u043d\u043e\u0439 \u043d\u0430\u043c \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Gradle\nFROM gradle:5.4.1-jdk8\n\n# \u0417\u0430\u0434\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u043e\u0439 \u0434\u043b\u044f Android SDK \u0438 \n# \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\nENV SDK_URL=\"https:\/\/dl.google.com\/android\/repository\/sdk-tools-linux-3859397.zip\" \n    ANDROID_HOME=\"\/usr\/local\/android-sdk\" \n    ANDROID_VERSION=28 \n    ANDROID_BUILD_TOOLS_VERSION=28.0.3\n\n# \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0442\u0443\u0434\u0430 SDK \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0445\u0438\u0432,\n# \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c\nRUN mkdir \"$ANDROID_HOME\" .android \n    &amp;&amp; cd \"$ANDROID_HOME\" \n    &amp;&amp; curl -o sdk.zip $SDK_URL \n    &amp;&amp; unzip sdk.zip \n    &amp;&amp; rm sdk.zip \n# \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443 \u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \n# \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\u043c\u0438. \u041d\u0430 \u043e\u0444. \u0441\u0430\u0439\u0442\u0435 Android \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0447\u0442\u043e \u043c\u044b \n# \u043c\u043e\u0436\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u0441 \u043c\u0430\u0448\u0438\u043d \u0433\u0434\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u044d\u0442\u0438 \n# \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u0438 \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \n# \u0438\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f\n    &amp;&amp; mkdir \"$ANDROID_HOME\/licenses\" || true \n    &amp;&amp; echo \"24333f8a63b6825ea9c5514f83c2829b004d1\" &gt; \"$ANDROID_HOME\/licenses\/android-sdk-license\" \n    &amp;&amp; echo \"84831b9409646a918e30573bab4c9c91346d8\" &gt; \"$ANDROID_HOME\/licenses\/android-sdk-preview-license\"    \n\n# \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 SDK \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 build-tools, platform-tools\nRUN $ANDROID_HOME\/tools\/bin\/sdkmanager --update\nRUN $ANDROID_HOME\/tools\/bin\/sdkmanager \"build-tools;${ANDROID_BUILD_TOOLS_VERSION}\" \n    \"platforms;android-${ANDROID_VERSION}\" \n    \"platform-tools\"\n<\/code><\/pre>\n<p>\nSaglab\u0101jam to m\u016bsu Android projekta map\u0113 un uzs\u0101kam konteineru b\u016bvi ar komandu<\/p>\n<pre><code class=\"bash\">docker build -t android-build:5.4-28-27 .<\/code><\/pre>\n<p>\nParametrs <i>-t<\/i> nosaka m\u016bsu konteineru tagu jeb nosaukumu, kas parasti sast\u0101v no t\u0101 nosaukuma un versijas. M\u016bsu gad\u012bjum\u0101 m\u0113s to noskaidroj\u0101m k\u0101 android-build, bet versij\u0101 nor\u0101d\u012bj\u0101m gradle, android-sdk un platform-tools kopumu. Turpm\u0101k mums b\u016bs viegl\u0101k mekl\u0113t nepiecie\u0161amo att\u0113lu p\u0113c nosaukuma, izmantojot \u0161\u0101du \u00abversiju\u00bb.<\/p>\n<p>P\u0113c tam, kad b\u016bvniec\u012bba ir pabeigta, varam izmantot m\u016bsu att\u0113lu lok\u0101li, varam to aug\u0161upiel\u0101d\u0113t ar komandu <i>docker push<\/i> publisk\u0101 vai priv\u0101t\u0101 att\u0113lu repozitorij\u0101, lai to lejupl\u0101d\u0113tu uz cit\u0101m ma\u0161\u012bn\u0101m.<\/p>\n<p>K\u0101 piem\u0113ru, apkoposim projektu lok\u0101li. T\u0101p\u0113c projekta map\u0113 izpild\u012bsim komandu<\/p>\n<pre><code class=\"bash\">docker run --rm -v \"$PWD\":\/home\/gradle\/ -w \/home\/gradle android-build:5.4.1-28-27 gradle assembleDebug<\/code><\/pre>\n<p>\nIzprat\u012bsim, ko t\u0101 noz\u012bm\u0113: <\/p>\n<p><i>$ docker-compose up<\/i> \u2014 pati komanda palai\u017e att\u0113lu<br \/>\n<i>-rm<\/i> \u2014 noz\u012bm\u0113, ka p\u0113c konteineru apst\u0101\u0161an\u0101s tas izdz\u0113\u0161 visu, kas tika izveidots t\u0101 dz\u012bves laik\u0101<br \/>\n<i>-v \u00ab$PWD\u00bb: \/home\/gradle\/<\/i> \u2014 piek\u013cauj pa\u0161reiz\u0113jo mapi ar m\u016bsu Android projektu iek\u0161\u0113jai mapei konteiner\u0101 \/home\/gradle\/<br \/>\n<i>-w \/home\/gradle<\/i> \u2014 nosaka konteineru darba direktoriju<br \/>\n<i>android-build:5.4.1-28-27<\/i> \u2014 m\u016bsu konteineru nosaukums, kuru m\u0113s izveidoj\u0101m<br \/>\n<i>gradle assembleDebug<\/i> \u2014 pati komanda, kas apkopo m\u016bsu projektu<\/p>\n<p>Ja viss izdosies, tad p\u0113c da\u017e\u0101m sekund\u0113m\/min\u016bt\u0113m j\u016bs redz\u0113siet ekr\u0101n\u0101 kaut ko l\u012bdz\u012bgu <b>BUILD SUCCESSFUL in 8m 3s<\/b>! Un map\u0113 app\/build\/output\/apk atrad\u012bsies saliktais lietojums.<\/p>\n<p>L\u012bdz\u012bg\u0101 veid\u0101 var veikt citus gradle uzdevumus \u2014 p\u0101rbaud\u012bt projektu, palaist testus utt. Galven\u0101 priek\u0161roc\u012bba ir t\u0101da, ka, ja projekta salik\u0161anai ir nepiecie\u0161ams cits dators, mums nav j\u0101p\u0101rbauda visa vide, pietiek ar to, ka j\u0101lejupiel\u0101d\u0113 nepiecie\u0161amais att\u0113ls un j\u0101s\u0101k salik\u0161ana.<\/p>\n<p>Konteiners nesaglab\u0101 nek\u0101das izmai\u0146as, un katra salik\u0161ana s\u0101kas no nulles, kas no vienas puses garant\u0113 salik\u0161anas identit\u0101ti neatkar\u012bgi no vietas, kur t\u0101 tiek uzs\u0101kta, bet no otras puses, katru reizi j\u0101lejupiel\u0101d\u0113 visas atkar\u012bbas un j\u0101sagatavo viss kods no jauna, un tas da\u017ereiz var aiz\u0146emt iev\u0113rojamu laiku. T\u0101p\u0113c, iz\u0146emot parasto \"auksto\" palai\u0161anu, mums ir iesp\u0113ja uzs\u0101kt salik\u0161anu, saglab\u0101jot t\u0101 d\u0113v\u0113to \"ke\u0161u\", kur m\u0113s saglab\u0101jam mapi ~\/ .gradle, vienk\u0101r\u0161i kop\u0113jot to projekta darba map\u0113, un n\u0101kam\u0101s salik\u0161anas s\u0101kum\u0101 atgrie\u017eam to atpaka\u013c. Visas kop\u0113\u0161anas proced\u016bras m\u0113s esam izdal\u012bju\u0161i atsevi\u0161\u0137os skriptos, un pati palai\u0161anas komanda mums izskat\u0101s t\u0101<\/p>\n<pre><code class=\"bash\">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\"<\/code><\/pre>\n<p>\nKopum\u0101 vid\u0113jais projekta salik\u0161anas laiks ir samazin\u0101jies vair\u0101kas reizes (atkar\u012bb\u0101 no atkar\u012bbu skaita projekt\u0101, bet vid\u0113jais projekts t\u0101d\u0101 veid\u0101 s\u0101ka salikties 1 min\u016btes laik\u0101, nevis 5 min\u016b\u0161u).<\/p>\n<p>Visas \u0161\u012bs lietas noteikti ir j\u0113gpilnas tikai tad, ja jums ir savs iek\u0161\u0113jais CI\/CD servers, par kuru j\u016bs pa\u0161i r\u016bp\u0113jaties. Bet \u0161obr\u012bd ir daudz m\u0101ko\u0146pakalpojumu, kur visus \u0161os jaut\u0101jumus atrisina, un jums par to nevajag uztraukties, un nepiecie\u0161am\u0101s salik\u0161anas \u012bpa\u0161\u012bbas var ar\u012b nor\u0101d\u012bt projekta iestat\u012bjumos.<\/p>\n<p class=\"for_users_only_msg\">Tikai re\u0123istr\u0113tie lietot\u0101ji var piedal\u012bties aptauj\u0101. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Pieteikties<\/a><\/noindex>, l\u016bdzu.<\/p>\n<h2 class=\"default-block__polling-title\">Vai j\u016bs turat CI\/CD sist\u0113mu iek\u0161\u0113ji vai izmantojat tre\u0161o pu\u0161u pakalpojumu<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Izmantojam iek\u0161\u0113jo serveri<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Izmatojam \u0101r\u0113jo pakalpojumu<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Neizmantojam CI\/CD<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Cits<\/p>\n<\/li>\n<\/ul>\n<p>    Balsoju\u0161i 42 lietot\u0101ji. Attur\u0113ju\u0161ies 16 lietot\u0101ji.<br \/>\n<br \/>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465193\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Android, \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041a\u0440\u043e\u043c\u0435 Android SDK, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f Kotlin, Gradle, platform-tools, build-tools. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Android Studio IDE, \u0442\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 CI\/CD \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37565","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Android, \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0431\u043e\u0440\u043a\u0430 Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Android, \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:18:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:18:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Android projekta salik\u0161ana Docker konteiner\u0101 | ProHoster","description":"Izstr\u0101d\u0101jot projektu Android platformai, pat vismaz\u0101kaj\u0101 br\u012bd\u012b agri vai v\u0113lu n\u0101kas saskarties ar izstr\u0101des vidi.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0431\u043e\u0440\u043a\u0430 Android-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 | ProHoster","og:description":"\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Android, \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:18:20+00:00","article:modified_time":"2019-10-31T19:18:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37565","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:24:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:24:24","updated":"2026-01-23 18:24:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/37565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=37565"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/37565\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=37565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=37565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=37565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}