Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает ПО в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения.
Для сборки приложений под ОС Android наиболее популярным инструментом в настоящее время является Gradle. Gradle — это система автоматизации сборки, которая является полностью открытым исходным кодом и использует концепции Apache Maven и Apache Ant. В отличии от Maven, который использует XML для конфигурации проекта, Gradle предоставляет DSL на языках Groovy и Kotlin.
Главным достоинством сборки Android-приложений в Docker контейнере является то, что при необходимости сборки приложения на другом устройстве нет необходимости в установке всего ПО, достаточно скачать необходимый образ.
Для создания образа создается файл, называемый Dockerfile и содержащий все инструкции, необходимые для подготовки системы к работе. В листинге 1 представлен Dockerfile, используемый для создания образа контейнера, в котором будет производиться сборка Android-приложения.
Листинг 1 – Пример Dockerfile
- FROM gradle:6.5.0
- ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" \
- ANDROID_HOME="/usr/local/android-sdk" \
- ANDROID_VERSION=30 \
- ANDROID_BUILD_TOOLS_VERSION=30.0.3
- RUN mkdir "$ANDROID_HOME" .android \
- && cd "$ANDROID_HOME" \
- && curl -o sdk.zip $SDK_URL \
- && unzip sdk.zip \
- 10.&& rm sdk.zip \
- 11.&& mkdir "$ANDROID_HOME/licenses" || true \
- 12.&& echo "android-sdk-license" > "$ANDROID_HCME/licenses/android-sdk-license" \
- 13.&& echo "android-sdk-preview-license" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
- 14.RUN $ANDROIO_HOME/tools/bin/sdkmanager --update
- 15.RUN $ANDROID_HOME/tools/bin/sdkmanager"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
- 16."platforms;android-${ANDROID_VERSION}" \
17. "platform-tools"
В строке 1 указывается базовый образ контейнера. В данном случае используется официальный образ Gradle.
В строках 2-5 задаются переменные с папкой для Android SDK и версиями SDK и SDK Build tools.
В строках 6-10 создается директория для установки SDK, скачивается архив с SDK необходимой версии, распаковывается и затем удаляется.
В строках 11-13 создается папка и файлы с лицензиями. Исходя из официальной документации Android, данные файлы нельзя сгенерировать автоматически, поэтому необходимо скопировать их с устройства, на котором данные лицензии уже подтверждены.
В последующих строках запускается обновление SDK, установка SDK build tools и platform tools.
Сборка образа контейнера осуществляется при помощи команды: “docker build -t <название образа> .”. Результат сборки данного образа показан на рис. 1.
Для запуска контейнера используется следующая команда: “docker run --rm -v <директория проекта>:/home/gradle/ -w /home/gradle <название образа> <команда, которая будет выполнятся в контейнере>”. Для сборки проекта используется команда gradle assembleDebug (пример выполнения команды показан на рис. 2), но аналогичным образом можно выполнять другие задачи Gradle.
В данной статье был рассмотрен один из способов сборки приложений для ОС Android с использованием Docker и Gradle. Данный способ будет полезен, например, для организации CI/CD. Помимо функционала рассмотренного выше, Docker предоставляет разработчику большое количество возможностей, упрощающих разработку, тестирование и развертывание приложений, в том числе и для ОС Android.
Рис.1 Сборка Docker образа
Рис. 2. Пример сборки Android-приложения в контейнере
Список литературы
- Сборка Android-проекта в Docker-контейнере [Электронный ресурс]// URL https://habr.com/ru/post/465193/
- Эдриен, Моуэт Использование Docker. Разработка и внедрение программного обеспечения при помощи технологии контейнеров. Руководство / Моуэт Эдриен. - М.: ДМК Пресс, 2017. - 427 c.
- Turnbull J. The Docker Book. James Turnbull, 2014, p. 338.