We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Интеграция Termux с системами CI/CD для автоматизированного тестирования Android‑приложений

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, а также оказываем консалтинг по оптимизации тестовых стратегий.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом RybinskLab.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю IT-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса.

Связаться со мной