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

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

Автоматизация сборки пакетов в Termux с использованием APKBUILD

Termux предоставляет полноценную Linux‑окружение на Android‑устройствах. Для расширения функционала часто требуется собрать собственные пакеты. Стандартный способ – использовать APKBUILD, скриптовый файл, описывающий процесс сборки. В этой статье мы разберём, как автоматизировать сборку пакетов, интегрировать её в CI/CD и поддерживать репозитории с минимальными усилиями.

Подготовка окружения

Перед тем как приступить к автоматизации, убедитесь, что в Termux установлены необходимые инструменты:

pkg update && pkg upgrade -y
pkg install git curl tar make clang python
pkg install termux-tools termux-elf-cleaner

Для работы с APKBUILD потребуется пакет termux-pkg, который находится в репозитории Termux:

pkg install termux-pkg

Структура файла APKBUILD

Файл APKBUILD – это Bash‑скрипт с набором переменных и функций. Ниже минимальный шаблон для простого C‑проекта:

# Maintainer: Your Name 
# Contributor: Another Person 

pkgname=example
pkgver=1.0.0
pkgrel=1
pkgdesc="Пример простого C‑пакета"
arch='aarch64 arm x86_64 i686'
url="https://github.com/yourname/example"
license='GPL-3.0'
depends=''
makedepends='gcc make'
source="${url}/archive/refs/tags/v${pkgver}.tar.gz"
sha256sums='SKIP'

build() {
    cd "$srcdir/$pkgname-$pkgver"
    $CC $CFLAGS -o example main.c
}

package() {
    cd "$srcdir/$pkgname-$pkgver"
    install -Dm755 example "$pkgdir/usr/bin/example"
}

Обратите внимание на:

  • pkgname, pkgver, pkgrel – базовые идентификаторы.
  • source и sha256sums – источник и контроль целостности.
  • Функции build() и package() описывают процесс компиляции и упаковки.

Автоматизация сборки с помощью скрипта

Создадим Bash‑скрипт build-package.sh, который будет выполнять все шаги от клонирования репозитория до создания .apk‑файла.

#!/usr/bin/env bash
set -euo pipefail

# Параметры
REPO_URL="https://github.com/yourname/example.git"
WORKDIR="$HOME/termux-packages"
APKBUILD_DIR="$WORKDIR/example"

# 1. Подготовка рабочего каталога
mkdir -p "$WORKDIR"
cd "$WORKDIR"

# 2. Клонирование/обновление исходников
if [[ -d "$APKBUILD_DIR" ]]; then
    cd "$APKBUILD_DIR"
    git pull --rebase
else
    git clone "$REPO_URL" "$APKBUILD_DIR"
    cd "$APKBUILD_DIR"
fi

# 3. Генерация APKBUILD (если нужен динамический)
cat > APKBUILD <<'EOF'
# Сгенерированный файл, см. раздел «Структура файла APKBUILD»
EOF

# 4. Сборка пакета через termux-pkg
termux-pkg build .

# 5. Перемещение готового .apk в каталог releases
mkdir -p "$HOME/releases"
mv .apk "$HOME/releases/"

echo "Сборка завершена. Пакет находится в $HOME/releases"

Сделайте скрипт исполняемым:

chmod +x build-package.sh

Теперь запуск ./build-package.sh полностью автоматизирует процесс.

Интеграция в CI/CD (GitHub Actions)

Для обеспечения непрерывной сборки можно добавить GitHub Actions workflow. Ниже пример .github/workflows/termux.yml:

name: Termux Package Build

on:
  push:
    tags:
      - 'v..'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up Termux environment
        uses: vishnubob/setup-termux@v1
        with:
          packages: git curl tar make clang termux-pkg

      - name: Run build script
        run: |
          chmod +x build-package.sh
          ./build-package.sh

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: termux-apk
          path: ~/releases/*.apk

Этот workflow будет запускаться при каждом пуше тега версии, автоматически создавая .apk‑пакет и размещая его как артефакт сборки.

Лучшие практики

  • Контроль целостности: всегда указывайте реальный sha256sums вместо SKIP. Это защищает от подмены кода.
  • Разделение сборки и упаковки: используйте отдельные функции build() и package() для чистоты процесса.
  • Минимальная зависимость: перечисляйте только те пакеты, которые действительно нужны в depends и makedepends.
  • Тестирование: добавляйте функцию check(), где запускаются unit‑тесты перед упаковкой.
  • Версионирование: обновляйте pkgver и pkgrel в соответствии с изменениями кода и исправлениями сборки.

Заключение

Автоматизация сборки пакетов в Termux с помощью APKBUILD позволяет существенно ускорить разработку, обеспечить воспроизводимость и интегрировать процесс в современные CI/CD‑системы. Следуя изложенным рекомендациям, вы сможете поддерживать собственный репозиторий пакетов, быстро реагировать на изменения кода и предоставлять пользователям готовые .apk‑файлы без ручных вмешательств.

Если вам требуется профессиональная настройка автоматизированных сборок, создание кастомных репозиториев или консультация по оптимизации Termux‑окружения, команда RybinskLab готова помочь. Мы предоставляем услуги по разработке скриптов, настройке CI/CD, аудиту безопасности пакетов и обучению ваших сотрудников. Свяжитесь с нами, чтобы вывести ваш проект на новый уровень эффективности.

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

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

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

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

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