JPHP Android应用程序

用PHP编写代码的人会尽一切努力不切换到其他语言。 是的,我知道在Habré上较早时已有一种用PHP编写Android应用程序的方法 ,但已决定对其进行调整,以使其更快并与Java JPHP兼容。


徽标


关于JPHP


我想你可能有一个问题。 什么是JPHP? 答案就在哈布雷(Habré)上:



好吧,我们将继续。 自撰写这些有关JPHP的文章以来已经过去了四年,这种语言已经变得越来越好。 例如,有一个我们自己的jppm软件包管理器,我们今天也必须讨论。


一切如何开始


这一切始于我的朋友提出在JPHP上创建Android应用程序的想法。 我给了他一开始我们谈到的帖子,但是他不喜欢这种方法,因为它使用常规的PHP。 好吧,我们使用未知的JPHP语言编写的开发人员决定自己做所有事情。


浏览Internet之后,除了使用JavaFXPorts之外,我们找不到其他任何方法。 这种语言的创建者本人想将其用作JPHP的GUI引擎已有2年之久,而无需做任何事情。


俗话说“谁,但你呢?” ..我急于在全球范围内研究JPHP语言的工作。


前几周没有成功。 我已经为gradle编写了一个自动生成的生成脚本,apk可以正常运行,但是一切都很好,但是当我开始时,当时我不知道一个错误。 我立即意识到她是由于JPHP引起的,但是我以前从未见过这样的人。 现在我可以肯定地说这个错误是由于生成的字节码引起的。 DalvikVM corny无法运行为JVM生成的字节码。 那已经成为一个巨大的障碍。 由于JPHP应用程序中的PHP文件根本没有编译。 phb文件有一个选项,但这根本不能解决我们的问题。 唯一的方法是编写自己的编译器,该方法确实有效,但是带来了与include和eval相关的许多限制,谢谢,Dalvik。


经过多次尝试和错误,我仍然设法制作了第一个版本。 它的来源在这里 。 这个版本不是很快。 是的,在Android上使用JavaFX是一种假象。


因此,我决定从头开始重写所有内容。 我是最近才做出这个决定的。 因此,用于JPHP的库有点潮湿。 但这有效。


如何运作


一切都从jppm开始,将所有源和依赖项收集到一个jar文件中。 然后将所有php文件编译成class文件。 之后,根据gradle添加生成的jar文件。 然后,他将这些类文件编译为dex。 这是整个秘密。


启动应用程序更加复杂。 在AndroidManifest.xml最初只有一个BootstrapActivity可以加载所有JPHP。 加载后,可以从JPHP修改此BootstrapActivity 。 对于Activity我创建了相同名称的类。


 <? use php\android\app\Application; $bootstrapActivity = Application::getMainActivity(); 

使用此代码,您可以获得从中加载JPHP的BootstrapActivity


我认为您已经了解了JPHP加载程序的工作。


一个小例子


例如,为了创建最原始的答题器,您需要使用以下代码:


 <? use php\android\app\Application; use php\android\widget\Button; Application::setMainActivityHandler(fn => { //   jPHP $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']++; $button->text = "Clicks: " . $GLOBALS['clicks']; }); }); 

结果,我们得到了一个带有按钮的简单应用程序:



结论


我认为没有人会对我的项目感兴趣。 由于尚未描述10%的Android API。 用PHP编写Android应用程序并不是一个经典。 但我认为该项目将吸引观众。


Github项目
Github JPHP
在VK中分组

Source: https://habr.com/ru/post/zh-CN425223/


All Articles