{"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\/ro\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere","title":{"rendered":"Construirea unui proiect Android \u00eentr-un container Docker","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Atunci c\u00e2nd dezvol\u021bi un proiect pentru platforma Android, chiar \u0219i cel mai mic, mai devreme sau mai t\u00e2rziu, trebuie s\u0103 te confrun\u021bi cu mediul de dezvoltare. Pe l\u00e2ng\u0103 Android SDK, trebuie s\u0103 ai cea mai recent\u0103 versiune de Kotlin, Gradle, platform-tools, build-tools. \u0218i dac\u0103 pe ma\u0219ina dezvoltatorului toate aceste dependen\u021be sunt rezolvate \u00een mare parte cu ajutorul Android Studio IDE, pe serverul CI\/CD, fiecare actualizare poate deveni o b\u0103taie de cap. Dac\u0103 \u00een dezvoltarea web, solu\u021bia la problema mediului a devenit standard Docker, de ce s\u0103 nu \u00eencerc\u0103m s\u0103 rezolv\u0103m o problem\u0103 similar\u0103 \u0219i \u00een dezvoltarea Android...<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPentru cei care nu \u0219tiu ce este Docker \u2014 pe scurt, aceasta este un instrument de creare a a\u0219a-numitelor \u201econtainere\u201d \u00een care se afl\u0103 un nucleu minim de sistem de operare \u0219i un set necesar de software, pe care le putem desf\u0103\u0219ura oriunde dorim, p\u0103str\u00e2nd \u00een acela\u0219i timp mediul. Ce va fi exact \u00een containerul nostru este definit \u00een Dockerfile, care apoi este construit \u00eentr-un imagine care poate fi rulat\u0103 oriunde \u0219i are propriet\u0103\u021bi de idempotent\u0103.<\/p>\n<p>Procesul de instalare \u0219i conceptele de baz\u0103 ale Docker sunt descrise excelent pe pagina sa <noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">site-ul oficial<\/a><\/noindex>. A\u0219adar, privind pu\u021bin \u00eenainte, iat\u0103 ce Dockerfile am ob\u021binut.<\/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>\n\u00cel salv\u0103m \u00een folderul cu proiectul nostru Android \u0219i lans\u0103m construc\u021bia containerului cu comanda<\/p>\n<pre><code class=\"bash\">docker build -t android-build:5.4-28-27 .<\/code><\/pre>\n<p>\nParametru <i>-t<\/i> seteaz\u0103 tag-ul sau numele containerului nostru, care de obicei se compune din numele \u0219i versiunea sa. \u00cen cazul nostru, l-am numit android-build \u0219i pentru versiune am indicat combina\u021bia versiunilor gradle, android-sdk \u0219i platform-tools. \u00cen continuare, ne va fi mai u\u0219or s\u0103 c\u0103ut\u0103m imaginea dorit\u0103 dup\u0103 nume folosind o astfel de \u201eversiune\u201d.<\/p>\n<p>Dup\u0103 ce construc\u021bia a fost finalizat\u0103, putem folosi imaginea local, sau o putem \u00eenc\u0103rca cu comanda <i>docker push<\/i> \u00eentr-un repository public sau privat de imagini pentru a o desc\u0103rca pe alte ma\u0219ini.<\/p>\n<p>Ca exemplu, s\u0103 construim proiectul local. Pentru asta, \u00een folderul cu proiectul, vom executa comanda<\/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>\nS\u0103 analiz\u0103m ce \u00eenseamn\u0103 aceasta: <\/p>\n<p><i>docker run<\/i> \u2014 comanda de lansare a imaginii<br \/>\n<i>-rm<\/i> \u2014 \u00eenseamn\u0103 c\u0103, dup\u0103 oprirea containerului, acesta va \u0219terge tot ce a fost creat \u00een timpul vie\u021bii sale<br \/>\n<i>-v \"$PWD\":\/home\/gradle\/<\/i> \u2014 monteaz\u0103 folderul curent cu proiectul nostru Android \u00een folderul intern al containerului \/home\/gradle\/<br \/>\n<i>-w \/home\/gradle<\/i> \u2014 seteaz\u0103 directorul de lucru al containerului<br \/>\n<i>android-build:5.4.1-28-27<\/i> \u2014 numele containerului nostru pe care l-am construit<br \/>\n<i>gradle assembleDebug<\/i> \u2014 echipa de construire care asambleaz\u0103 proiectul nostru<\/p>\n<p>Dac\u0103 totul decurge bine, \u00een c\u00e2teva secunde\/minute ve\u021bi vedea pe ecran ceva de genul <b>CONSTRUC\u021aIE REU\u0218IT\u0102 \u00een 8m 3s<\/b>! Iar \u00een folderul app\/build\/output\/apk va fi aplica\u021bia construit\u0103.<\/p>\n<p>\u00cen mod similar, se pot efectua alte sarcini gradle \u2014 verificarea proiectului, rularea testelor etc. Principalul avantaj este c\u0103, atunci c\u00e2nd avem nevoie s\u0103 construim proiectul pe o alt\u0103 ma\u0219in\u0103, nu trebuie s\u0103 ne facem griji cu privire la instalarea \u00eentregului mediu, fiind suficient s\u0103 desc\u0103rc\u0103m imaginea necesar\u0103 \u0219i s\u0103 lans\u0103m construc\u021bia \u00een ea.<\/p>\n<p>Containerul nu stocheaz\u0103 nicio modificare, iar fiecare construc\u021bie porne\u0219te de la zero, ceea ce garanteaz\u0103 identitatea construc\u021biei, indiferent de locul \u00een care este lansat\u0103. Pe de alt\u0103 parte, de fiecare dat\u0103 trebuie s\u0103 desc\u0103rc\u0103m toate dependen\u021bele \u0219i s\u0103 compil\u0103m \u00eentregul cod din nou, iar asta poate dura uneori un timp considerabil. De aceea, pe l\u00e2ng\u0103 lansarea \u201erece\u201d obi\u0219nuit\u0103, avem op\u021biunea de a lansa construc\u021bia p\u0103str\u00e2nd a\u0219a-numitul \u201ecache\u201d, unde salv\u0103m folderul ~\/ .gradle pur \u0219i simplu copindu-l \u00een folderul de lucru al proiectului, iar la \u00eenceputul urm\u0103toarei construc\u021bii \u00eel return\u0103m \u00eenapoi. Toate procedurile de copiere le-am mutat \u00een scripturi separate, iar echipa de lansare arat\u0103 acum astfel<\/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>\n\u00cen rezultatul acesta, timpul mediu de construc\u021bie a proiectului s-a redus de c\u00e2teva ori (\u00een func\u021bie de num\u0103rul de dependen\u021be ale proiectului, dar un proiect mediu s-a construit astfel \u00een 1 minut \u00een loc de 5 minute).<\/p>\n<p>Toate acestea au sens doar dac\u0103 ave\u021bi un server CI\/CD intern, de care v\u0103 ocupa\u021bi singuri. \u00cens\u0103, \u00een prezent, exist\u0103 multe servicii cloud \u00een care toate aceste probleme sunt rezolvate, iar dumneavoastr\u0103 nu trebuie s\u0103 v\u0103 face\u021bi griji, iar propriet\u0103\u021bile necesare construc\u021biei pot fi de asemenea specificate \u00een set\u0103rile proiectului.<\/p>\n<p class=\"for_users_only_msg\">Numai utilizatorii \u00eenregistra\u021bi pot participa la sondaj. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Conecta\u021bi-v\u0103<\/a><\/noindex>, v\u0103 rug\u0103m.<\/p>\n<h2 class=\"default-block__polling-title\">Ave\u021bi un sistem CI\/CD intern sau folosi\u021bi un serviciu extern?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Folosim un server intern<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Folosim un serviciu extern<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nu folosim CI\/CD<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Altele<\/p>\n<\/li>\n<\/ul>\n<p>    Au votat 42 de utilizatori. S-au ab\u021binut 16 utilizatori.<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Construirea unui proiect Android \u00een container Docker | ProHoster","description":"C\u00e2nd dezvolta\u021bi un proiect pentru platforma Android, chiar \u0219i cel mai mic, mai devreme sau mai t\u00e2rziu va trebui s\u0103 v\u0103 confrunta\u021bi cu mediu de dezvoltare.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/sborka-android-proekta-v-docker-kontejnere","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/37565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=37565"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37565\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=37565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=37565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=37565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}