Приветствую читателей! В этой статье я расскажу о том, как можно, имея android телефон, писать программы. Говорю сразу — root права не нужны.

Что нам понадобится?


Первое, что нам понадобится — андроид телефон со установленным на него приложением Termux (есть в Google Play). Для полноценной работы с терминалом, нам нужно достаточно памяти. У меня с десятками установленных пакетов приложение занимает 1.5 ГБ памяти.
Так же, для комфортного кодинга желательно, чтобы телефон был с поддержкой OTG, и у вас была клавиатура с подключением по USB, чтобы писать код на клавиатуре (куда удобнее). Если уж нет этого, то качаем клавиатуру Hacker's Keyboard. В ней есть клавиша Ctrl, что нам важно.



Почему именно Termux?


Termux имеет в арсенале достаточно пакетов для работы с языками программирования: C/C++, Python, Golang, PHP, Lua.
Так же присутствуют базы данных, я знаю только о mariadb и postgresql.

Начало


image
При каждом запуске приложения мы видим приветствие, в котором указаны основные команды для работы с терминалом:
  • pkg search — команда для поиска пакетов. Пример: pkg search vim
  • pkg install — команда для установки пакета. Пример: pkg install vim


Для кодинга нам понадобится текстовой редактор. Здесь есть разные варианты, я выбирал Vim и вкратце расскажу, как с ним работать.
Установка vim:
$ pkg install vim

Для примера работы с vim напишем «Hello World» на С.
$ vim main.c

После этого запустится Vim. Чтобы начать писать код, нужно нажать на клавишу «i».
Пишем код:
#include <stdio.h>

int main()
{
       printf("Hello World!\n");
       return 0;
}

После этого нажимаем на клавишу «Esc», ставим двоеточие и пишем wq (":wq"). Это сохранит наш файл и изменения в нём (w — write) и закроет его (q — quit).

Важно знать!

w — сохранить изменения в файле
wa — сохранить изменения во всех файлах
q — закрыть файл
qa — закрыть все файлы
wq — сохранить изменения и закрыть файл

Теперь нам нужно скомпилировать этот код. Для начала установим компилятор:
$ pkg install gcc

Далее пишем следуюющее:
$ gcc -Wall main.c -o program

main.c — файл с нашим кодом
program — наша програмка.

Теперь можем запустить нашу програмку и посмотреть, работает ли она:
$ ./program

или
$ sh program

Результат:
Hello World!


Конец


Эта была вводная статья по программированию на телефоне. Пишите, пожалуйста, в комментариях, нужно ли продолжение: работа с базами данных, примеры кода и их запуска на других ЯП, работа с самым терминалом и так далее.

