Termux – это полноценный Linux‑терминал для Android, который позволяет запускать скрипты, компилировать код и управлять пакетами прямо на мобильном устройстве. Благодаря своей гибкости Termux может стать лёгким и экономичным узлом в системах непрерывной интеграции и доставки (CI/CD), особенно когда требуется тестировать Android‑приложения без дорогостоящих облачных эмуляторов.
Почему именно Termux в CI/CD?
- Низкая стоимость. Устройство Android уже есть в арсенале разработчика – дополнительных серверов не требуется.
- Полный контроль над окружением. Можно установить любые версии Java, Android SDK, Gradle и другие инструменты.
- Поддержка SSH. Termux легко подключается к удалённым репозиториям и CI‑агентам.
- Автономность. Тесты могут запускаться даже без доступа к интернету, используя локальный кэш артефактов.
Подготовка среды Termux
Для начала необходимо установить базовые пакеты и настроить репозитории.
pkg update && pkg upgrade -y
pkg install openjdk-17 git wget curl unzip -y
Убедитесь, что java -version выводит установленную версию JDK 17.
Установка Android SDK и эмулятора
Далее скачиваем Android SDK Command‑line Tools и настраиваем необходимые компоненты.
# Создаём директорию для SDK
mkdir -p $HOME/Android/Sdk && cd $HOME/Android/Sdk
# Скачиваем последнюю версию command‑line tools
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip
unzip cmdline-tools.zip -d cmdline-tools
mv cmdline-tools/cmdline-tools $HOME/Android/Sdk/cmdline-tools
# Добавляем пути в переменные окружения (можно добавить в ~/.bashrc)
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools
# Устанавливаем платформу и эмулятор
sdkmanager "platforms;android-33" "build-tools;33.0.2" "platform-tools" "system-images;android-33;google_apis;x86_64"
# Создаём AVD (Android Virtual Device)
avdmanager create avd -n test_avd -k "system-images;android-33;google_apis;x86_64" --device "pixel"
Эмулятор в Termux работает в режиме headless (без графического интерфейса). Для запуска используем:
emulator -avd test_avd -no-window -no-audio -gpu swiftshader_indirect &
После запуска проверяем, что устройство доступно:
adb devices
Пример конфигурации GitHub Actions
Ниже показан минимальный workflow, который использует Termux‑образ в Docker‑контейнере с установленным Android SDK.
name: Android CI on Termux
on: [push, pull_request]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Termux environment
uses: docker://ghcr.io/termux/termux-docker:latest
with:
entrypoint: /bin/bash
args: |
set -e
apt-get update && apt-get install -y openjdk-17-jdk wget unzip git
# Install Android SDK (same steps as above, shortened)
mkdir -p $HOME/Android/Sdk && cd $HOME/Android/Sdk
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline.zip
unzip cmdline.zip -d cmdline-tools && mv cmdline-tools/cmdline-tools $HOME/Android/Sdk/cmdline-tools
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools
yes | sdkmanager --licenses
sdkmanager "platforms;android-33" "build-tools;33.0.2" "system-images;android-33;google_apis;x86_64"
avdmanager create avd -n test_avd -k "system-images;android-33;google_apis;x86_64" --device "pixel"
emulator -avd test_avd -no-window -no-audio -gpu swiftshader_indirect &
sleep 30 # wait for emulator to start
adb wait-for-device
# Build and run tests
./gradlew clean assembleDebug testDebugUnitTest connectedDebugAndroidTest
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v3
with:
name: android-test-reports
path: app/build/reports
Этот workflow полностью автономен: он загружает SDK, создает AVD, запускает эмулятор и выполняет UI‑тесты.
Пример конфигурации GitLab CI
Для GitLab CI используется собственный раннер, работающий в режиме shell на Android‑устройстве с Termux. Ниже пример .gitlab-ci.yml:
stages:
- build
- test
variables:
ANDROID_SDK_ROOT: "$HOME/Android/Sdk"
PATH: "$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools"
before_script:
- echo "Setting up Termux environment"
- pkg update && pkg upgrade -y
- pkg install -y openjdk-17 git wget unzip
- if [ ! -d "$ANDROID_SDK_ROOT" ]; then
mkdir -p $ANDROID_SDK_ROOT && cd $ANDROID_SDK_ROOT &&
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline.zip &&
unzip cmdline.zip -d cmdline-tools &&
mv cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools &&
yes | sdkmanager --licenses &&
sdkmanager "platforms;android-33" "build-tools;33.0.2" "system-images;android-33;google_apis;x86_64";
fi
- avdmanager create avd -n test_avd -k "system-images;android-33;google_apis;x86_64" --device "pixel" || true
- emulator -avd test_avd -no-window -no-audio -gpu swiftshader_indirect &
- sleep 30
- adb wait-for-device
build:
stage: build
script:
- ./gradlew clean assembleDebug
artifacts:
paths:
- app/build/outputs/apk/debug/app-debug.apk
ui_test:
stage: test
script:
- ./gradlew connectedDebugAndroidTest
artifacts:
when: always
paths:
- app/build/reports/androidTests/connected
Обратите внимание, что GitLab‑раннер должен быть установлен в Termux (см. gitlab-runner в официальных инструкциях) и иметь доступ к устройству через adb.
Лучшие практики
- Кеширование артефактов. Сохраняйте каталоги
.gradleиandroid-sdkмежду сборками, чтобы ускорить процесс. - Ограничение ресурсов. Эмулятор в headless‑режиме потребляет около 300‑400 МБ RAM. При одновременном запуске нескольких задач используйте отдельные устройства.
- Параллельные тесты. Разделяйте UI‑тесты и unit‑тесты в разные стадии CI, чтобы сократить общее время.
- Отладка. При падении эмулятора проверьте логи
logcatчерезadb logcat.
Заключение
Интеграция Termux в CI/CD пайплайны открывает новые возможности для автоматизированного тестирования Android‑приложений без необходимости инвестировать в дорогостоящие облачные эмуляторы. С помощью простых скриптов можно развернуть полноценную Android‑среду, собрать приложение, запустить UI‑тесты и собрать отчёты – всё это на обычном Android‑устройстве.
Если вы хотите ускорить процесс разработки, настроить надёжный CI/CD пайплайн или получить профессиональную поддержку по автоматизации тестирования, команда RybinskLab готова помочь. Мы предоставляем услуги по настройке Termux‑агентов, разработке кастомных скриптов и интеграции с вашими системами CI/CD, а также оказываем консалтинг по оптимизации тестовых стратегий.