Termux превратил Android‑устройства в полноценные Linux‑окружения. Однако при работе с тяжёлыми задачами компиляции (C/C++, Rust, Go) часто возникает ощущение, что ресурсы ограничены. В этой статье мы разберём, как настроить Termux так, чтобы собрать крупные проекты быстрее и стабильнее.
1. Базовая подготовка среды
Перед тем как задумываться об оптимизации, убедитесь, что система полностью обновлена и установлены необходимые инструменты сборки.
pkg update && pkg upgrade -y
pkg install -y build-essential clang cmake git python python-dev
pkg install -y make autoconf automake libtool
Пакет build-essential включает gcc, g++ и make, а clang часто работает быстрее на ARM‑процессорах.
2. Использование всех ядер процессора
Большинство сборочных систем поддерживают параллельный запуск задач. Для make используйте опцию -j с числом, равным количеству доступных ядер.
# Узнать количество ядер
nproc=$(nproc)
# Запуск сборки
make -j$(nproc)
Если проект использует ninja, аналогичная команда выглядит так:
ninja -j$(nproc)
3. Кеширование компиляций с ccache
Инструмент ccache хранит результаты предыдущих компиляций и позволяет повторно использовать их при неизменных исходных файлах.
pkg install -y ccache
# Добавляем путь к ccache в переменную окружения
export PATH="$HOME/.local/bin:$PATH"
export CC='ccache gcc'
export CXX='ccache g++'
# Проверьте статистику
ccache -s
Для проектов, собираемых через cmake, укажите компиляторы в командной строке:
cmake -DCMAKE_C_COMPILER=ccache\ gcc -DCMAKE_CXX_COMPILER=ccache\ g++ ..
4. Управление оперативной памятью и swap
На мобильных устройствах RAM часто ограничена. Добавление swap‑файла помогает избежать «out of memory» во время больших сборок.
# Создаём swap‑файл 512 МБ
dd if=/dev/zero of=$HOME/swapfile bs=1M count=512
chmod 600 $HOME/swapfile
mkswap $HOME/swapfile
swapon $HOME/swapfile
# Проверка
free -h
Не забывайте отключать swap после завершения работы, чтобы не изнашивать флеш‑память:
swapoff $HOME/swapfile
rm $HOME/swapfile
5. Использование внешних накопителей
Сборка в каталоге на внутренней памяти может быть медленной из‑за ограниченной скорости eMMC. Переместите проект на SD‑карту или USB‑накопитель (OTG).
# Предварительно разрешите доступ к внешнему хранилищу
termux-setup-storage
# Смонтировать SD‑карту (пример пути) и перейти в неё
cd /storage/XXXX-XXXX/termux_projects/myproject
Обратите внимание, что файловая система FAT32/exFAT не поддерживает права доступа, поэтому для проектов, требующих символических ссылок, лучше использовать ext4 на отдельном образе.
6. Профилирование и диагностика узких мест
Инструменты perf и strace работают в Termux и позволяют понять, где именно «тормозит» сборка.
pkg install -y perf strace
# Пример профилирования make
perf stat -d make -j$(nproc)
# Отслеживание системных вызовов
strace -c make
Полученные метрики помогут решить, стоит ли увеличить количество потоков, добавить swap или оптимизировать код.
7. Автоматизация с помощью скриптов и wake‑lock
Чтобы сборка не прерывалась при переходе устройства в спящий режим, используйте termux-wake-lock:
# В начале скрипта
termux-wake-lock
# Ваши команды сборки
make -j$(nproc)
# По завершении
termux-wake-unlock
Сохраните скрипт в ~/bin/build.sh и сделайте исполняемым: chmod +x ~/bin/build.sh.
8. Пример полного «пакетного» скрипта
#!/data/data/com.termux/files/usr/bin/bash
# Обновление пакетов
pkg update && pkg upgrade -y
# Установка необходимых инструментов (если ещё не установлены)
pkg install -y build-essential clang cmake git ccache make ninja termux-api
# Настройка ccache
export CC='ccache gcc'
export CXX='ccache g++'
ccache -M 5G # Установить лимит кэша 5 ГБ
# Создание и активация swap (512 МБ)
if [ ! -f $HOME/swapfile ]; then
dd if=/dev/zero of=$HOME/swapfile bs=1M count=512
chmod 600 $HOME/swapfile
mkswap $HOME/swapfile
fi
swapon $HOME/swapfile
# Не дать устройству спать
termux-wake-lock
# Переходим в директорию проекта (пример)
cd $HOME/termux_projects/myproject
# Сборка
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
# Отключаем wake‑lock и swap
termux-wake-unlock
swapoff $HOME/swapfile
rm $HOME/swapfile
Запуск такого скрипта позволит собрать проект «из коробки», используя все доступные оптимизации.
Заключение
Оптимизация Termux для компиляции — это сочетание правильного выбора инструментов, эффективного использования ресурсов процессора и памяти, а также автоматизации повторяющихся действий. Применяя описанные приёмы, вы сможете собрать крупные проекты в несколько раз быстрее, не рискуя перегрузить устройство.
Если вам требуется более глубокая настройка окружения, разработка кастомных скриптов или консультация по миграции проектов в Android‑среду, команда RybinskLab готова помочь. Мы предоставляем услуги по оптимизации сборочных систем, настройке CI/CD в Termux и обучению персонала. Свяжитесь с нами, чтобы вывести ваш мобильный рабочий процесс на новый уровень.