سلسلة تعلم برمجة تطبيقات الأندرويد .. الدرس الثاني

مرحبا بكم !

في الدرس الماضي، قمنا بشرح طريقة تهيئة البيئة البرمجية التي سنستخدمها في تعلم برمجة تطبيقات الأندرويد.

درسنا اليوم، سيكون عن:

١. تشغيل الأمثلة Samples المتوفرة في الحزمة البرمجية التطويرية للأندرويد Android SDK.
٢. دورة حياة تطبيق الأندرويد Software Development Life Cycle SDLC.
٣. برمجة تطبيق “أهلا بالعالم” Hello World Application والتعرف على الملفات المكونة لتطبيقات الأندرويد.

هل أنتم جاهزون؟ لنبدأ 🙂

١. تشغيل الأمثلة Samples المتوفرة في الحزمة البرمجية التطويرية للأندرويد Android SDK

سنقوم بداية بالتأكد من وجود المجلد الذي يحتوي على الأمثلة. سنتوجه الى المجلد الذي حفظنا فيه ال SDK. ومن ثم:

Platforms>android-2.0.1>samples

الآن نتوجه الى برنامج الاكليبس ونقوم بالتأكد من وجود نسخة افتراضية من جهاز الأندرويد جاهزة للعمل (طبعا في نافذة منفصلة عن الاكليبس):

من الآن فصاعدا، ينصح بإبقاء النسخة الافتراضية فعالة. بمعنى، لا داعي من إغلاق نسخة الجهاز الافتراضي من أندرويد بعد تشغيل التطبيقات عليها.

نقوم الآن بالتوجه الى:

ثم

ثم

تأكد من إدخال جميع القيم بشكل صحيح. اضغط على Finish لترى أن المثال الخاص بلعبة الثعبان Snake قد تم فتحه.

دعكم الآن من هذه الملفات ولنقم بتشغيل التطبيق. اضغط على:

سيظهر المربع التالي. اختر Android Application ثم اضغط OK:

ننتقل مباشرة الى نافذة الجهاز الافتراضي، فنجد التطبيق يعمل عليها:

ملاحظة: ربما تواجهك مشكلة أثناء محاولتك تشغيل التطبيق وتظهر لك رسالة تفيد بأن التطبيق يحتوي على خطأ معين. الحل قد يبدو غريبا بعض الشيء، ولكنه يعمل على الأقل. افتح الملف الذي يحمل اسم Snake_layout.xml وهو موجود تحت مجلد res/layout وقم بحذف أي مسافة بيضاء white space ومن ثم احفظ الملف. يفترض أن تختفي العلامة الحمراء المجاورة لاسم التطبيق في العمود الجانبي الذي يحتوي ملفات التطبيق. يمكنك الآن تشغيل البرنامج عبر Run.

٢. دورة حياة تطبيق الأندرويد Software Development Life Cycle SDLC

من ناحية برمجية بحتة، من المفترض أن يحتوي أي تطبيق أندرويدي على عدد من الدوال والتي ستتضح مهمة كل منها بمجرد قراءة اسمها:

  • onCreate
  • onStart
  • Process-specific events
  • onStop
  • onDestroy

ببساطة، الدالة Function الأولى تحوي الأوامر المتعلقة ببداية انشاء التطبيق، كتهيئة الواجهة الرسومية له واعداد البيانات المرتبطة بالقوائم. الدالة الثانية، onStart، تحوي الأوامر الخاصة بالتطبيق عند بداية عمل العملية Process الخاصة به، وهي اذا الدالة التي عند بداية تنفيذها، نرى التطبيق وقد ظهر على الشاشة. الدالة الثالثة هي ليست دالة فعليا بقدر ماهي عدد من الدوال Functions التي تتعامل مع الأحداث Events التي تحدث أثناء عمل التطبيق، كتحليل قراءات الجي بي اس ودخول قاعدة بيانات وغيرها.

