Termux – это полноценный эмулятор терминала для Android, который предоставляет доступ к среде Linux без необходимости рута. Благодаря широкому набору пакетов и возможности использовать компиляторы gcc, clang и кросс‑компиляторы NDK, разработчики могут писать и запускать низкоуровневый код непосредственно на мобильном устройстве. В этой статье мы рассмотрим, как построить Android‑приложение, использующее нативный Linux‑код, управляемый через Termux.
Установка Termux и базовая настройка
Для начала требуется установить Termux из официального репозитория F-Droid (рекомендовано) или Google Play. После установки выполните базовую инициализацию:
pkg update && pkg upgrade -y
Обновление репозиториев гарантирует, что вы получите последние версии пакетов.
Подготовка среды разработки
Termux поддерживает широкий набор утилит, необходимых для компиляции и сборки проектов. Установим основные инструменты:
git– работа с репозиториями.make– система сборки.gccиclang– компиляторы C/C++.ndk-sysroot– кросс‑компилятор для Android (через пакетtermux-ndk).gdb– отладчик.straceиperf– инструменты профилирования.
pkg install git make clang ndk-sysroot gdb strace perf
Для работы с Java‑частью проекта понадобится openjdk‑17 и Gradle:
pkg install openjdk-17 gradle
Компиляция нативного кода в Termux
Termux по умолчанию использует собственный набор заголовков и библиотек, совместимых с архитектурой устройства (ARM64, ARMv7, x86_64). Если требуется собрать код под конкретную целевую платформу Android, следует использовать кросс‑компилятор из NDK:
# Пример компиляции простого C‑файла под Android 21 (ARM64)
export API=21
export ARCH=arm64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
$TOOLCHAIN/bin/aarch64-linux-android${API}-clang -o libhello.so hello.c -shared -fPIC
Для большинства задач достаточно собрать бинарник напрямую в Termux, используя clang:
clang -Wall -O2 -o hello hello.c
Интеграция с Android‑приложением
Существует несколько способов вызвать нативный код из Android‑приложения:
- Через JNI – загрузка скомпилированных
.soбиблиотек в Java/Kotlin коде. - С помощью Termux:API – выполнение скриптов или бинарных файлов через интент
com.termux.RUN_COMMAND. - Через Termux:Widget – добавление ярлыков для запуска скриптов.
Для простоты рассмотрим вариант Termux:API. В Android‑модуле добавляем зависимость:
implementation "com.termux:termux-api:0.47.0"
Далее вызываем нативный бинарник:
Intent intent = new Intent("com.termux.RUN_COMMAND");
intent.putExtra("com.termux.RUN_COMMAND_PATH", "/data/data/com.termux/files/home/hello");
intent.putExtra("com.termux.RUN_COMMAND_ARGUMENTS", new String[]{"arg1", "arg2"});
intent.putExtra("com.termux.RUN_COMMAND_BACKGROUND", true);
startActivity(intent);
Бинарный файл hello должен быть помещён в домашнюю директорию Termux и иметь права на исполнение (chmod +x hello).
Пример проекта: простое C‑приложение
Создадим небольшую программу, выводящую системную информацию:
#include
#include
int main(int argc, char *argv[]) {
printf("PID: %d
", getpid());
printf("Аргументы: ");
for (int i = 1; i < argc; ++i) {
printf("%s ", argv[i]);
}
printf("
");
return 0;
}
Скомпилируем и проверим:
clang -Wall -O2 -o sysinfo sysinfo.c
chmod +x sysinfo
./sysinfo test1 test2
Получим вывод:
PID: 12345
Аргументы: test1 test2
Этот бинарник можно включить в Android‑проект через Termux:API, как описано выше.
Отладка и профилирование
Для отладки нативного кода в Termux можно воспользоваться gdb:
gdb ./sysinfo
Для анализа системных вызовов используйте strace:
strace -o trace.log ./sysinfo arg
Для измерения производительности подойдёт perf:
perf stat ./sysinfo
Все эти инструменты работают без необходимости рутовых прав, так как Termux запускает их в собственном пользовательском пространстве.
Безопасность и ограничения
Termux работает в изолированном контейнере, ограниченном правами обычного пользователя Android. Это накладывает следующие ограничения:
- Доступ к файловой системе ограничен только к каталогу
/data/data/com.termux/files/homeи общим хранилищем (при наличии разрешенияREAD_EXTERNAL_STORAGE). - Нельзя напрямую управлять другими приложениями без использования
Intent‑ов. - Для работы с привилегированными функциями (например, изменение системных настроек) требуется root‑доступ, но большинство задач разработки обходятся без него.
Всегда проверяйте вводимые пользователем данные и ограничивайте возможности запуска произвольных команд, если ваш терминальный скрипт используется в публичном приложении.
Продвинутые возможности: Rust, Go, Python
Termux поддерживает современные языки, позволяя писать нативные модули на Rust или Go, а также использовать Python для скриптов‑обёрток.
- Установка Rust:
pkg install rust. Затемcargo build --releaseсоздаст статически линкованный бинарник, совместимый с Android. - Go‑пакет:
pkg install golang. Пример компиляции:go build -o myapp main.go. - Python 3:
pkg install python. Позволяет писать быстрые прототипы и взаимодействовать с C‑модулями черезcffiилиctypes.
Эти инструменты позволяют создавать гибридные решения, где тяжёлые вычисления реализованы на Rust/Go, а бизнес‑логика – на Kotlin/Java.
Разворачивание и публикация
Для упрощения установки нативных бинарников в конечных устройствах рекомендуется использовать пакетный менеджер Termux. Создайте собственный пакет:
# Инициализируем структуру пакета
termux-create-package myapp
# Помещаем собранный бинарник в директорию src
mv sysinfo src/
# Редактируем build.sh и package.sh при необходимости
# Сборка пакета
./build.sh
# Установка локально
pkg install ./myapp_1.0_all.deb
После публикации пакета в собственный репозиторий пользователи смогут устанавливать его одной командой pkg install myapp. Альтернативно можно включить бинарник в assets Android‑приложения и копировать его в домашнюю директорию Termux при первом запуске.
Заключение
Termux открывает новые возможности для Android‑разработчиков, позволяя писать и отлаживать низкоуровневый Linux‑код прямо на мобильном устройстве. С помощью кросс‑компиляторов NDK, интеграции через JNI или Termux:API, а также мощных отладочных инструментов, можно создавать гибкие и производительные решения без необходимости отдельного ПК. При правильной организации сборочного процесса и учёте ограничений безопасности, Termux становится надёжным инструментом для прототипирования, тестирования и даже выпуска продакшн‑приложений.
Профессиональные IT‑услуги в Рыбинске оказывает компания RybinskLab. Мы помогаем внедрять современные мобильные решения, оптимизировать процессы разработки и поддерживать ваш бизнес на уровне передовых технологий.