Ngawangun proyék Android dina wadah Docker

Nalika ngembangkeun hiji proyék pikeun platform Android, sanajan nu pangleutikna, sooner atanapi engké anjeun kudu nungkulan lingkungan ngembangkeun. Salian SDK Android, perlu boga versi panganyarna tina Kotlin, Gradle, platform-parabot, ngawangun-parabot. Sareng upami dina mesin pamekar sadaya katergantungan ieu direngsekeun langkung ageung nganggo Android Studio IDE, maka dina server CI / CD unggal update tiasa janten lieur. Sareng upami dina pamekaran wéb Docker parantos janten solusi standar pikeun masalah lingkungan, maka naha henteu nyobian ngabéréskeun masalah anu sami dina pamekaran Android nganggo éta ...

Pikeun jalma anu henteu terang naon Docker, pikeun nempatkeun éta, éta mangrupikeun alat pikeun nyiptakeun anu disebut. "wadah" anu ngandung kernel OS minimal sareng set parangkat lunak anu diperyogikeun anu tiasa urang pasang dimana waé urang hoyong, bari ngajaga lingkungan. Naon kahayang anu bakal aya dina wadah kami ditangtukeun dina Dockerfile, anu teras dirakit janten gambar anu tiasa diluncurkeun dimana waé sareng gaduh sipat idempotensi.

Prosés instalasi sareng dasar Docker sampurna dijelaskeun dina na ramatloka resmi. Ku alatan éta, ningali ka hareup saeutik, ieu téh Dockerfile kami réngsé kalawan:

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

Urang simpen dina polder sareng proyék Android urang sareng mimitian ngawangun wadahna nganggo paréntah

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

parameter -t nangtukeun tag atawa ngaran wadah urang, nu biasana diwangun ku ngaran na versi. Dina kasus urang, urang disebut Android-ngawangun sarta dina versi urang dituduhkeun susunan versi gradle, android-sdk sarta platform-parabot. Dina mangsa nu bakal datang, éta bakal leuwih gampang pikeun urang neangan gambar nu urang peryogi ku ngaran ngagunakeun ieu "versi".

Saatos rakitan parantos réngsé, urang tiasa nganggo gambar urang sacara lokal, urang tiasa ngaunduhana nganggo paréntah docker docker ka gudang gambar umum atawa swasta pikeun ngundeur ka mesin séjén.

Salaku conto, hayu urang ngawangun proyék lokal. Jang ngalampahkeun ieu, dina folder kalawan proyék, ngajalankeun paréntah

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

Hayu urang terang naon hartosna:

docker ngaji - paréntah peluncuran gambar sorangan
-urang - hartina sanggeus wadahna eureun, eta mupus sagalana nu dijieun salila hirupna
-v "$PWD":/home/gradle/ - pasang polder ayeuna sareng proyék Android urang kana folder wadah internal /home/gradle/
-w /home/gradle - nangtukeun diréktori kerja wadahna
android-ngawangun: 5.4.1-28-27 - nami wadahna anu kami kumpulkeun
gradle assembleDebug - tim assembly sabenerna nu assembles proyék urang

Upami sadayana lancar, teras dina sababaraha detik / menit anjeun bakal ningali dina layar anjeun sapertos kitu BANGUNAN SUKSES dina 8m 3s! Sareng folder aplikasi / ngawangun / output / apk bakal ngandung aplikasi anu dirakit.

Anjeun tiasa ngalakukeun tugas gradle anu sanés ku cara anu sami - pariksa proyék, ngajalankeun tés, jsb. Kauntungan utama nyaéta yén upami urang kedah ngawangun proyék dina mesin anu sanés, urang henteu kedah hariwang ngeunaan masang sakumna lingkungan sareng éta bakal cekap pikeun ngaunduh gambar anu diperyogikeun sareng ngajalankeun ngawangun éta.

Wadahna henteu nyimpen parobihan, sareng unggal majelis diluncurkeun ti mimiti, anu, di hiji sisi, ngajamin identitas majelis henteu paduli dimana diluncurkeun, di sisi anu sanés, unggal waktos anjeun kedah ngaunduh sadaya katergantungan. sarta compile sakabeh kode deui, sarta ieu kadang butuh waktu signifikan. Ku alatan éta, sajaba ti biasa "tiis" mimiti, urang boga pilihan pikeun ngamimitian ngawangun bari nyimpen disebut. "cache", dimana urang simpen folder ~ / .gradle ku saukur nyalin kana folder gawe proyek, sarta dina awal ngawangun salajengna urang balik deui. Kami mindahkeun sadaya prosedur nyalin kana skrip anu kapisah sareng paréntah peluncuran sorangan mimiti siga kieu

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"

Hasilna, rata-rata waktos ngawangun proyék kami dikirangan sababaraha kali (gumantung kana jumlah katergantungan dina proyék, tapi rata-rata proyék janten mimiti dirakit dina 1 menit tibatan 5 menit).

Sadaya ieu, tangtosna, ngan ukur masuk akal upami anjeun gaduh CI internal / server CD anjeun, anu anjeun ngadukung diri. Tapi ayeuna aya seueur jasa awan dimana sadaya masalah ieu direngsekeun sareng anjeun henteu kedah hariwang ngeunaan éta, sareng pasipatan assembly anu dipikabutuh ogé tiasa ditetepkeun dina setélan proyék.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Naha anjeun nyimpen sistem CI/CD anjeun di bumi atanapi nganggo jasa pihak katilu?

  • Kami nganggo server internal

  • Kami nganggo jasa éksternal

  • Kami henteu nganggo CI / CD

  • nu lain

42 pamaké milih. 16 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar