Aplikasi JPHP Android

Orang yang menulis kode dalam PHP akan melakukan segalanya untuk tidak beralih ke bahasa lain. Ya, saya menyadari bahwa sebelumnya di Habré sudah ada cara untuk menulis aplikasi Android dalam PHP, tetapi diputuskan untuk mengadaptasinya agar lebih cepat dan kompatibel dengan Java JPHP.


logo


Tentang JPHP


Saya berasumsi Anda mungkin memiliki pertanyaan. Apa itu JPHP? Jawabannya ada di sana, di Habré:



Baiklah, kita akan melanjutkan. Untuk 4 tahun yang telah berlalu sejak penulisan posting ini tentang JPHP, bahasa ini telah berubah menjadi lebih baik. Sebagai contoh, ada manajer paket jppm kita sendiri yang juga harus kita bicarakan hari ini.


Bagaimana semuanya dimulai


Semuanya berawal ketika teman saya datang dengan ide membuat aplikasi Android di JPHP. Saya memberinya pos yang kami bicarakan di awal, tetapi dia tidak menyukai metode ini karena menggunakan PHP biasa. Kami, pengembang yang menulis dalam bahasa JPHP yang tidak dikenal memutuskan untuk melakukan semuanya sendiri.


Setelah menjelajahi Internet, kami tidak menemukan cara lain selain menggunakan JavaFXPorts. Dan pencipta bahasa ini sendiri ingin menggunakannya sebagai mesin GUI untuk JPHP selama 2 tahun, tanpa melakukan apa pun.


Seperti kata pepatah, “Siapa selain kamu?” .. Saya bergegas untuk mempelajari karya bahasa JPHP secara global.


Beberapa minggu pertama tidak berhasil. Saya sudah menulis pembuatan otomatis skrip build untuk gradle dan semuanya akan baik-baik saja, apk akan melakukannya, tetapi ketika saya mulai, kesalahan tidak diketahui oleh saya pada waktu itu. Saya segera menyadari bahwa dia adalah karena JPHP tetapi saya belum pernah melihat yang seperti ini sebelumnya. Sekarang saya dapat mengatakan dengan pasti bahwa kesalahan ini disebabkan oleh bytecode yang dihasilkan. DalvikVM klise tidak bisa menjalankan bytecode yang dihasilkan untuk JVM. Itulah yang menjadi kendala besar. Karena file PHP dalam aplikasi JPHP tidak dikompilasi sama sekali. Ada opsi dengan file phb, tapi ini tidak menyelesaikan masalah kita sama sekali. Satu-satunya cara adalah menulis kompiler Anda sendiri, yang benar-benar berfungsi, tetapi membawa sejumlah pembatasan terkait dengan menyertakan dan mengevaluasi, terima kasih, Dalvik.


Setelah banyak trial and error, saya masih berhasil membuat versi pertama. Sumbernya ada di sini . Versi ini tidak terlalu cepat. Ya, dan menggunakan JavaFX di Android adalah sebuah masazisme.


Karena itu, saya memutuskan untuk menulis ulang semuanya dari awal. Saya membuat keputusan ini relatif baru. Oleh karena itu, perpustakaan untuk JPHP agak lembab. Tapi itu berhasil.


Bagaimana cara kerjanya


Semuanya dimulai dengan jppm mengumpulkan semua sumber dan dependensi Anda ke dalam satu file jar. Kemudian kompilasi di dalamnya semua file php ke file class . Setelah itu file jar yang dihasilkan ditambahkan tergantung pada gradle. Dan dia, pada gilirannya, mengkompilasi file kelas ini menjadi dex. Ini seluruh rahasianya.


Memulai aplikasi lebih rumit. Di AndroidManifest.xml awalnya hanya ada satu BootstrapActivity yang memuat semua JPHP. Setelah memuat, BootstrapActivity ini dapat dimodifikasi dari JPHP. Untuk Activity saya membuat kelas dengan nama yang sama.


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

Dengan menggunakan kode ini, Anda bisa mendapatkan BootstrapActivity dari mana JPHP dimuat.


Saya pikir Anda sudah mengerti karya loader JPHP.


Contoh kecil


Misalnya, untuk membuat clicker paling primitif Anda perlu menggunakan kode ini:


 <? 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']; }); }); 

Hasilnya, kami mendapat aplikasi sederhana dengan tombol:



Kesimpulan


Saya tidak berpikir ada orang yang akan tertarik dengan proyek saya. Karena belum menggambarkan 10% dari API Android. Dan menulis aplikasi untuk Android dalam PHP bukan kanon. Tapi saya pikir proyek ini akan menemukan audiensnya.


proyek Github
Github JPHP
Grup dalam VK

Source: https://habr.com/ru/post/id425223/


All Articles