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

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

Разработка Android‑приложений, использующих низкоуровневые Linux‑системы через Termux

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

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

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

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

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

Связаться со мной
Поддержать проект