Типография «Новый формат»
Заметка «0. Программирование на телефоне-android-e?»
Тип: Заметка
Раздел: ИИ-творчество
Автор:
Оценка: 5 +5
Баллы: 2 +2
Читатели: 6 +3
Дата:
Предисловие:
Это — частично моё творчество + нарезки из генераций Alice AI.
Хороший пример использования нейронок по делу, а не для спамоизвержений :)

0. Программирование на телефоне-android-e?

## Эмуляторы терминала

Современый телефон-android — это маленький компьютер, с процессором, памятью, монитором и клавиатурой.
В него закачаны на заводе различные утилиты и библиотеки на C и Android...
При этом в нём нет доступа к командной строке, к запуску бинарников  и т.д.—
Идеология Android по своей сути превращает телефон в нанотехнологическую погремушку, с целью выкачиания денег и трафика из владельца телефона.
> Делается так ради «безопасности» этого владельца, чтобы он случайно не разбогател, что вредно для здоровья.

При этом телефон работает как компьютер – запускает программы, выходит в интернет, производит манипуляции в памяти и управляет устройствами – клавиатурой, экраном, динамиком и пр.
Только владельцу телефона доступ к этим процессам закрыт...
Или не закрыт?

Писать и запускать программы на телефоне-android-е всё–же можно, но для этого придётся скачивать и устанавливать приложения, которые дадут ограниченные возможности использования командной строки Llinux и изолированной области памяти телефона (sendbox).

Самое универсальное из таких приложений – это Termux,  эмулятор окружения Linux  для  Android-ов.
Также существуют эмуляторы командной строки, навроде Script Shell Editor, и приложения для разных языков программироввания со встроенным доступом к эмулятору терминала (PyDroid, CxxDroid, LuaDroid и др.)

Поэтому, все проблемы Android, можно частично решить только по–андроидски: находить приложения для обхода всяких «безопасностей» и скачивать их на телефон.
При желании, можно создать в памяти телефона довольно мощную странную экосистему из приложений для программироаания offline, но к сожалению, телефон от этого полноценным компьютером так и не станет.

---

## Проблемы, с которыми столкнётся человек, желающий программировать на Android‑смартфоне.

### 1. Ограничения интерфейса и ввода

* **Маленький экран.** На дисплее смартфона сложно разместить одновременно: редактор кода, терминал, документацию, предварительный просмотр результата (например, веб‑страницы).
* **Виртуальная клавиатура.** Занимает значительную часть экрана, мешает просмотру кода. Физическая клавиатура недоступна без подключения внешних устройств.
* **Неудобство навигации.** Сложно работать с длинными файлами, быстро перемещаться по коду, выделять фрагменты, использовать сочетания клавиш.
* **Точность ввода.** Сенсорный ввод менее точен, чем работа с мышью и клавиатурой — выше вероятность опечаток, случайного удаления строк.

### 2. Проблемы производительности

* **Ограниченные ресурсы.** Даже флагманские смартфоны уступают ПК по:
    * мощности процессора;
    * объёму оперативной памяти;
    * скорости дисковой подсистемы.
* **Медленная компиляция.** Сборка проектов (особенно на C++, Java, Kotlin) занимает больше времени.
* **Тормоза при работе с IDE.** Полноценные среды разработки (Android Studio, IntelliJ IDEA) на телефоне будут работать крайне медленно или не запустятся вовсе.
* **Нагрев и троттлинг.** При длительной нагрузке процессор снижает частоту, что ещё сильнее замедляет работу.
* **Расход батареи.** Интенсивные задачи (компиляция, эмуляция) быстро разряжают аккумулятор.

### 3. Отсутствие полноценной среды разработки

* **Упрощённые редакторы.** Мобильные приложения для программирования (Acode, Dcoder, Termux) — это облегчённые редакторы с ограниченной функциональностью. В них нет:
    * продвинутых инструментов рефакторинга;
    * глубокой интеграции с системами контроля версий (Git);
    * полноценной поддержки автодополнения кода (IntelliSense);
    * встроенных отладчиков.
