- PVSM.RU - https://www.pvsm.ru -
Люди которые пишут код на PHP сделают всё чтобы не переходить на другие языки. Да, я в курсе что раньше на Хабре уже был способ [1] писать Android-приложения на PHP, но было принято решение адаптировать его под более быстрый и совместимый с Java JPHP.
Я предполагаю, что у вас может возникнуть вопрос. А что за JPHP? Ответ есть тут-же, на Хабре:
Ну, а мы продолжим. За те 4 года которые прошли с момента написания этих постов о JPHP этот язык поменялся в лучшую сторону. К примеру появился собственный пакетный менеджер jppm [4] про который нам тоже сегодня придётся поговорить.
Всё началось с того, что моему другу пришла идея создавать приложения для Android на JPHP. Я дал почитать ему тот пост, про который мы говорили в начале, но ему этот способ не понравился так как там используется обычный PHP. Ну, а мы разработчики, которые пишут на никому не известном языке JPHP решили сделать всё сами.
Полистав интернет, мы тогда не нашли другого выхода, кроме как использовать JavaFXPorts. Да и сам создатель этого языка хотел использовать именно его в качестве GUI движка для JPHP за 2 года, так ничего и не сделав.
Как говорится — «Кто кроме тебя»?.. Я бросился глобально изучать работу языка JPHP.
Первые несколько недель были неудачными. Я уже написал автоматическую генерацию build скрипта для gradle и всё бы хорошо, apk собирался, но при запуске выдавалась неизвестная мне на то время ошибка. Я сразу понял что она из-за JPHP но не видел я прежде такую. Сейчас я могу сказать точно что эта ошибка была из за сгенерированного байт-кода. DalvikVM банально не мог запустить байт-код сгенерированный для JVM. Именно это стало огромным препятствием. Так как PHP файлы в JPHP приложениях не компилируются вовсе. Был вариант с файлами phb, но это не решало нашу задачу вовсе. Единственным способом стало написание собственного компилятора, что действительно сработало, но принесло ряд ограничений связанных с include и eval, спасибо, Dalvik.
После многих проб и ошибок я всё же сумел сделать самую первую версию. Её исходники находятся тут [5]. Эта версия была не очень быстрая. Да и использовать JavaFX на Android это мазахизм.
По этому я принял решение переписать всё с чистого листа. Принял я это решение относительно недавно. По этому библиотека для JPHP немного сыровата. Но работает.
Всё начинается с того что jppm собирает все ваши исходники и зависимости в один jar файл. После чего компилируя в них все файлы php
в class
файлы. После чего полученный jar файл добавляется в зависимости к gradle. А он уже в свою очередь компилирует эти class файлы в dex. В этом весь секрет.
С запуском приложения всё сложней. В AndroidManifest.xml
изначально всего один BootstrapActivity
который загружает весь JPHP. После загрузки этот BootstrapActivity
можно будет изменять из JPHP. Для Activity
я создал одноимённые классы.
<?
use phpandroidappApplication;
$bootstrapActivity = Application::getMainActivity();
С помощью этого кода можно получить тот самый BootstrapActivity
из которого был загружен JPHP.
Я думаю вам уже стало понятно о работе загрузчика JPHP.
К примеру для того чтобы создать самый примитивный кликер нужно использовать вот этот код :
<?
use phpandroidappApplication;
use phpandroidwidgetButton;
$activity = Application::getMainActivity(); // Получаем BootstrapActivity
$activity->setTitle("test"); // Добавляем заголовок
$activity->setContentView($button = new Button($activity)); // Создаём и добавляем кнопку
$button->text = "Hello from JPHP!"; // Ну тут всё понятно
$button->on("click", function () use ($button) { // При нажатии на кнопку ...
$GLOBALS['clicks']++;
$b->text = "Clicks: " . $GLOBALS['clicks'];
});
В итоге мы получили простое приложение с кнопкой:
Я не думаю что мой проект кому либо будет интересен. Так как он не описывает пока что и 10% Android API. Да и написание приложений для Android на PHP не канон. Но думаю проект найдёт свою аудиторию.
→ Github проекта [6]
→ Github JPHP [7]
Автор: MWGuy
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android-development/294689
Ссылки в тексте:
[1] способ: https://habr.com/post/106075/
[2] JPHP — Новый движок php для Java VM + JIT: https://habr.com/post/216651/
[3] JPHP — Как он работает. История создания: https://habr.com/post/218021/
[4] jppm: https://github.com/jphp-group/jphp/tree/master/packager
[5] тут: https://github.com/VenityStudio/android
[6] Github проекта: https://github.com/VenityStudio/jphp-android
[7] Github JPHP: https://github.com/jphp-group
[8] Источник: https://habr.com/post/425223/?utm_campaign=425223
Нажмите здесь для печати.