Страницы

воскресенье, 13 июня 2021 г.

Сборка APK на Android-устройстве

Недавно в меру потребности стал использовать 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.

Комментариев нет:

Отправить комментарий

Обработка ошибок

Тема корректной обработки ошибок в программе является довольно сложным вопросом в программировании. Отчасти от того, что и она сама являет...