As pessoas que escrevem código em PHP farão de tudo para não mudar para outros idiomas. Sim, eu sei que anteriormente no Habré já havia uma maneira de escrever aplicativos Android em PHP, mas foi decidido adaptá-lo para ser mais rápido e compatível com o Java JPHP.

Sobre o JPHP
Presumo que você possa ter uma pergunta. O que é o JPHP? A resposta está aí, em Habré:
Bem, vamos continuar. Nos 4 anos que se passaram desde a redação desses posts sobre o JPHP, esse idioma mudou para melhor. Por exemplo, havia nosso próprio gerenciador de pacotes jppm sobre o qual também precisamos conversar hoje.
Como tudo começou
Tudo começou quando meu amigo teve a ideia de criar aplicativos Android no JPHP. Dei a ele o post sobre o qual falamos no começo, mas ele não gostou desse método porque usa PHP comum. Bem, nós desenvolvedores que escrevemos em uma linguagem JPHP desconhecida decidimos fazer tudo sozinhos.
Depois de navegar na Internet, não encontramos outra maneira senão usar o JavaFXPorts. E o próprio criador dessa linguagem quis usá-lo como um mecanismo de interface gráfica para o JPHP por 2 anos, sem ter feito nada.
Como diz o ditado, "Quem além de você?" .. Corri para estudar o trabalho da linguagem JPHP globalmente.
As primeiras semanas foram malsucedidas. Eu já escrevi a geração automática de um script de construção para o gradle e tudo ficaria bem, o apk ia funcionar, mas quando eu comecei, um erro era desconhecido para mim naquele momento. Eu imediatamente percebi que ela era devido ao JPHP, mas eu nunca tinha visto um assim antes. Agora posso dizer com certeza que esse erro ocorreu devido ao bytecode gerado. O DalvikVM brega não pôde executar o bytecode gerado para a JVM. Foi isso que se tornou um enorme obstáculo. Como os arquivos PHP nos aplicativos JPHP não são compilados. Havia uma opção com arquivos phb, mas isso não resolveu o nosso problema. A única maneira era escrever seu próprio compilador, o que realmente funcionou, mas trouxe várias restrições relacionadas à inclusão e avaliação, obrigado, Dalvik.
Depois de muitas tentativas e erros, ainda consegui fazer a primeira versão. Suas fontes estão aqui . Esta versão não foi muito rápida. Sim, e usar JavaFX no Android é um masazismo.
Por isso, decidi reescrever tudo do zero. Eu tomei essa decisão relativamente recentemente. Portanto, a biblioteca para JPHP é um pouco úmida. Mas funciona.
Como isso funciona
Tudo começa com o jppm coletando todas as suas fontes e dependências em um único arquivo jar. Compilando neles todos os arquivos php
em arquivos de class
. Após o qual o arquivo jar resultante é adicionado, dependendo do gradle. E ele, por sua vez, compila esses arquivos de classe em dex. Este é todo o segredo.
Iniciar o aplicativo é mais complicado. No AndroidManifest.xml
inicialmente há apenas um BootstrapActivity
que carrega todo o JPHP. Após o carregamento, esse BootstrapActivity
pode ser modificado no JPHP. Para Activity
criei classes com o mesmo nome.
<? use php\android\app\Application; $bootstrapActivity = Application::getMainActivity();
Usando esse código, você pode obter a própria BootstrapActivity
partir da qual o JPHP foi carregado.
Eu acho que você já entendeu o trabalho do carregador JPHP.
Um pequeno exemplo
Por exemplo, para criar o clicker mais primitivo, você precisa usar este código:
<? use php\android\app\Application; use php\android\widget\Button; Application::setMainActivityHandler(fn => {
Como resultado, obtivemos um aplicativo simples com um botão:

Conclusão
Não acho que alguém se interesse pelo meu projeto. Como ainda não descreve 10% da API do Android. E escrever aplicativos para Android em PHP não é um cânone. Mas acho que o projeto encontrará seu público.
→ Projeto Github
→ Github JPHP
→ Agrupar em VK