* **Проблемы с зависимостями.** Установка библиотек и фреймворков может быть затруднена из‑за несовместимости с ARM‑архитектурой или отсутствия готовых пакетов.
* **Эмуляция устройств.** Запуск эмуляторов Android или других виртуальных машин на телефоне практически невозможен.

### 4. Сложности с инструментами и экосистемой

* **Отсутствие стандартных утилит.** Многие инструменты командной строки (make, cmake, gcc, node, pip) либо отсутствуют, либо требуют сложной настройки.
* **Ограниченная поддержка языков.** Не все языки программирования и их реализации доступны на Android. Например:
    * полноценная поддержка Python требует установки Termux и настройки окружения;
    * работа с C/C++ требует кросс‑компиляции;
    * .NET и многие десктопные фреймворки недоступны.
* **Проблемы совместимости.** Пакеты, собранные для x86/x64, не работают на ARM‑процессорах смартфонов.

### 5. Проблемы с файлами и организацией работы

* **Файловая система.** Доступ к файлам на Android ограничен, особенно в новых версиях ОС. Работа с проектами в разных папках может быть неудобной.
* **Резервное копирование.** Сложно организовать надёжное хранение кода и его синхронизацию между устройствами.
* **Совместная работа.** Инструменты вроде Git работают не так гладко, как на ПК. Выполнение команд `pull`, `push`, `merge` может быть затруднено.

### 6. Специфические ограничения Android

* **Многозадачность.** Переключение между приложениями (редактор, браузер с документацией, терминал) менее удобно, чем на ПК с несколькими мониторами.
* **Фоновые процессы.** Система может принудительно закрывать приложения для экономии ресурсов, прерывая компиляцию или выполнение скриптов.
* **Обновления ОС.** Изменения в политике безопасности Android могут сломать работу сторонних инструментов (например, Termux).

### 7. Психологический дискомфорт

* **Усталость.** Длительная работа с маленьким экраном и виртуальной клавиатурой вызывает напряжение глаз и рук.
* **Снижение продуктивности.** Из‑за технических ограничений сложнее сосредоточиться на решении задач.
* **Фрустрация.** Частые сбои, медленная работа и отсутствие привычных инструментов демотивируют.

---

### Краткий итог

Программирование на Android‑телефоне **возможно** для:
* изучения синтаксиса языков;
* решения небольших алгоритмических задач;
* правки конфигурационных файлов;
* быстрого тестирования идей.

Но оно **не подходит** для:
* разработки крупных проектов;
* профессиональной коммерческой разработки;
* работы с графическими интерфейсами;
* задач, требующих высокой производительности.

**Рекомендация:** смартфон лучше использовать как вспомогательный инструмент (для чтения документации, проверки уведомлений из Git, изучения теории), а основную работу выполнять на ПК или ноутбуке.

---

## Так что же делать?

Скачивать приложения, учиться ими пользоваться и наплёвывать на неразрешимые проблемы, потому что компьютера, как не было, так и не будет, а практика показала, что человек может **привыкнуть** к любым проблемам и ограничениям :(

Привыкнуть придёться к маленькому экрану, к «неточной» виртуальной клавиатуре и медлительности компиляции программ.
Привыкнуть придётся к приложениям и утилитам, потому что выбор не такой уж и большой.
Но некоторые проблемы вполне можно решить или упростить, применив творческий подход к организации работы.
А «психологический дискомфорт» логично заменить на позитивный творческий настрой и философское отношение ко всяким сбоям и ограничениям.
Так что, всё не так уж и плохо, как могло бы быть :)

---

Прежде чем скачивать в телефон какие—то приложения, неплохо было бы разобраться, как они обходят запреты Android, делая возможным невозможное.

## Как Termux и другие эмуляторы запускают исполняемые файлы на Android