دالة onStop تتعلق بالعملية Process الخاصة بالتطبيق عند توقفها. يقترن استدعاء هذه الدالة باختفاء التطبيق من على الشاشة Foreground وعمله في الخلفية Background (أو حتى توقفه مؤقتا). فمثلا اذا ضغطنا الزر الذي يعيدنا الى الشاشة الرئيسية Home button أثناء استخدامنا لأحد التطبيقات، فإن التطبيق سيستدعي هذه الدالة ويختفي من على الشاشة. تختلف التطبيقات في التعامل مع هذا الحدث. فهناك تطبيقات تستدعي دالة onDestroy المشروحة في النقطة اللاحقة، أو أن يتم الحفاظ على العملية في الخلفية وإعادة تشغيلها عندما يضغط المستخدم على أيقونة التطبيق من جديد عبر استدعاء الدالة onRestart.

دالة onDestroy يتم استدعاؤها في حال رغبنا بإنهاء التطبيق وبالتالي قيام نظام التشغيل بقتل\انهاء العلمية الخاصة به.

٣. برمجة تطبيق “أهلا بالعالم” Hello World Application والتعرف على الملفات المكونة لتطبيقات الأندرويد

سنقوم الآن بإنشاء مشروع جديد. حاول أن تغلق جميع المشاريع المفتوحة حاليا في برنامج الاكليبس (اضغط بالزر الأيمن على اسم المشروع ومن ثم Close Project).

اضغط الآن على:

ثم

نقوم بإدخال البيانات التالية:

بعد إنشاء المشروع، تظهر لنا الملفات التالية:

بالنسبة لملف ال AndroidManifest.xml فهو ملف يحتوي الاعدادات العامة للتطبيق (لمطوري ال ASP.NET، هذا الملف مكافىء لحد ما لملف ال Web.config). عبر هذا الملف، يتم التحكم بأنشطة التطبيق Activities، وال Intents وأذونات التطبيق Permissions. (سنقوم بشرح هذه المفاهيم لاحقا).

بالانتقال الى مجلد res، نجد أن هذا المجلد يحتوي على المصادر والمواد التي سيتم استخدامها في التطبيق. كما في الصورة في الأسفل، نجد المجلدات التالية:

  • drawable: هنا نضع ملفات الصور التي يستخدمها التطبيق.
  • layout: يحتوي هذا المجلد على ملفات من نوع XML وهي المسؤولة عن تصميم وتهيئة الواجهات الرسومية Views and User Interface الخاصة بالتطبيق.
  • values: يحتوي على القيم النصية المشتركة Global String Values التي يمكن استخدامها في التطبيق (وما يحتويه من أنشطة وواجهات Activities and Views)

بالنسبة لمجلد assets، يتم وضع ملفات الصوت والحركة Animation في داخله.

مجلد Android 2.0.1 هو مجلد يحتوي على المكتبات البرمجية Libraries المتاحة للتطبيق كي يستخدمها. في الواقع هو مجلد يحتوي على مؤشرات الى هذه المكتبات الموجودة في الحزمة التطويرية للأندرويد.

مجلد gen يحتوي ملفا اسمه R.java وهو ملف يتم تشكيله بشكل آلي ليحتوي على مؤشرات Pointers تشير الى المواد والمصادر الموجودة في res.

أخيرا، نصل الى مجلد src والذي يحتوي الشفرة المصدرية Source Code للتطبيق.

نفتح الآن الملف HelloWorldArdroid.java :

في أعلى الملف، نستدعي المكتبات التالية:

وهاتان المكتبتان هما من أهم المكتبات التي سيتم استخدامها في برمجة جميع التطبيقات. ولا ننس أن من سيتولى عملية الاستدعاء الفعلية هو مجلد Android 2.0.1 آنف الذكر.

ننتقل الى ال Class الخاصة بالتطبيق. لاحظ أن دالة onCreate قد تم تحديد مهمتها باستدعاء الدالة

والتي تم تمرير اليها المؤشر Pointer الموجود في ملف R.java والذي يشير بدوره الى ملف ال XML الموجود في مجلد res/layout المسؤول عن إعداد الواجهة الرسومية.

بفتح ملف ال main.xml  الموجود في res/layout نجد عددا من عناصر ال XML وما يهمنا هو <TextView>