Комментарии (35)


  1. Pro-invader
    03.12.2017 16:34

    Сейчас напишут, зачем писать на телефоне, это неудобно и т.д.
    Продолжайте, конечно!


    1. SenDu Автор
      03.12.2017 17:23

      Спасибо! Это и правда не удобно, но если нет пк рядом, то почему бы и нет? Всякое в жизни бывает.


      1. david_mz
        03.12.2017 21:20

        На телефоне неудобно, но вот на хромбуках (клавиатура, экран, стоит копейки) этот termux даёт практически полноценный линукс для разработки и это круто.


        1. pav5000
          04.12.2017 16:10

          На хромбук же вроде можно поставить Линукс нативно? Или ChromeOS очень удобная?


  1. dmial
    03.12.2017 16:35

    Зачем писать на телефоне? Ведь это и неудобно, и т.д.!


    1. Ugrum
      03.12.2017 17:25

      Это и правда не удобно, но если нет пк рядом, то почему бы и нет? Всякое в жизни бывает.


      1. ru_vlad
        03.12.2017 17:56

        рекурсия )
        а из нее выход будет? /sarcazm


  1. Sultansoy
    03.12.2017 20:37

    Я иногда по пути на работу пишу на мобилке, используя decoder. Достаточно удобно, чтобы проверять мелкие нюансы. Раньше на скучных парах, когда не давали сидеть за ноутбуком, тоже писал код на телефоне на CppDroid. На безрыбии, как говорится, и рак рыба.


  1. kovserg
    03.12.2017 21:17

    Тоже пробывал использовать телефон как компьютер. Оказалось что одновременно подключить BT клавиатуру и BT мышь андройду не подсилу. Работает только по очереди. По SSH для vim и mc достаточно клавиатуры. А вот всякие IDE без мыши очень печально выглядят.


    1. telegamochka
      04.12.2017 13:53

      Есть синезубые мини-клавиатуры со встроенным тачпадом. Вполне удобное решение.


  1. asergrisa
    03.12.2017 21:23

    Не советую использовать `pkg`, это всего лишь обертка над `apt` и `dpkg`, используйте лучше их.


  1. SenDu Автор
    03.12.2017 21:25

    У меня клавиатура и мышка подключаются через один приёмник, и это работает. А вот через ВТ да, не получится.


    1. kovserg
      03.12.2017 22:02

      На Xiaomi-mi4 они подключаются одновременно, но работают очень забавно. Видно как идёт борьба за то кто главный. То мышь побеждает, то клавиатура. Работать так всё равно не возможно. На других телефонах вообще только строго по очереди либо мышь либо клавиатура. При этом в ubuntu и в винде такое подключение работает как часы, а в андройде это просто позор и ужас.


      1. SenDu Автор
        03.12.2017 22:15

        У меня Xiaomi Redmi Note 3 Pro. Идеально работает. Возможно проблемы в самом комплекте.


        1. kovserg
          04.12.2017 02:53

          Что-то мне подсказывает что идеально не работает
          Вот что пишется в лог. (Подключена BT клава и пытается подключить мышь)

          D/BluetoothAdapterProperties( 2279): Before Update: mProfilesConnecting = 0, mProfilesConnected = 1, mProfilesDisconnecting = 0
          D/BluetoothAdapterProperties( 2279): Return false: mProfilesConnecting = 1, mProfilesConnected = 1, mProfilesDisconnecting = 0
          

          После чего пишет еще много чего и даже общается с мышью, но потом:
          I/[BT][HID][JNI]( 2279): MBTEVT_HID_HOST_CONNECT_FAIL
          

          Возможно найдутся те кто знают java и расскажут мне где я не прав, но меня лично смущают такие строки:
          class AdapterProperties {
          ...
              private boolean updateCountersAndCheckForConnectionStateChange(int state, int prevState) {
          ...
                  switch (state) {
                      case BluetoothProfile.STATE_CONNECTING:
                          mProfilesConnecting++;
                          return (mProfilesConnected == 0 && mProfilesConnecting == 1);
          ...
          

          Если уже кто-то подключен mProfilesConnected=1 то всегда будет return false или я чего-то не понимаю?


        1. kovserg
          04.12.2017 03:51

          Комплект будет работать. Т.к. оно одно устройство. А мышь и клавиатура отдельно как два устройства — нет.


  1. digam
    03.12.2017 22:15

    Пишите дальше, пожалуйста! Очень интересно.


    1. SenDu Автор
      03.12.2017 22:15

      Благодарю. В скором времени допишу продолжение.


  1. Glycosylase
    04.12.2017 00:42

    О, статья о моем любимом приложении! Пишите еще! И было бы круто, если бы написали о том, как коннектиться под Termux под ssh к стационарной машине. Для меня это пока только мечта.


    1. SenDu Автор
      04.12.2017 00:43

      Спасибо. Хорошо, обязательно напишу об этом.


    1. kloppspb
      04.12.2017 01:10

      Для меня это пока только мечта.

      Это ведь очень просто :)


  1. Bookvarenko
    04.12.2017 09:05

    Интересная статья. Частенько приходится править код игр, чтобы они прилично выглядели и удобно рулились на десктопе и в мобильнике одновременно.


  1. barsuksergey
    04.12.2017 11:53

    Уже на втором подряд андроиде ставлю Termux. Установил Golang и Beego, PHP с composer, Symfony, Vim, open-ssh. Настроил ssh-доступ к домашнему компу. Всё работает стабильно, Go компилится, серверы поднимаются.
    В общем, доступны все плюшки для обдумывания в долгом пути простеньких жизненных задач, накидывания черновиков, подручного интерпретатора при чтении книг.


  1. zabbius
    04.12.2017 13:10

    Не сравнивали с linuxdeploy?


    1. PUNK778
      04.12.2017 16:02

      что там сравнивать? У меня на планшете( экран 8') Debian стоит в чруте. Запускаю через LD+Xserver XSDL+Simple Protocol Player(если звук нужен). Стоит QT Creator(можно Eclipse или NetBeans заюзать или ещё много чего. В репах 50к пакетов.). Всякие termux-ы и aide рядом не стояли. Желательно конечно девайс помощнее.


  1. Crandel
    04.12.2017 13:46

    Не обязательно хакерская клавиатура, гугл тоже удобна, ведь в термуксе можно включить отображение дополнительных клавиш. только F1-12 недоступен, очень не хватает.
    В отпуске без ноута дико захотелось Rust поизучать)


    Скрин

    image


  1. BeppeGrillo
    04.12.2017 13:50

    TerminalIDE не пробовали?


  1. telegamochka
    04.12.2017 13:58

    Когда мне нужно было на мобильнике доработать небольшое игровое приложение, я использовала AIDE. В качестве клавиатуры использовала маленькую bt-клавиатуру со встроенным тачпадом.

    Для работы в дороге с Unity3D портировала на очки Epson Moverio BT-200 VNC-клиент: github.com/YanaArtis/ARtisVNC
    Правда, руки так и не дошли устранить небольшую, но досадную ошибку :(


  1. DmitryLytkin
    04.12.2017 16:02

    Продолжайте!
    Отличное приложение. Не раз выручало, когда нужно было подключиться по ssh к хосту.
    Так же есть полноценная возможность работать с GIT'ом.


  1. andreyorst
    04.12.2017 16:03

    Тоже возникала необходимость в программировании "на ходу". Часто бывало что идея о том, как решить какую-нибудь заковырку с работы, появлялась в голове во время пребывания в общественном транспорте, и записать ее необходимо было, что называется прямо здесь и сейчас, но, стоя в метро, использовать ноутбук, как правило, неудобно.
    Стал искать способ как писать код на телефоне и наткнулся на termux. После того как обнаружил что в термуксе есть и clang и neovim (который я использую на работе как основной редактор уже довольно долгое время) очевидным решением стало перенести свой рабочий конфиг на телефон. Примечательно что работает всё — плагины (некоторым плагинам пришлось подсовывать свои пути к библиотекам, в частности deoplete_clang, из за специфики организации структуры папок внутри фс термукса), автодополнение, переход по тегам и прочие вкусности. В итоге телефон превратился в полноценный инструмент для работы.


    Вопросом было также какой клавиатурой пользоваться, у стандартной нехватает кнопок для комфортного пользования вимом. В термуксе можно включить дополнительный ряд наэкранных кнопок, но тем не менее он неудобен. Остановился на полноразмерном режиме hackers keyboard. К сожалению данная клава особо не разрабатывается, а активных форков я не нашел.


    Под спойлером скриншот неовима с исходным текстом небольшого парсера, который я набросал как раз в метро когда-то пока ехал на работу.


    Скриншот (осторожно, он здоровый)

    image


  1. iLi0ni
    04.12.2017 17:39

    Вот у одного человека были мучения

    Тот кто хоть раз пробовал писать код со стандартной клавы Андроида наверное также как и я испытывал немыслимые судроги, страшные мучения и желание разбить девайс о ближайшее дерево. В итоге я написал свою клавиатуру для кодинга.

    Подробнее о клавиатуре на 4pda
    Может кому пригодится, ежели не клава, так идея


    1. telegamochka
      04.12.2017 18:21

      Идея хорошая :) А почему не купить «железную» карманную bt-клавиатуру?


  1. kovserg
    04.12.2017 19:26

    Потому что карманные не удобны

    Только если такое
    image


    1. Bookvarenko
      04.12.2017 19:39

      Кстати, что там с затеей Октодон? geektimes.ru/company/octodon/blog/286096


      1. kovserg
        04.12.2017 21:32

        Не взлетело