كيفية عمل برنامج أندرويد I

android app

في المقال السابق, شرحنا بنية برنامج أندرويد, و الملفات التي يتكون منها و مهمة كل واحدة منها, لكن التطبيقات التي نجدها مثبتة على أجهزتنا, هي عبارة عن ملف واحد(يجمع كل ما سبق ذكره من ملفات) ذو لاحقة apk, ما يشابه الملف التنفيذي على نظام وندوز, و apk تعني application package file.

ملفات apk هي نتاج ما نقوم ببرمجته, و يتم ذلك بمساعد أداة عبارة عن برنامج صغير يسمى apkbuilder نستعمله بواسطة اكليبس, حيث يتم تصدير مشروع اندرويد الخام بكل محتوياته إلى تطبيق أندرويد جاهز للأستعمال. و لدى محاولة تشغيل برنامجنا فإن أندرويد لديه نظام معين لذلك بشكل آمن و ثابت, من خلال جعل عملية تشغيل برنامج ما, مستقلة عن عملية تشغيل البرامج الأخرى, بمعنى أن كل برنامج له process  خاص به, يتم بدئ تشغيل هذا الأخير عند تشغيل البرنامج, و يتم إقافه في حالة أننا لم نعد نستعمل تطبيقنا بعد حين و أن النظام بحاجة لموارد لبرامج أخرى. و كل process لديه آلته الإفتراضية الخاصة ما يجعل نظام أندرويد نظاما ثابتا و مستقرا, فلو فقد برنامج عمليته و لم يعد يتجاوب فلن يتم تعليق كامل النظام, بل فقط process واحد معين يتم توقيفه في حين البرامج الأخرى تواصل عملها بشكل ثابت و مستقر. و من وسائل الحماية المتوفرة في عملية تشغيل البرامج على نظام أندرويد, نجد لدى تشغيل أي برنامج يسند له النظام معرف خاص به uid فيجعل صلاحيات هذا البرنامج من تخزين البيانات, الوصول لبيانات أخرى, إلخ… خاصة فقط بهذا المعرف فيصعب الوصول لتطبيقنا أو بياناتنا من طرف ثالث دون إذن خاص منا.

تتميز البرمجة على بيئة أندرويد باستغلال ما هو مبرمج مسبقا, سواء كان من أجزاء النظام أو جزء من تطبيقات أخرى, فلا داعي لإعادة اختراع العجلة من جديد. كمثال لو أردنا إنشاء برنامج بغرض تخزين جهات اتصالنا أو أصدقائنا و أيضا أردنا إرفاق صورة خاصة أو صورة شخصية لكل جهة, فلا داعي لبرمجة عملية التصوير أو اختيار الصور من الصفر, يمكننا استعمال برنامج أندرويد للتصوير و يمكننا أيضا اختيار الصور المناسبة من معرض صور النظام, و بهذا نوفر الكثير من الجهد و الوقت في عمل ما هو متوفر مسبقا, هذا يقودنا إلى اتباع نهج معين في برمجة تطبيقات أندرويد, حيث أننا نجزء التطبيق إلى وحدات حتى يسهل برمجتها و إعادة استعمالها, كمثال نجعل وحدة خاصة بالتعامل مع قواعد البيانات(تخزين, حذف, تعديل, استخراج بيانات), وحدة اتصال بالشبكة العالمية و تحميل البيانات كتسجيل الدخول على الفايسبوك مثلا و نشر موضوعات على حائطك, و سر على هذا المنوال لكل مهمة معينة وحدة خاصة, فحتى إذا احتجنا مستقبلا وحدة خاصة بالتعامل مع الفايسبوك فلن نطورها من جديد بل سنستعمل وحدتنا المبرمجة سابقا و هو ما يطلق عليه استعمال نفس النشاط “Activity” هذا حسب التراخيص الممنوحة لكل نشاط في ملف ال AndroidManifest.xml بهذه الكيفية نجعل من تطبيقاتنا مزودة لتطبيقات أخرى سواء كانت لنا أو لغيرنا.

تعتمد تطبيقات أندرويد على أربعة عناصر أساسية تشكل عمليته:

  1. نشاطات Activities
  2. خدمات Services
  3. مزودات المحتوى Content Provider
  4. المستقبلات Broadcast Reciever