نجد أن لهذا العنصر الخصائص Attributes التالية: layout_width, layout_height, text.

الخاصيتان Width and Height تهتمان بطريقة عرض النص (طوله وعرضه). الخاصية الأخيرة تحتوي على قيمة النص. نجد أن القيمة هي: @string/hello وهذا يعني أن النص موجود في مكان ما. تكلمنا في منتصف الدرس عن ملف يحتوي القيم النصية التي يمكن استدعاؤها من أي مكان في التطبيق وهو الملف الموجود تحت مجلد res/values :

نجد القيمة الفعلية للنص hello ويمكننا الآن تغييرها لو أردنا.

نقوم الآن بتشغيل البرنامج عبر Run>Run :

ننتقل الى نافذة الجهاز الافتراضي وننتظر قليلا حتى تظهر النتيجة التالية:

ممتاز! الآن نكون قد شغلنا التطبيق الأول لنا في بيئة الأندرويد. أدعوكم الآن الى محاولة التعرف بشكل أكبر على الملفات والمجلدات ومحاولة فهم الغرض منها.

في الدرس القادم، سنبدأ بكتابة الكود الخاص بإظهار نص بطريقة مغايرة للموجودة في الأعلى، ومن ثم طريقة عرض صور في التطبيق، وختاما سنقوم بالتعرف الى مفهوم ال Intents أو النوايا (بصراحة عجزت عن تعريبها بكلمة أخرى 🙂 ) وهي حقيقة تعمل كما النوايا، أي أن المبرمج يكون لديه نية في عمل مكالمة طوارىء في وقت معين من التطبيق، أو مثلا عرض جميع التطبيقات الموجودة في الجهاز على شكل قائمة وغيرها.

سيكون الدرس القادم وجبة برمجية متقدمة قليلا فكونوا بانتظارنا. والمجال مفتوح دائما لاستقبال مقترحاتكم وتعليقاتكم حول هذه السلسلة.

دمتم بودّ.

وائل العلواني

وائل العلواني.. مدون سوري ومطور تطبيقات أندرويد.. مهتم بالتقنية وآخر تطوراتها.. يعمل في شركة خاصة في مجال تقصي الأعمال BI وتعدين البيانات Data Mining

التعليقات: 38 ضع تعليقك

Anas Qtiesh يقول:

RT @ardroid: سلسلة تعلم برمجة تطبيقات الأندرويد .. الدرس الثاني http://bit.ly/5jRslx
#Android

جهد جبار أخي وائل …
بانتظار الحلقة الثالثة 🙂

يمانية يقول:

مشكووور مشكور والله مجهود جبار منك تسلم

خالد يقول:

الله يعطيك الف عافيه أخي وائل على هالشرح 🙂

أستمر بارك الله فيك لتكون المرجع العربي الوحيد في برمجة تطبيقات اندرويد .

وسجلني متابع معك بإستمرار

علاء محمد يقول:

رائع . جزاك الله كل خير
فى أنتظار المرة القادمة بفارغ الصبر

مشكور وتم التطبيق مع اني مالي دخل في البرمجه (طبيب اسنان )

بس احاول اطور نفسي في حاجه تاني

ومشكور مره اخرى الى الشرح المبسط

أشكركم جميعا على تعليقاتكم ومشاعركم اللطيفة 🙂
ترقبوا الدرس الثالث قريبا جدا..
تحياتي..

fromq8 يقول:

اخ وائل بما اني لا املك اي خبره في البرمجه اود ان اسألك سؤال
هل التعريب صعب الى هذا الحد على نظام الاندرويد ؟
لقد رأبنا تعريب اي فون قبل صدور التعريب الرسمي من الشركه
ورأينا تعريب ويندوز موبايل
ولكن على الرغم من مرور اكثر من عام . إلى أني ارى ان المبرمجين العرب عجزو عن تعريب الاندرويد .
ماهيا المشكله
إليس النظام مفتوح وسهل التطوير عليه ؟؟؟
والله احترت كثيرا 🙁
وبارك الله لك في عملك هذا