Основная проблема программирования на телефоне, в том что Android запрещает запускать программы в доступной пользователю области памяти телефона (`/storage/emulated/0/`).
В этой области можно только читать уже существующие файлы или записывать новые, но попытки дать файлам права на исполнение, Android проигнорирует, и эти файлы невозможно будет исполнить.—
Так как же вообще может работать телефон, в котором нельзя запустить ни одной программы?

**ELF** (Executable and Linkable Format) — стандартный формат исполняемых файлов в Linux.
Android основан на ядре Linux, поэтому в теории может всё–таки запускать ELF‑файлы — но с рядом ограничений.
Для начала, нужно скачать Termuх или другое приложение с эмулятором терминала, чтобы в телефоне появилась **доступная пользователю изолированная область памяти** (*sendbox*), в которой приложение будет запускать эти файлы.

### Основные механизмы запуска

1. **Создание собственного окруженя Linux**
  * **Termux** создаёт пользовательское окружение Linux внутри Android: устанавливает пакетный менеджер, библиотеки, утилиты.
  * **Termux** размещает своё окружение в отдельной директории (обычно `/data/data/com.termux/files/`), изолируя его от основной системы Android.
  * **Termux** не использует виртуализацию или полную эмуляцию ОС — а запускает бинарные файлы напрямую на ядре Android, если архитектура процессора совпадает (ARM, ARM64, x86, x86_64).
    > Если файл написан для другой архитектураы процессора, то нужен эмулятор (например, QEMU), который замедляет выполнение.

2. **Проверка прав доступа**
  Android применяет строгие правила доступа к файлам:
  * Файл должен иметь флаг исполняемости (`+x`). В Termux это устанавливается командой `chmod +x файл`.
  * Исполняемый файл должен находиться в каталоге, откуда разрешено выполнение (системные разделы Android обычно запрещают это). Termux работает в своём каталоге, где выполнение разрешено.

3. **Динамический линкер и подключение библиотек**
  Программа — это набор инструкций для процессора. Но часто она не может работать сама по себе: ей нужны дополнительные готовые блоки кода (библиотеки `.so`), которые выполняют типовые задачи: например, вывод текста на экран, работа с сетью, математические вычисления и т. д.
  Есть два подхода к тому, как программа получает доступ к библиотекам:
      * **Статическая компоновка:** все нужные библиотеки «вшиваются» в программу при её создании. Файл получается большим, но автономным — ему ничего не нужно дополнительно.
      * **Динамическая компоновка:** программа не содержит библиотек внутри себя. Вместо этого она хранит лишь список того, *какие* библиотеки ей понадобятся. А сами библиотеки подключаются уже в момент запуска программы.

  **Динамический линкер** — это специальная небольшая программа (в Linux обычно называется `ld-linux.so` или `ld.so`), которая:
      1. Запускается **перед** запуском исполняемого файла.
      2. Читает список библиотек, от которых зависит программа.
      3. Находит эти библиотеки в системе из путей поиска библиотек в Termux (переменная `LD_LIBRARY_PATH). Обычно они лежат в папках `/lib`, `/usr/lib` и т. п.
      4. Загружает их в оперативную память.
      5. «Связывает» вызовы функций из программы с реальным кодом в библиотеках — чтобы, когда программа захочет, например, вывести текст, она точно знала, *где* в памяти находится нужная функция.
      6. Передаёт управление основной программе.
        > Если ELF‑файл скомпилирован для стандартной Linux‑системы, он может не запуститься из‑за несовместимости библиотек.

4. **Исполнение**:
  * ядро Android запускает процесс;
  * код выполняется на процессоре напрямую (если архитектура совпадает);
  * системные вызовы перехватываются ядром Linux (Android).
Обсуждение
07:22
Борис
Читая автора, вспомнил вчерась просмотренный фильм «Мамонты»…
Книга автора
Маятник времени 
 Автор: Наталья Тимофеева