Les personnes qui écrivent du code en PHP feront tout pour ne pas passer à d'autres langages. Oui, je sais que plus tôt dans Habré, il y avait déjà un moyen d'écrire des applications Android en PHP, mais il a été décidé de l'adapter pour être plus rapide et compatible avec Java JPHP.

À propos de JPHP
Je suppose que vous pourriez avoir une question. Qu'est-ce que JPHP? La réponse est là, sur Habré:
Eh bien, nous allons continuer. Pour les 4 années qui se sont écoulées depuis la rédaction de ces articles sur JPHP, cette langue a changé pour le mieux. Par exemple, il y avait notre propre gestionnaire de packages jppm dont nous devons également parler aujourd'hui.
Comment tout a commencé
Tout a commencé lorsque mon ami a eu l'idée de créer des applications Android sur JPHP. Je lui ai donné le post dont nous avons parlé au début, mais il n'a pas aimé cette méthode car elle utilise PHP standard. Eh bien, nous, les développeurs qui écrivons dans un langage JPHP inconnu, avons décidé de tout faire nous-mêmes.
Après avoir navigué sur Internet, nous n'avons pas trouvé d'autre moyen que d'utiliser JavaFXPorts. Et le créateur de ce langage voulait lui-même l'utiliser comme moteur GUI pour JPHP pendant 2 ans, sans rien avoir fait.
Comme dit le proverbe: «Qui sauf toi?». Je me suis précipité pour étudier le travail du langage JPHP dans le monde.
Les premières semaines ont été infructueuses. J'ai déjà écrit la génération automatique d'un script de construction pour gradle et tout irait bien, apk allait, mais quand j'ai commencé, une erreur m'était inconnue à ce moment-là. J'ai immédiatement réalisé qu'elle était due à JPHP mais je n'en avais jamais vu un comme ça auparavant. Maintenant, je peux dire avec certitude que cette erreur était due au bytecode généré. DalvikVM corny n'a pas pu exécuter le bytecode généré pour la JVM. C'est ce qui est devenu un énorme obstacle. Puisque les fichiers PHP dans les applications JPHP ne sont pas du tout compilés. Il y avait une option avec les fichiers phb, mais cela n'a pas du tout résolu notre problème. La seule façon était d'écrire votre propre compilateur, qui a vraiment fonctionné, mais a apporté un certain nombre de restrictions liées à l'inclusion et à l'évaluation, merci, Dalvik.
Après de nombreux essais et erreurs, j'ai quand même réussi à faire la toute première version. Ses sources sont ici . Cette version n'était pas très rapide. Oui, et utiliser JavaFX sur Android est un masazisme.
J'ai donc décidé de tout réécrire à partir de zéro. J'ai pris cette décision relativement récemment. Par conséquent, la bibliothèque pour JPHP est un peu humide. Mais ça marche.
Comment ça marche
Tout commence avec jppm rassemblant toutes vos sources et dépendances dans un seul fichier jar. Puis en compilant tous les fichiers php
fichiers de class
. Après quoi, le fichier jar résultant est ajouté en fonction du grade. Et lui, à son tour, compile ces fichiers de classe en dex. C'est tout le secret.
Le démarrage de l'application est plus compliqué. Dans AndroidManifest.xml
il n'y a initialement qu'un seul BootstrapActivity
qui charge tous les JPHP. Après le chargement, cette BootstrapActivity
peut être modifiée à partir de JPHP. Pour Activity
j'ai créé des classes du même nom.
<? use php\android\app\Application; $bootstrapActivity = Application::getMainActivity();
En utilisant ce code, vous pouvez obtenir la BootstrapActivity
partir de laquelle JPHP a été chargé.
Je pense que vous avez déjà compris le travail du chargeur JPHP.
Un petit exemple
Par exemple, afin de créer le clicker le plus primitif, vous devez utiliser ce code:
<? use php\android\app\Application; use php\android\widget\Button; Application::setMainActivityHandler(fn => {
En conséquence, nous avons obtenu une application simple avec un bouton:

Conclusion
Je pense que personne ne sera intéressé par mon projet. Puisqu'il ne décrit pas encore 10% de l'API Android. Et l'écriture d'applications pour Android en PHP n'est pas un canon. Mais je pense que le projet trouvera son public.
→ Projet Github
→ Github JPHP
→ Groupe en VK