Недавно в меру потребности стал использовать Termux - эмулятор терминала для Android с очень богатыми возможностями. Для него поддерживаются репозитории с множеством специализированных deb-пакетов с возможностью установки, аналогичной дистрибутивам GNU/Linux. Средства разработки представлены достаточно широко, поэтому появилось закономерное желание проверить работоспособность транслятора Восток в таком не совсем обычном окружении.
Основная часть функционала заработала сразу. Трансляция в высокоуровневые языки, естественно, работает прекрасно, но кроме того сразу заработали сборка и запуск двоичного кода через C, а также запуск JavaScript кода. Сборка JVM-байткода осуществляется через ecj от проекта Eclipse, что требует дополнительных параметров транслятору Восток. А вот запустить такой код сложней, так как требуется либо установка JRE из сторонних источников, либо предварительное преобразование в родной для Android dex-формат, что не было предусмотрено в Востоке.
Из мелких проблем можно отметить недоступность каталога /tmp/
, что привело к
обобщению
для работы с каталогом для временных файлов
Но наибольший интерес представляет возможность сборки APK приложений - наиболее естественный исполняемый формат
на Android. Оригинальная SDK ужасно раздута, но как выяснилось, минимальный набор инструментов для сборки
APK не так велик и уже перенесён в виде deb-пакетов на Termux. Оставалось только корректно задействовать
их в Востоке, что и было проделано:
youtube
Для сборки и корректной работы сборщика Android приложений Востока в среде Termux требуется выполнить несколько команд:
apt install git clang ecj dx aapt apksigner
git clone --depth 1 https://github.com/vostok-space/vostok.git
cd vostok
./init.sh
result/bs-ost run make.Build -infr . -m source
mkdir -p $HOME/.android
cp test/debug-key/key.pk8 $HOME/.android/debug-key.pk8
cp test/debug-key/cert.pem $HOME/.android/debug-cert.pem
result/ost to-bin '
AndroidBuild.SetKeyDefault("'$HOME'/.android/debug-key.pk8", "'$HOME'/.android/debug-cert.pem");
AndroidBuild.SetSdkDefault("");
AndroidBuild.SetBaseClassPathDefault("'$PREFIX'/share/java/android-24.jar");
AndroidBuild.SetJavacDefault("ecj -nowarn");
AndroidBuild.Go' \
result/osa -m source/blankC -m source/blankJs -m source/blankOberon -infr . -m source
Вместе с самим Termux дополнительные пакеты занимают около половины гигабайта на устройстве.
Половину этого места занимает clang, который был нужен для компиляции сборщика, но не для
его дальнейшей работы, поэтому в случае потребности может быть удалён:
apt remove --autoremove clang
Сборка и запуск примера:
result/osa open Rocket.Fly -activity Rocket -infr . -m example/android
Сборка работает как на новых Android-устройствах, так и на изрядно устаревших, к примеру, всё было протестировано в том числе на Samsung Galaxy S4 mini(2013, 1.5 GiB ОЗУ). Но нужно учитывать, что Termux поддерживается начиная с 7-го Android, поэтому для таких устройств необходимы сторонние прошивки, так как производители обычно не заморачиваются с длительной поддержкой.
Сборщик APK-приложений на Android может быть удобен для тех, кто не использует GNU/Linux и хочет избежать настройки сборочного окружения на Windows, что может быть вполне приемлемым для небольших доделок. А на планшетах или телефонах в режиме DEX может служить частью полноценной системы разработчиков, которые не любят тяжеловесные IDE. Экзотических случаев, вроде бомжей-разработчиков тоже нельзя исключать.
Обновление. На 2024 год запуск собранных apk непосредственно на устройстве не работает по неясным причинам, вызванных изменениями в termux.
Комментариев нет:
Отправить комментарий