أهلا بك أخي fromq8.
الحقيقة أن إحدى الشركات طورت حلا متكاملا لتعريب الأندرويد ولكنه لا يباع للأفراد!
http://www.parfield.com/
وهذه صورة للأندرويد وهو معرب
http://www.parfield.com/images/Android_image.gif

التعريب بحسب الموقع يباع لمصنعي\مزودي الأجهزة الخليوية، ولا أعرف حقيقة ان كان جهاز الماجيك الذي طرحته الاتصالات السعودية معربا عن طريق هذه الشركة.

ما أعرفه أن التعريب ليس بصعب، ولكنه يتطلب جهدا ووقتا. في الوقت الراهن، هناك عدة تطبيقات تدعم العربية ويمكنك استخدامها (مثلا لل smsهناك تطبيق اسمه sms وشعاره مربع حوار بنفسجي اللون وأنصح به).

تحياتي لك وشكرا على مشاعرك.
وائل

احمد يقول:

مشكور جدا جدا

حلمي هو تعلم البرمجة وقد تكون بدايتي من هنا بمساعدتك

واصل ابداعاتك وبالتوفيق

السلام عليكم
أشكرك أخي على الجهد المبذول.

sraya يقول:

السلام عليكم
الشرح جميل لكن عندي مشكلة يعني انا خلصت الدرس الاول على تمام التمام لكن لما اجي انزل البروجكت في شي يصير غلط لما اكبس رن ما احصل البروجكت الي سوينا (وهو في هذا المثال لعبة سنيك)
ما الاحل

أهلا sraya..
هل قمت بإضافة البرنامج بنجاح في الخطوة التي تسبق تشغيله عبر Run كماهو موضح في هذه الصورة
http://ardroid.aitnews.com/wp-content/uploads/2010/01/Screen-shot-2010-01-04-at-12.33.13-AM.png

.. بمعنى هل تستطيع فتح الملفات الخاصة بالتطبيق\البرنامج.

sraya يقول:

