تطبيقات JPHP Android

الأشخاص الذين يكتبون الشفرة في PHP سيفعلون كل شيء لعدم التبديل إلى لغات أخرى. نعم ، أنا على دراية بأنه في وقت سابق على حبري كانت هناك بالفعل طريقة لكتابة تطبيقات Android في PHP ، ولكن تقرر تكييفها لأسرع وتوافقها مع Java JPHP.


الشعار


حول JPHP


أفترض أنك قد يكون لديك سؤال. ما هو JPHP؟ الجواب موجود على حبري:



حسنا ، سنستمر. بالنسبة لتلك السنوات الأربع التي مرت منذ كتابة هذه المنشورات حول JPHP ، تغيرت هذه اللغة للأفضل. على سبيل المثال ، كان هناك مدير حزم jppm الخاص بنا والذي يجب أن نتحدث عنه اليوم أيضًا.


كيف بدأ كل شيء


بدأ كل شيء عندما توصل صديقي بفكرة إنشاء تطبيقات Android على JPHP. أعطيته المنشور الذي تحدثنا عنه في البداية ، لكنه لم يعجبه هذا الأسلوب لأنه يستخدم PHP العادي. حسنًا ، قررنا نحن المطورين الذين يكتبون بلغة JPHP غير معروفة أن نفعل كل شيء بأنفسنا.


بعد تصفح الإنترنت ، لم نجد أي طريقة أخرى سوى استخدام JavaFXPorts. وأراد مبدع هذه اللغة نفسه استخدامه كمحرك واجهة المستخدم الرسومية لـ JPHP لمدة عامين ، دون القيام بأي شيء.


كما يقول المثل ، "من غيرك؟" .. هرعت لدراسة عمل لغة JPHP عالميًا.


كانت الأسابيع القليلة الأولى فاشلة. لقد كتبت بالفعل جيلًا آليًا لسيناريو بناء لـ gradle وسيكون كل شيء على ما يرام ، وستكون apk ، ولكن عندما بدأت ، كان هناك خطأ غير معروف بالنسبة لي في ذلك الوقت. أدركت على الفور أنها كانت بسبب JPHP لكنني لم أر مثل هذا من قبل. الآن أستطيع أن أقول على وجه اليقين أن هذا الخطأ كان بسبب رمز البايت الذي تم إنشاؤه. لم يتمكن DalvikVM corny من تشغيل الرمز الثانوي الذي تم إنشاؤه لـ JVM. هذا ما أصبح عقبة كبيرة. نظرًا لأن ملفات PHP في تطبيقات JPHP لا يتم تجميعها على الإطلاق. كان هناك خيار مع ملفات phb ، لكن هذا لم يحل مشكلتنا على الإطلاق. كانت الطريقة الوحيدة هي كتابة المترجم الخاص بك ، والذي نجح حقًا ، لكنه جلب عددًا من القيود المتعلقة بتضمين وتقييم Dalvik ، شكرًا.


بعد العديد من التجربة والخطأ ، تمكنت من عمل الإصدار الأول. مصادرها هنا . لم يكن هذا الإصدار سريعًا جدًا. نعم ، واستخدام JavaFX على Android هو masazism.


لذلك ، قررت إعادة كتابة كل شيء من الصفر. لقد اتخذت هذا القرار مؤخرا نسبيا. لذلك ، مكتبة JPHP رطبة قليلاً. لكنها تعمل.


كيف يعمل


يبدأ كل شيء بجمع jppm لكل مصادرك وتبعياتك في ملف jar واحد. ثم تجميع كل ملفات php في ملفات class . وبعد ذلك يضاف ملف الجرة الناتج حسب التدرج. وهو بدوره يقوم بتجميع هذه الملفات في dex. هذا هو السر كله.


بدء التطبيق أكثر تعقيدا. في AndroidManifest.xml يوجد في البداية BootstrapActivity واحد فقط يقوم بتحميل جميع ملفات JPHP. بعد التحميل ، يمكن تعديل BootstrapActivity من JPHP. بالنسبة إلى Activity أنشأت فئات تحمل نفس الاسم.


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

باستخدام هذا الرمز ، يمكنك الحصول على BootstrapActivity الذي تم تحميل JPHP منه.


أعتقد أنك فهمت بالفعل عمل محمل 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. وكتابة تطبيقات Android في PHP ليست شريعة. لكن أعتقد أن المشروع سيجد جمهوره.


مشروع جيثب
جيثب JPHP
مجموعة في VK

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


All Articles