نشاطات Activities: هي المسؤولة عن إظهار واجهة المستخدم(الواجهة الرسومية) و التي يتم تحريرها بواسطة لغة XML (أزرار, قوائم منسدلة, إلخ…) في ملفات خاصة تعد من الموارد, و أيضا هي المسؤولة عن التفاعل مع المستخدم و التجاوب معه كالضغط على الأزرار لتنفيذ أمر ما, أو اللمس, اللمس المتعدد و غيره, هذه الواجهة تكون على شكل مستطيل يملئ الشاشة عدا شريط التنبيهات, و لكل واجهة مستخدم Activity خاصة بها, و دائما ما نجد في كل التطبيقات Activity رئيسية يبدأ تشغيل البرنامج منها و تكون هي نقطة العودة,

خدمات Services: لا نراها ولا واجهات رسومية لها, هي تعمل في الخفاء في خلفية النظام, يتم استعمالها في حالة أردنا القيام بمهام دون أن يحس بذلك المستخدم, أو إذا لزم عمل شيء عصي أو رأينا أنه سيبطئ البرنامج فمن الأحسن أن يكون Service.

مزودات المحتوى Content Provider: يتركز عملها على توفير بيانات تطبيقنا أوبيانات أخرى للتطبيقات الأخرى على مستوى النظام, و هذه البيانات يمكن أن يكون أصلها قاعدة بيانات أو ملفات نصية, أو أي منبع آخر للبيانات.

المستقبلات Broadcast Reciever: مهمتها فقط استقبال الرسائل الواردة و التفاعل معها, ليس لها واجهة رسومية, لكنها قادرة على تشغيل نشاطات Activities لو لزم الأمر, أو استعمال الNotification Manager لتنبيه المستخدم بوارد جديد كمكالمة هاتفية واردة أو رسالة نصية قصيرة جديدة, و غير ذلك…

و لأجل استعمال هذه العناصر الأربعة في تطبيقاتنا فإنه يتحتم علينا تعريفها في ملف ال AndroidManifest.xml, و لكل واحدة منها وسم خاص:

  • <activity> وسم لأجل تعريف نشاطات Activities.
  • <service> وسم يستعمل لتعريف خدمات Services.
  • <provider> وسم يستعمل لتعريف مزودات المحتوى Content Provider.
  • <receiver> وسم يستعمل لتعريف مستقبلات Broadcast Reciever.

قد يستعمل هذا التعريف مع وسم <intent-filter> الذي يصلح لأجل تصنيف العناصر التي سبق ذكرها, فلو أردنا استعمالها نحن في تطبيقنا أو غيرنا في تطبيقاتهم, فليس ضروري معرفة اسم العنصر بل يتحمل معرفة من هي النظام اعتمادا على تصنيفه, فينفذ المطلوب.

Intent: هي كائنات تحتوي على كل المعلومات لأجل حدث ما, و من بين ما تستعمل لأجله هو أستغلالها لثلاث من العناصر التي سبق ذكرها وهي:

  • Activity: لأجل إظهارها للمستخدم أو النداء على واحدة أخرى, أو تمرير معلومات وبرامترات فيما بين نشاطين.
  • Service: لأجل تشغيل خدمات, و تمرير بيانات لها.
  • Broadcast Reciever: كما سبق تعريفها فإنها عبارة عن مستقبلات رسائل, و هو ما نستطيع عمله بالIntent أي أننا نستطيع تمرير رسائل و بيانات معينة لهذه المستقبلات و هي تقوم بتلقي المعلومات و عمل ما يجب عمله.

أما الContent Provider فيتم استغلاله بواسطة أداة تسمى ContentResolver سيأتي شرحها في دروس قادمة إن شاء الله.

إذا كان لديك أي استفسار فلا تتردد في طرحه أو مراسلتنا, مستعدون لتوضيحه.

تعليقان على “كيفية عمل برنامج أندرويد I

  1. Raghad

    شكرا جزيلا شرح مفيد ومنسق ، اود السؤال هل يوجد موضوع عن ال service وشكرا

    رد

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Time limit is exhausted. Please reload CAPTCHA.