` السلام عليكم
اخ وائل نعم لقد قمت باضافة البرنامج لكن بالتاكيد ليس بنجاح تام لاني لم استطع تشغيله
لعبة سنيك موجودة عندي بالسامبل وقمت باضافتها كما بالصورة لكن انا لا استطيع الكتابة في properties لانها مظللة ربما اجرب مرة ثانية في وقت اخر
لاني في الحقيقة عندي استعداد لدخول عالم البرمجة وعندي افكار لبرامج كثيرة ومفيدة
لكن هذه فترة اختبارات لذلك سوف انقطع عنكم لفترة ولكن سوف اعود بعد شهرين واطبق كل شيء انشالله
وشكرا على مساعدتك اخ وائل

ابو شاكر يقول:

اخي الكريم
شكرا عى الشرح و الجهد الكبير و لكن عندي سؤال:

عند محاولة تشغيل المشروع الافاعي احصل على الرسالة التالية:

ActivityManager: android.util.AndroidException: Can’t connect to activity manager; is the system running?

عذرا عالتأخير أخي ابو شاكر..
هل تواحه هذه المشكلة مع التطبيقات الأخرى؟ أم مجرد هذا التطبيق؟

تحية

عماد يقول:

السلام عليكم اخي وائل
انا انتهيت من الدرس الاول وكل شيء تمام
بس في بداية الدرس الثاني لما ادخل هنا
Platforms>android-2.0.1>samples
عندي الاندرويد android-7
ومافيه مجلد الامثله
مع العلم ان الاندرويد اللي مثبته هو android 2.1
لآني مالقيت android-2.0.1

أهلا بك أخ عماد..
نعم، بعض النسخ يتم وضع فيها ملف ال samples والبعض الآخر لا يتم..
لذلك يمكنك تحميل نسخة أخرى للاستفادة من ملف ال samples الموجود بها، أو تحميل الملف من هنا: http://wa2el.net/documents/samples.zip

معذرة على التأخر بالرد..

مبارك الرميثي يقول:

جزاك الله خير أخي وائل

أنهيت الدرس الأول .. لاكني واجهت مشكلة عند Run في برنامج Snake و Hello World Application

والنتيجة بعد عدة محاولات تشغيل فاشلة

http://img291.imageshack.us/img291/6941/androidy.png

nuha يقول:

شكرا أ.وائل : )

عبد الرحمن العصفور يقول:

السلام عليكم ..

أستاذ وائل أنا معجب جداً بنشاطك البارز وبطرحك المميز .. كن في الأمام دائما ..

أستاذي .. واجهت مشكلتان .. الأولى أني لم أستطع فتح المثال Snake مع أني قمت بجميع المحاولات المكتوبة .. ثم إني غضضت الطرف عنها وتوجهت إلى برمجة تطبيق “أهلا بالعالم” .. ولكني كلما حاولت إضافة المشروع يخرج لي الخطأ التالي:

/home/user/Android/tools/lib/proguard.cfg(No such file or directory) ..

فما الحل ؟؟ أرجو المساعدة ..
أنا أستخدم نظام لينكس حزمة أوبينتو 10.10 الشهيرة ..

ابراهيم يقول:

اخ عبدالرحمن السلام عليكم ورحمة الله وبركاته
انا سويت الدرس الاول لكن بعد ماطفيت الجهاز وشغلته تهيئ الeclipse
ما الحل

وشكرا

Mohd يقول:

اخي وائل

واجهني الخطأ التالي

Installation error: INSTALL_FAILED_OLDER_SDK
Please check logcat output for more details.
Launch canceled!

بحثت عن حل ولم اجد

Mohd يقول:

اعتذر الرد ليس هنا

الخطأ كان في الدرس الثالث

eng.jasy يقول:

شكراً كثير على هذه الدروس الحلوه والله
الى الامام اخوي وائل

عندي مشكلة في تحميل jre

عبدالله يقول:

شكرا يا أخي جزاك الله خيرا كثيرا أود ان أتعلم الكثير من موقع قوقل للمطورين لكن اللغة الانجليزية وقفت حاجزا أمامي وشكرا.

maitham alsaffar يقول:

أستاذ وائل المحترم
ممكن يكون معنى أخر ل intents هوه مقاصد أو مقصد
ولكم الشكر

محمد فارس يقول:

حقاً درس رائع أستاذ وائل … مجهود تشكر عليه وعمل احترافي …

Amal يقول:

السلام عليكم

انا طالبة برمجة و عندي مشروع التخرج راح يكون بالأندرويد وواجهتني مشكله لكن ما ادري فين بالظبط
لما اسوي بروجكت جديد new > android < android project
ما احصل الأخيره و بالتالي مافي باكج

Sara يقول:

new > android > Android Application Project

الأخيرة تم إعادة تسميتها …

بالتوفيق 🙂

Amal يقول:

ايش تقصد بالنسخه الافتراضيه تكون فعاله ؟

محمد يقول:

new > android < android project نفس المشكله عندي , مالحل

Sara يقول:

new > android > Android Application Project

الأخيرة تم إعادة تسميتها …

بالتوفيق 🙂

صلاح يقول:

شكراً لك أخ وائل على هذه الدروس القيمة لدي بعض الطلبات حول برمجة بعض التطبيقات وأبحث عن من يقوم ببرمجتها لي هل من مساعدة منك أو إذا كان هناك من تصلني به كشركة أو مبرمج إن لم تكن أنت ليقوم باستلام هذا العمل بشكل رسمي من الأفضل أن تكون شركة أو مبرمج سوري لأنني في سوريا .

hasssan يقول:

بالنس للى عنده ويندوز البرنامج مختلف بالكامل ياريت لو يكون حلقات اخرى للاكليبس على الويندوز أو ارفق لينك لموقع اخر يوفر تلك الدروس.

[…] سلسلة تعلم برمجة تطبيقات الأندرويد .. الدرس الثاني: في هذا الدرس سوف تتعلم كيفية استعمال الأمثلة التي تأتي مع الأندرويد. وكيف تبدأ ببرمجة تطبيق أهلاً بالعالم. […]

Leave a Reply

Your email address will not be published. Required fields are marked *