Las personas que escriben código en PHP harán todo lo posible para no cambiar a otros idiomas. Sí, soy consciente de que anteriormente en Habré ya había una forma de escribir aplicaciones de Android en PHP, pero se decidió adaptarlo para que sea más rápido y compatible con Java JPHP.

Sobre JPHP
Supongo que podrías tener una pregunta. ¿Qué es JPHP? La respuesta está ahí, en Habré:
Bueno, continuaremos. Durante esos 4 años que han pasado desde la redacción de estas publicaciones sobre JPHP, este lenguaje ha cambiado para mejor. Por ejemplo, estaba nuestro propio administrador de paquetes jppm sobre el que también tenemos que hablar hoy.
Como empezó todo
Todo comenzó cuando a mi amigo se le ocurrió la idea de crear aplicaciones de Android en JPHP. Le di la publicación de la que hablamos al principio, pero no le gustó este método porque usa PHP normal. Bueno, los desarrolladores que escribimos en un lenguaje JPHP desconocido decidimos hacer todo nosotros mismos.
Después de navegar por Internet, no encontramos otra manera que usar JavaFXPorts. Y el creador de este lenguaje él mismo quería usarlo como un motor GUI para JPHP durante 2 años, sin haber hecho nada.
Como dice el dicho, "¿Quién sino tú?". Me apresuré a estudiar el trabajo del lenguaje JPHP a nivel mundial.
Las primeras semanas no tuvieron éxito. Ya escribí la generación automática de un script de compilación para gradle y todo estaría bien, apk iba a funcionar, pero cuando comencé, un error era desconocido para mí en ese momento. Inmediatamente me di cuenta de que se debía a JPHP, pero no había visto uno como este antes. Ahora puedo decir con certeza que este error se debió al bytecode generado. DalvikVM cursi no pudo ejecutar el código de bytes generado para la JVM. Eso es lo que se ha convertido en un gran obstáculo. Dado que los archivos PHP en las aplicaciones JPHP no se compilan en absoluto. Había una opción con archivos phb, pero esto no resolvió nuestro problema en absoluto. La única forma era escribir su propio compilador, que realmente funcionó, pero trajo una serie de restricciones relacionadas con incluir y evaluar, gracias, Dalvik.
Después de muchas pruebas y errores, todavía logré hacer la primera versión. Sus fuentes están aquí . Esta versión no fue muy rápida. Sí, y usar JavaFX en Android es un masazismo.
Por lo tanto, decidí reescribir todo desde cero. Tomé esta decisión hace relativamente poco. Por lo tanto, la biblioteca para JPHP está un poco húmeda. Pero funciona
Como funciona
Todo comienza con jppm que recopila todas sus fuentes y dependencias en un solo archivo jar. Luego compilando en ellos todos los archivos php
en archivos de class
. Después de lo cual se agrega el archivo jar resultante dependiendo del gradle. Y él, a su vez, compila estos archivos de clase en dex. Este es todo el secreto.
Iniciar la aplicación es más complicado. En AndroidManifest.xml
inicialmente solo hay una BootstrapActivity
que carga todo JPHP. Después de cargar, este BootstrapActivity
se puede modificar desde JPHP. Para Activity
creé clases del mismo nombre.
<? use php\android\app\Application; $bootstrapActivity = Application::getMainActivity();
Con este código, puede obtener la actividad BootstrapActivity
desde la que se cargó JPHP.
Creo que ya entendiste el trabajo del cargador JPHP.
Un pequeño ejemplo
Por ejemplo, para crear el clicker más primitivo necesita usar este código:
<? use php\android\app\Application; use php\android\widget\Button; Application::setMainActivityHandler(fn => {
Como resultado, obtuvimos una aplicación simple con un botón:

Conclusión
No creo que nadie esté interesado en mi proyecto. Dado que aún no describe el 10% de la API de Android. Y escribir aplicaciones para Android en PHP no es un canon. Pero creo que el proyecto encontrará su audiencia.
→ Proyecto Github
→ Github JPHP
→ Agrupar en VK