SlideShare a Scribd company logo
Android verysimplebook... أندرويد ببساطة
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
2
‫ببساطة‬ ‫أندرويد‬
‫المصدر‬ ‫المفتوح‬ ‫أندرويد‬ ‫تشغيل‬ ‫نظام‬ ‫على‬ ‫تطبيقات‬ ‫تطوير‬ ‫تعلم‬
‫في‬ ‫انتھى‬)‫أبريل‬/2010(
‫في‬ ‫نشر‬)‫مارس‬/2011(
‫بواسطة‬
‫بدوي‬ ‫محمد‬
‫علواني‬ ‫وائل‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
3
‫المحتويات‬ ‫فھرس‬
‫الموضوع‬
‫أندرويد‬ ‫على‬ ‫لنتعرف‬
‫المصطلحات‬ ‫قاموس‬
‫أندر‬ ‫تشغيل‬ ‫لنظام‬ ‫موجه‬ ‫تطبيق‬ ‫تبني‬ ‫كيف‬‫ويد‬
‫التطبيق‬ ‫لحياة‬ ‫الداخلية‬ ‫البنية‬ ‫على‬ ‫التعرف‬
‫يد‬ ‫الندرو‬ ‫الموجھة‬ ‫المطورين‬ ‫حزمة‬ ‫و‬ ‫التطوير‬ ‫أدوات‬ ‫تركيب‬
‫الخطوة‬‫األولى‬)Java SE(
‫الثانية‬ ‫الخطوة‬)Android SDK(
‫الثالثة‬ ‫الخطوة‬)Eclipse(
‫الرابعة‬ ‫الخطوة‬)ADT(
‫التطوير‬ ‫بيئة‬ ‫مع‬ ‫التعامل‬)Eclipse(
‫ل‬ ‫تطبيق‬ ‫أول‬ ‫بناء‬‫بواسطة‬ ‫يد‬ ‫الندرو‬ ‫موجه‬ ‫ك‬)Android(
‫األوامر‬ ‫سطر‬ ‫خالل‬ ‫من‬ ‫المشروع‬ ‫بناء‬
‫المحاكي‬ ‫على‬ ‫تطبيقك‬ ‫تشغيل‬
‫المحاكي‬ ‫إعداد‬
‫المحاكي‬ ‫تشغيل‬
‫المحاكي‬ ‫مع‬ ‫التعامل‬
‫األوامر‬ ‫سطر‬ ‫خالل‬ ‫من‬ ‫المحاكي‬ ‫مع‬ ‫التعامل‬
‫الخارجي‬ ‫العالم‬ ‫و‬ ‫المحاكي‬
‫تطبيقك‬ ‫بناء‬‫األول‬‫كود‬ ‫بدون‬)‫بالعالم‬ ‫أھال‬(
‫ب‬‫مشروعك‬ ‫ناء‬‫األول‬)‫المھام‬ ‫قائمة‬(
‫للجمھور‬ ‫تطبيقك‬ ‫إتاحة‬ ‫و‬ ‫بتسويق‬ ‫تقوم‬ ‫كيف‬
‫احترافي‬ ‫تطبيق‬ ‫بناء‬)Mash up(‫خارجي‬ ‫محتوى‬ ‫مع‬ ‫بالتكامل‬)‫درويد‬ ‫ريست‬(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
4
‫الكتاب‬ ‫حول‬
‫معرف‬ ‫الجيد‬ ‫من‬‫ته‬‫العام‬ ‫نھاية‬ ‫في‬ ‫الكتاب‬ ‫بكتابة‬ ‫قمنا‬ ‫أننا‬)2009(
‫لطب‬ ‫راعي‬ ‫عن‬ ‫البحث‬ ‫حاولنا‬ ‫ثم‬ ‫من‬ ‫و‬ ‫ميالدية‬‫توزيعه‬ ‫أو‬ ‫الكتاب‬ ‫اعة‬
‫شركة‬ ‫ومنھا‬ ‫الكثيرة‬ ‫الوعود‬ ‫بإطالق‬ ‫الجھات‬ ‫بعض‬ ‫قامت‬ ‫قد‬ ‫و‬
‫أشھر‬ ‫بضعة‬ ‫االنتظار‬ ‫جعلنا‬ ‫مما‬ ‫السعودية‬ ‫في‬ ‫بوكيلھا‬ ‫ممثلة‬ ‫جوجل‬
‫للناس‬ ‫لتوفيره‬ ‫جودته‬ ‫مدى‬ ‫و‬ ‫بالكتاب‬ ‫الراعي‬ ‫رأي‬ ‫لنعرف‬،‫و‬ ‫لكن‬ ‫و‬
‫منھم‬ ‫نسمع‬ ‫نعد‬ ‫لم‬ ‫الوقت‬ ‫مرور‬ ‫مع‬،‫الكتاب‬ ‫نشر‬ ‫في‬ ‫تقاعسنا‬ ‫لذا‬ ‫و‬
‫شھر‬ ‫منذ‬ ‫نھائيا‬ ‫عليه‬ ‫العمل‬ ‫توقف‬ ‫و‬ ‫نكمله‬ ‫لم‬ ‫و‬)4(‫للعام‬)2010(
‫قد‬ ‫ھا‬ ‫و‬‫قمنا‬‫إن‬ ‫و‬ ‫ھو‬ ‫و‬ ‫للناس‬ ‫إلصداره‬ ‫عجل‬ ‫على‬ ‫و‬ ‫بتنقيحه‬ ‫أخيرا‬
‫حتى‬ ‫فيه‬ ‫بما‬ ‫للعمل‬ ‫صالحا‬ ‫مازال‬ ‫أنه‬ ‫إال‬ ‫قديمة‬ ‫البيانات‬ ‫بعض‬ ‫كانت‬
‫ھذا‬ ‫يومنا‬،‫فلقد‬ ‫تعذرنا‬ ‫أن‬ ‫فأرجوا‬ ‫األخطاء‬ ‫بعض‬ ‫وجود‬ ‫حال‬ ‫في‬ ‫لذا‬
‫بأفضل‬ ‫قمنا‬‫يمكن‬ ‫ما‬ ‫بأبسط‬ ‫و‬ ‫شكل‬ ‫بأفضل‬ ‫بالكتاب‬ ‫للخروج‬ ‫يمكن‬ ‫ما‬
‫و‬ ‫المجال‬ ‫ھذا‬ ‫في‬ ‫مھتمة‬ ‫اآلن‬ ‫حتى‬ ‫عربية‬ ‫كتب‬ ‫أي‬ ‫يوجد‬ ‫ال‬ ‫حيث‬
‫التعقيد‬ ‫من‬ ‫تعاني‬ ‫طالعناھا‬ ‫التي‬ ‫األجنبية‬ ‫الكتب‬ ‫أغلب‬ ‫الحال‬ ‫كذلك‬،
‫مازلنا‬ ‫لذا‬ ‫و‬ ‫األمور‬ ‫من‬ ‫بالكثير‬ ‫ملم‬ ‫الكتاب‬ ‫يقرأ‬ ‫من‬ ‫بأن‬ ‫تعتبر‬ ‫و‬ ‫بل‬
‫سيكون‬ ‫الكتاب‬ ‫بأن‬ ‫نجد‬‫ھذا‬ ‫في‬ ‫ھذا‬ ‫يومنا‬ ‫حتى‬ ‫كتب‬ ‫ما‬ ‫أفضل‬ ‫من‬
‫العالم‬.
‫مجاني‬ ‫الكتاب‬‫لألفراد‬‫يمكن‬ ‫و‬‫إعادة‬‫توزيعه‬‫بدون‬ ‫ھو‬ ‫كما‬ ‫نشره‬ ‫و‬
‫لنا‬ ‫الرجوع‬ ‫دون‬ ‫الكتروني‬ ‫بشكل‬ ‫و‬ ‫تعديل‬ ‫أي‬،‫ال‬ ‫أن‬ ‫أرجوا‬ ‫ولذا‬
‫دائما‬ ‫لھا‬ ‫الحاجة‬ ‫بأشد‬ ‫فنحن‬ ‫الغيب‬ ‫بظھر‬ ‫دعوة‬ ‫من‬ ‫تنسونا‬.
‫استخدامه‬ ‫أو‬ ‫الطبع‬ ‫حال‬ ‫في‬ ‫أما‬‫ألغراض‬‫ت‬‫لغير‬ ‫أو‬ ‫جارية‬‫األفراد‬
‫لنا‬ ‫الرجوع‬ ‫فيرجى‬‫ألخذ‬‫بذلك‬ ‫خاص‬ ‫إذن‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
5
‫المؤلفين‬ ‫حول‬
‫بدوي‬ ‫محمد‬)‫مدون‬،‫مبرمج‬،‫أعمال‬ ‫رائد‬(
‫على‬ ‫للتطبيقات‬ ‫مطور‬‫األجھزة‬‫مثل‬ ‫الذكية‬)iPhone/iPad(‫و‬)Android(
‫و‬)Windows Mobile(‫و‬)Blackberry(
‫االنترنت‬ ‫على‬ ‫الموقع‬:www.badwi.com
‫االل‬ ‫البريد‬‫كتروني‬:badwisoft@gmail.com
‫الھاتف‬:00966503415343
‫تويتر‬ ‫على‬ ‫حساب‬:http://twitter.com/badwi
‫بوك‬ ‫فيس‬ ‫حساب‬:http://www.facebook.com/badwi
‫وائل‬‫علواني‬)‫أندرويد‬ ‫تطبيقات‬ ‫ومطور‬ ‫مدون‬(
‫ومواضيع‬ ‫األندرويد‬ ‫مجال‬ ‫وخصوصا‬ ‫وتطوراتھا‬ ‫بالتقنية‬ ‫مھتم‬
‫البيانات‬ ‫تعدين‬Data Mining..‫الحاسب‬ ‫علوم‬ ‫في‬ ‫ماجستير‬ ‫يحمل‬
-‫والتقنية‬ ‫للعلوم‬ ‫عبدﷲ‬ ‫الملك‬ ‫جامعة‬ ‫من‬ ‫صنعي‬ ‫ذكاء‬ ‫تخصص‬
)‫كاوست‬.(
‫االل‬ ‫البريد‬‫كتروني‬:wael.alalwani@gmail.com
‫تويتر‬ ‫على‬ ‫حساب‬:http://twitter.com/waelalwani
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
6
‫أندرويد‬ ‫على‬ ‫بالبداية‬ ‫لنتعرف‬
‫المحمولة‬ ‫لألجھزة‬ ‫موجھة‬ ‫المصدر‬ ‫مفتوح‬ ‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫أندرويد‬
‫جوج‬ ‫شركة‬ ‫اشترته‬‫العام‬ ‫في‬ ‫الشركات‬ ‫أحد‬ ‫من‬ ‫ل‬)2005(‫و‬ ‫ميالدية‬
‫العام‬ ‫في‬)2007(.‫لألجھزة‬ ‫المفتوحة‬ ‫المصادر‬ ‫اتحاد‬ ‫تحت‬ ‫تبنيه‬ ‫تم‬
‫المحمولة‬)OHA) (Open Handset Alliance(‫ضم‬ ‫الذي‬ ‫و‬
‫من‬ ‫أكثر‬)48(‫شركات‬ ‫و‬ ‫مصنعين‬ ‫منھم‬ ‫و‬ ‫الشركات‬ ‫كبار‬ ‫من‬ ‫شركة‬
‫ش‬ ‫و‬ ‫الكترونية‬ ‫شرائح‬ ‫تزود‬ ‫شركات‬ ‫و‬ ‫برمجية‬ ‫تطبيقات‬‫تھتم‬ ‫ركات‬
‫االتصاالت‬ ‫خدمة‬ ‫مزودي‬ ‫و‬ ‫بالمحتوى‬.‫العام‬ ‫في‬ ‫و‬)2008(‫قامت‬
‫شركة‬)HTC(‫ھاتف‬ ‫أول‬ ‫بإصدار‬ ‫المحمولة‬ ‫لألجھزة‬ ‫المصنعة‬ ‫و‬
‫تشغيل‬ ‫بنظام‬ ‫متنقل‬)Android(‫العام‬ ‫في‬ ‫و‬)2009(‫شركة‬ ‫قامت‬
)T-Mobile(‫أجھزة‬ ‫مع‬ ‫سنوي‬ ‫عقد‬ ‫ضمن‬ ‫ھاتف‬ ‫خطوط‬ ‫أول‬ ‫ببيع‬
)HTC(‫تشغيل‬ ‫لنظام‬ ‫المتضمنة‬ ‫و‬)‫أندرويد‬(.
‫لينكس‬ ‫نواة‬ ‫على‬ ‫ومبني‬ ‫يعتمد‬ ‫أندرويد‬ ‫نظام‬)Linux 2.6
kernel(‫تشغيل‬ ‫نظام‬ ‫يعد‬ ‫ال‬ ‫لكنه‬ ‫و‬)GNU/Linux(‫ال‬ ‫أنه‬ ‫حيث‬
‫من‬ ‫كل‬ ‫يدعم‬)native windowing system(‫و‬)glibc
support(‫أدوات‬ ‫حتى‬ ‫ال‬ ‫و‬)GNU/Linux(‫من‬ ‫يستفيد‬ ‫لكنه‬ ‫و‬
‫األمان‬ ‫في‬ ‫بقواتھا‬ ‫النواة‬)security(‫الذاكرة‬ ‫إدارة‬ ‫و‬)memory
management(‫الخلفية‬ ‫العمليات‬ ‫إدارة‬ ‫و‬)process
management(‫الشبكة‬ ‫إدارة‬ ‫في‬ ‫الحال‬ ‫كذلك‬ ‫و‬)network
stack(‫السواقات‬ ‫نموذج‬ ‫و‬)driver model(‫التجريد‬ ‫طبقة‬ ‫و‬
)abstraction layer(.
‫ت‬ ‫لنظام‬ ‫الموجھة‬ ‫التطبيقات‬ ‫تطوير‬ ‫و‬ ‫التطبيقات‬ ‫بناء‬ ‫يمكن‬‫شغيل‬
)‫أندرويد‬(‫من‬ ‫كل‬ ‫بواسطة‬)Java(‫و‬)Managed Code(‫لكن‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
7
‫نسخة‬ ‫تعبر‬ ‫ال‬)Java(‫من‬ ‫لجزء‬ ‫مطورة‬ ‫ھي‬ ‫بل‬ ‫القياسية‬)Java5
SE(‫على‬ ‫تعمل‬ ‫و‬)JDV(‫لـ‬ ‫اختصارا‬)Java Dalvik
Virtual(‫من‬ ‫بدال‬)JVM(‫لـ‬ ‫اختصارا‬)Java Virtual
Machine(.
‫مفتوح‬ ‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫ببساطة‬ ‫و‬ ‫أندرويد‬‫تعدد‬ ‫ويدعم‬ ‫المصدر‬
‫التطبيقات‬.‫أي‬‫الممكن‬ ‫من‬‫أن‬‫به‬ ‫يعمل‬‫نفس‬ ‫في‬ ‫تطبيق‬ ‫من‬ ‫أكثر‬
‫الخلفية‬ ‫في‬ ‫الخدمات‬ ‫أو‬ ‫الوقت‬.‫بشكل‬ ‫فيه‬ ‫التطبيقات‬ ‫كل‬ ‫تعمل‬ ‫و‬
‫يعمل‬ ‫تطبيق‬ ‫كل‬ ‫كان‬ ‫وان‬ ‫الجھاز‬ ‫موارد‬ ‫مشاركة‬ ‫ناحية‬ ‫من‬ ‫متساوي‬
‫منفصلة‬ ‫بطبقة‬ ‫مستقل‬ ‫بشكل‬.‫استخدام‬ ‫إعادة‬ ‫من‬ ‫منصته‬ ‫تمكنك‬ ‫و‬
‫ك‬ ‫كائناته‬‫محرك‬ ‫يستخدم‬ ‫و‬ ‫ما‬)Web Kit OSS(‫انترنت‬ ‫كمتصف‬
‫متصفح‬ ‫في‬ ‫يستخدم‬ ‫الذي‬ ‫و‬)Google chrome(.‫يدعم‬ ‫كما‬
‫مكتبة‬)OpenGL ES(‫قواعد‬ ‫يعتمد‬ ‫و‬ ‫الثالثية‬ ‫الصور‬ ‫إلدارة‬
‫بيانات‬)SQLite(‫تخزين‬ ‫في‬‫ال‬‫بيانات‬.‫كم‬‫ا‬‫الصيغ‬ ‫كل‬ ‫يدعم‬ ‫و‬
‫الج‬ ‫و‬ ‫فيديو‬ ‫و‬ ‫أصوات‬ ‫و‬ ‫صور‬ ‫من‬ ‫الميديا‬ ‫لوسائط‬ ‫القياسية‬‫فيه‬ ‫ميل‬
‫التوضع‬ ‫نظام‬ ‫و‬ ‫الرقمية‬ ‫الكاميرا‬ ‫من‬ ‫متنوع‬ ‫عتاد‬ ‫يتضمن‬ ‫أنه‬
‫العالمي‬)GPS(‫اإلحساس‬ ‫خاصية‬ ‫دعم‬ ‫إلى‬ ‫باإلضافة‬ ‫البوصلة‬ ‫و‬
‫بالمكان‬)accelerometer(.
‫الداخلية‬ ‫أندرويد‬ ‫بنية‬ ‫على‬ ‫أكثر‬ ‫لنتعرف‬. .
‫لينوك‬ ‫نواة‬ ‫تقع‬ ‫األساس‬ ‫في‬‫س‬)Linux Kernel(‫ھي‬ ‫التي‬ ‫و‬
‫عن‬ ‫مسئولة‬:
• Display Driver
• Bluetooth Driver
• Camera Driver
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
8
• Flash Memory Driver
• Binder (IPC) Driver
• Keypad Driver
• USB Driver
• Wi-Fi Driver
• Audio Driver
• Power Management
‫عن‬ ‫عبارة‬ ‫ھي‬ ‫التي‬ ‫و‬ ‫التشغيل‬ ‫طبقة‬ ‫تليھا‬ ‫ثم‬:
• Dalvik Virtual Machine
• Core Libraries
‫ھي‬ ‫المكتبات‬ ‫ھذه‬ ‫و‬:
• Surface Manager
• Media Framework
• SQLite
• OpenGL ES
• Free Type
• Web Kit
• SGL
• SSL
• Libbc
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
9
‫كل‬ ‫قبل‬ ‫من‬ ‫تستخدم‬ ‫التي‬ ‫و‬ ‫التطبيقات‬ ‫منصة‬ ‫طبقة‬ ‫الطبقة‬ ‫ھذه‬ ‫تلي‬ ‫ثم‬
‫التطبيقات‬:
• Activity Manager
• Window Manager
• Content Provider
• View System
• Notification Manager
• Package Manager
• Telephony Manager
• Resource
• Location Manager
• Sensor Manager
‫من‬ ‫المشحونة‬ ‫الرئيسية‬ ‫التطبيقات‬ ‫تأتي‬ ‫األخيرة‬ ‫الطبقة‬ ‫في‬ ‫ثم‬
‫مثل‬ ‫الشركة‬:
• Home
• Contacts
• Phone
• Browser
‫تطبيقك‬ ‫منھا‬ ‫سيكون‬ ‫التي‬ ‫و‬ ‫األخرى‬ ‫التطبيقات‬ ‫بعض‬ ‫و‬‫الذي‬ ‫الخاص‬
‫ببنائه‬ ‫ستقوم‬ ‫كيف‬ ‫سوية‬ ‫نتعلم‬ ‫سوف‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
10
‫ال‬ ‫مصدر‬‫صورة‬:‫أندرويد‬ ‫صفحة‬-‫ويكيبيديا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
11
‫الوحدات‬‫األساس‬‫معه‬ ‫سنتعامل‬ ‫الذي‬‫ھو‬ ‫أندرويد‬ ‫تطبيق‬ ‫ألي‬:
• Activity
• Intent
• Service
• Content Provider
‫أن‬ ‫لتطبيقك‬ ‫يمكن‬ ‫التي‬ ‫و‬ ‫األسس‬ ‫ھذه‬ ‫على‬ ‫نتعرف‬ ‫دعنا‬ ‫اإلبحار‬ ‫قبل‬
‫مجتمعة‬ ‫كلھا‬ ‫أو‬ ‫أكثر‬ ‫أو‬ ‫فقط‬ ‫أحدھا‬ ‫يستخدم‬:
‫الجلس‬ ‫أو‬ ‫النشاط‬‫ة‬)Activity(
‫عن‬ ‫عبارة‬ ‫تكون‬ ‫و‬ ‫وحيدة‬ ‫شاشة‬ ‫لتوصيف‬ ‫تستخدم‬)Class(‫التي‬ ‫و‬
‫استدعا‬ ‫يتم‬‫ؤ‬‫الزناد‬ ‫طريق‬ ‫عن‬ ‫ھا‬)Intent(‫الجز‬ ‫بالعادة‬ ‫تكون‬ ‫و‬‫ء‬
‫في‬ ‫تكون‬ ‫أن‬ ‫يمكن‬ ‫إذ‬ ‫الظاھر‬‫أعلى‬‫استدعائھا‬ ‫يمكن‬ ‫و‬ ‫التطبيقات‬ ‫كل‬
‫نھائيا‬ ‫إغالقھا‬ ‫أو‬ ‫استدعائه‬ ‫إعادة‬ ‫و‬ ‫الخلفية‬ ‫في‬ ‫جعلھا‬ ‫أو‬.
‫حياة‬ ‫دورة‬)Activity(
‫بداية‬)Start(‫النشاط‬)Activity(‫األحداث‬ ‫مع‬ ‫تتعامل‬ ‫التي‬ ‫و‬
• On Create
• On Start
• Om Restore Instance State
• On Resume
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
12
‫التشغيل‬ ‫وضع‬ ‫في‬ ‫النشاط‬ ‫يكون‬ ‫عندما‬ ‫ھي‬ ‫و‬ ‫الثانية‬ ‫المرحلة‬ ‫في‬ ‫أما‬
)Running(‫التالية‬ ‫األحداث‬ ‫مع‬ ‫يتعامل‬ ‫فإنه‬:
• On Start
• On Restart
• On Resume
• On Push
• On Save Instance State
‫وضعية‬ ‫في‬ ‫يكون‬ ‫فإنه‬ ‫أخر‬ ‫نشاط‬ ‫إلى‬ ‫االنتقال‬ ‫و‬ ‫يعمل‬ ‫النشاط‬ ‫بينما‬ ‫و‬
‫المؤقت‬ ‫اإليقاف‬)Paused(‫األحداث‬ ‫مع‬ ‫معه‬ ‫التعامل‬ ‫يمكن‬ ‫الذي‬ ‫و‬:
• On Save Instance State
• On Resume
• On Stop
‫تعت‬ ‫التي‬ ‫و‬ ‫األخيرة‬ ‫المرحلة‬ ‫أما‬‫إلغاؤ‬ ‫يتم‬ ‫التي‬ ‫و‬ ‫النشاط‬ ‫نھاية‬ ‫بر‬‫م‬ ‫ه‬‫ن‬
‫الذاكرة‬)Destroyed(‫الوحيد‬ ‫الحدث‬ ‫تنفيذ‬ ‫يتم‬ ‫و‬:
• On Destroy
‫الزناد‬/‫الحدث‬)Intent(
‫ترجمة‬ ‫أقرب‬ ‫زناد‬ ‫أن‬ ‫أرى‬ ‫لكن‬ ‫و‬ ‫غرض‬ ‫أو‬ ‫قصد‬ ‫إلى‬ ‫يترجم‬ ‫الذي‬ ‫و‬
‫ما‬ ‫عمل‬ ‫إلتمام‬ ‫يستخدم‬ ‫التي‬ ‫و‬ ‫العربية‬ ‫باللغة‬ ‫للفھم‬،‫في‬ ‫مثال‬
‫أ‬ ‫انترنت‬ ‫صفحة‬ ‫استدعاء‬ ‫عند‬ ‫أو‬ ‫شاشة‬ ‫مثل‬ ‫جديد‬ ‫نشاط‬ ‫استدعاء‬‫و‬
‫التي‬ ‫األمور‬ ‫من‬ ‫غيرھا‬ ‫و‬ ‫االتصاالت‬ ‫قائمة‬ ‫في‬ ‫عنصر‬ ‫عن‬ ‫البحث‬
‫المستخدم‬ ‫طلب‬ ‫على‬ ‫بناء‬ ‫تستخدم‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
13
‫الخدمة‬)Service(
‫على‬ ‫تحتوي‬ ‫ال‬ ‫بالعادة‬ ‫و‬ ‫مثال‬ ‫الخلفية‬ ‫في‬ ‫كذلك‬ ‫وتبقى‬ ‫لتعمل‬ ‫تستخدم‬
‫مشغل‬ ‫بتشغيل‬ ‫قمت‬ ‫و‬ ‫جربت‬ ‫لو‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬ ‫مستخدم‬ ‫واجھة‬
‫الموسيقى‬)Media Player(‫فيمكنك‬‫بريدك‬ ‫تصفح‬ ‫و‬ ‫منه‬ ‫الخروج‬
‫في‬ ‫و‬ ‫الموسيقى‬ ‫تسمع‬ ‫مازلت‬ ‫الوقت‬ ‫نفس‬ ‫في‬ ‫و‬ ‫مالحظاتك‬ ‫كتابة‬ ‫أو‬
‫كـ‬ ‫بالخلفية‬ ‫كخدمة‬ ‫تعمل‬ ‫الموسيقية‬ ‫فإن‬ ‫الحالة‬ ‫ھذه‬)Service(.
‫المحتوى‬ ‫تبادل‬ ‫و‬ ‫تزويد‬)Content Provider(
‫أو‬ ‫ويب‬ ‫تطبيق‬ ‫عبر‬ ‫مثال‬ ‫خارجي‬ ‫محتوى‬ ‫أي‬ ‫مناداة‬ ‫ذلك‬ ‫عبر‬ ‫يمكنك‬
‫مبادلة‬ ‫في‬ ‫حتى‬‫أن‬ ‫يمكنك‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬ ‫التطبيقات‬ ‫بين‬ ‫المحتوى‬
‫تطبيق‬ ‫في‬ ‫االتصال‬ ‫عناوين‬ ‫لقائمة‬ ‫تصل‬)Contacts(.
‫النشاط‬ ‫أشكال‬)Activity(
‫نافذة‬ ‫عن‬ ‫عبارة‬ ‫يكون‬)Window(‫أو‬ ‫صغيرة‬ ‫فتكون‬ ‫فقد‬ ‫متعددة‬
‫وضعيات‬ ‫بأربع‬ ‫تتعامل‬ ‫فإنھا‬ ‫عليھا‬ ‫الكائنات‬ ‫لتوضع‬ ‫و‬ ‫الشاشة‬ ‫مليء‬
‫مختلفة‬
‫س‬ ‫بشكل‬ ‫عرض‬‫طري‬)Linear Layout(
‫بأسف‬ ‫يقع‬ ‫عنصر‬ ‫كل‬ ‫أي‬ ‫سطري‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬‫ل‬‫العنصر‬
‫يليه‬ ‫الذي‬،‫المختار‬ ‫الوضع‬ ‫بحسب‬ ‫بمحاذاته‬ ‫أو‬)vertical or
horizontal.(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
14
‫نموذج‬ ‫بشكل‬)Frame Layout(
‫باليسار‬ ‫العليا‬ ‫الجھة‬ ‫من‬ ‫ابتداء‬ ‫متتالي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬.
‫عالئقي‬ ‫بشكل‬)Relative Layout(
‫بعد‬ ‫زر‬ ‫تضع‬ ‫أن‬ ‫مثال‬ ‫أي‬ ‫بينھا‬ ‫فيما‬ ‫عالئقي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬
‫بين‬ ‫ما‬ ‫مساحة‬ ‫لتملئ‬ ‫أو‬ ‫الفالني‬ ‫العنصر‬ ‫قبل‬ ‫و‬ ‫الفالني‬ ‫العنصر‬
‫عنصر‬)A(‫عنصر‬ ‫و‬)B(.
‫جدولي‬ ‫بشكل‬)Table Layout(
‫خلية‬ ‫داخل‬ ‫كائن‬ ‫كل‬ ‫وضع‬ ‫يمكن‬ ‫حيث‬ ‫جدولي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬
‫في‬ ‫الجداول‬ ‫تصميم‬ ‫في‬ ‫الحال‬ ‫كما‬)HTML(.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
15
‫قاموس‬‫المصطلحات‬
‫و‬ ‫االختصارات‬ ‫و‬ ‫المسميات‬ ‫بعض‬ ‫على‬ ‫نتعرف‬ ‫سوف‬ ‫القسم‬ ‫ھذا‬ ‫في‬
‫لكي‬ ‫ھنا‬ ‫بتعريفھا‬ ‫لنقوم‬ ‫و‬ ‫الكتاب‬ ‫في‬ ‫علينا‬ ‫ستمر‬ ‫التي‬ ‫المصطلحات‬
‫نحتاج‬ ‫ال‬ ‫لكي‬ ‫الكتاب‬ ‫أقسام‬ ‫باقي‬ ‫شرح‬ ‫أثناء‬ ‫قدما‬ ‫المضي‬ ‫نستطيع‬
‫مرة‬ ‫كل‬ ‫في‬ ‫تعريفھا‬ ‫إلى‬‫بذكرھا‬ ‫نقوم‬
SDK (Software Development Kit)
‫المجموعات‬ ‫تحوي‬ ‫والتي‬ ‫البرمجية‬ ‫التطويرية‬ ‫الحزمة‬‫كالسات‬
‫األندرويد‬ ‫تطبيقات‬ ‫تطوير‬ ‫في‬ ‫استخدامھا‬ ‫يمكن‬ ‫التي‬ ‫والدوال‬.
NDA (Native Development Kit)
‫األصلي‬ ‫بالكود‬ ‫التطوير‬ ‫حزمة‬
ADT (Android Development Tools)
‫أندرويد‬ ‫تطوير‬ ‫أدوات‬
JDK (Java Development Kit)
‫جافا‬ ‫تطوير‬ ‫أدوات‬
JRE (Java Runtime Environment)
‫جافا‬ ‫تشغيل‬ ‫بيئة‬
JVM (Java Virtual Machine)
‫آلة‬‫االفتراضية‬ ‫جافا‬
AVD (Android Virtual Device)
‫جھاز‬ ‫محاكي‬‫أندرويد‬
AVDM (Android Virtual Device Manager)
‫أندرويد‬ ‫أجھزة‬ ‫محاكي‬ ‫مدير‬
APK (Android Package)
‫للتطبيق‬ ‫النھائي‬ ‫التنفيذي‬ ‫الملف‬ ‫ھو‬ ‫و‬ ‫أندرويد‬ ‫حزمة‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
16
DDMS (Dalvik Debug Monitor Server)
‫الجھاز‬ ‫محاكي‬ ‫مراقبة‬ ‫أداة‬
GPS (Global Position System)
‫عبر‬ ‫العالمي‬ ‫التوضع‬ ‫نظام‬‫األقمار‬‫الصناعية‬
CMD (Command Line)
‫سطر‬‫األوامر‬
ADB (Android Debug Bridge)
‫ج‬‫لمراقبة‬ ‫أندرويد‬ ‫أجھزة‬ ‫مع‬ ‫التواصل‬ ‫سر‬‫األداء‬‫معالجة‬ ‫و‬‫األخطاء‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
17
‫تر‬‫التطوير‬ ‫بيئة‬ ‫كيب‬
‫مھما‬ ‫نقطة‬ ‫أي‬ ‫إغفال‬ ‫عدم‬ ‫اإلمكان‬ ‫قدر‬ ‫سأحاول‬ ‫التركيب‬ ‫عملية‬ ‫في‬
‫البساطة‬ ‫حول‬ ‫يدور‬ ‫فكتابنا‬ ‫بالصور‬ ‫بتوثيقھا‬ ‫سأقوم‬ ‫و‬ ‫صغيرة‬ ‫كانت‬
‫حج‬ ‫صغيرة‬ ‫خطوة‬ ‫تقف‬ ‫ال‬ ‫لكي‬ ‫اإلمكان‬ ‫قد‬ ‫شيء‬ ‫كل‬ ‫تبسيط‬ ‫ھي‬ ‫و‬‫ر‬
‫التطبيقات‬ ‫تطوير‬ ‫لتعلم‬ ‫طريقنا‬ ‫في‬ ‫عثرة‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
18
‫الخطوة‬‫األولى‬)Java SE(
‫حزمة‬ ‫إلى‬ ‫نحتاج‬ ‫البداية‬ ‫في‬)Java SE(‫إلى‬ ‫اختصارا‬)Java
Standard Edition(‫تحديدا‬ ‫و‬)JDK 6(‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬
‫من‬ ‫كل‬)JDK(‫إلى‬ ‫اختصارا‬(Java Development Kit(‫و‬
)JRE(‫إلى‬ ‫اختصارا‬)Java Runtime Environment(‫ال‬ ‫و‬
‫بوجود‬ ‫يكتفي‬)JRE(‫بتحميل‬ ‫قم‬ ‫ولذا‬ ‫فقط‬)JDK(‫التي‬ ‫و‬ ‫كاملة‬
‫معا‬ ‫االثنين‬ ‫على‬ ‫تحتوي‬‫االنترنت‬ ‫موقع‬ ‫من‬ ‫تحميلھا‬ ‫يمكن‬ ‫التي‬ ‫و‬:
http://java.sun.com/javase/downloads/index.jsp
‫الص‬ ‫فتح‬ ‫بعد‬‫ضمن‬ ‫مبين‬ ‫ھو‬ ‫كما‬ ‫اختر‬ ‫خيارات‬ ‫عدة‬ ‫لك‬ ‫ستظھر‬ ‫فحة‬
‫اإلطار‬:
‫حالتنا‬ ‫في‬ ‫كما‬ ‫بك‬ ‫الخاص‬ ‫التشغيل‬ ‫نظام‬ ‫بتحديد‬ ‫قم‬ ‫التالية‬ ‫الشاشة‬ ‫في‬
‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫ھذه‬)Windows(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
19
‫طريق‬ ‫عن‬ ‫ذلك‬ ‫بتجاھل‬ ‫قم‬ ‫التسجيل‬ ‫منك‬ ‫تطلب‬ ‫شاشة‬ ‫ظھور‬ ‫عند‬
‫على‬ ‫الضغط‬)Skip(‫التالي‬ ‫القوس‬ ‫في‬ ‫موضح‬ ‫ھو‬ ‫كما‬
‫ب‬‫استخدام‬ ‫في‬ ‫الموقع‬ ‫سيخيرك‬ ‫ذلك‬ ‫عد‬)Sun Download
Manager(‫حدث‬ ‫حال‬ ‫في‬ ‫التحميل‬ ‫إكمال‬ ‫في‬ ‫يساعدك‬ ‫الذي‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
20
‫ھو‬ ‫كما‬ ‫الوصلة‬ ‫من‬ ‫مباشرة‬ ‫الملف‬ ‫تحميل‬ ‫يمكنك‬ ‫كما‬ ‫و‬ ‫انقطاع‬
‫التالية‬ ‫الصورة‬ ‫في‬ ‫موضح‬
‫الملف‬ ‫تحميل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬ ‫ذلك‬ ‫بعد‬
‫حفظ‬ ‫زر‬ ‫على‬ ‫اضغط‬)Save(‫لك‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬‫و‬ ‫التالية‬ ‫الشاشة‬
‫جھازك‬ ‫على‬ ‫محدد‬ ‫مكان‬ ‫في‬ ‫الملف‬ ‫حفظ‬ ‫من‬ ‫تمكنك‬ ‫التي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
21
‫يمكنك‬ ‫الحقا‬ ‫و‬ ‫الحال‬ ‫الوقت‬ ‫في‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫الملف‬ ‫بحفظ‬ ‫قم‬
‫عملية‬ ‫ستبدأ‬ ‫الملف‬ ‫حفظ‬ ‫بعد‬ ‫و‬ ‫أمن‬ ‫مكان‬ ‫في‬ ‫منه‬ ‫بنسخة‬ ‫االحتفاظ‬
‫االنترنت‬ ‫سرعة‬ ‫على‬ ‫بناء‬ ‫الوقت‬ ‫بعد‬ ‫تستغرق‬ ‫قد‬ ‫التي‬ ‫و‬ ‫التحميل‬
‫لديك‬
‫حجم‬‫تقريبا‬ ‫الملف‬)70(‫بايت‬ ‫ميجا‬،‫سطح‬ ‫على‬ ‫أيقونته‬ ‫ستجد‬
‫التالي‬ ‫بالشكل‬ ‫المكتب‬
‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫اإلعداد‬ ‫برنامج‬ ‫لتشغيل‬ ‫الملف‬ ‫على‬ ‫مرتين‬ ‫بالنقر‬ ‫قم‬
‫قبول‬ ‫على‬ ‫اضغط‬ ‫بھذه‬ ‫شبيھة‬)Accept(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
22
‫تود‬ ‫التي‬ ‫المكونات‬ ‫عن‬ ‫اإلعداد‬ ‫برنامج‬ ‫سيسألك‬ ‫التالية‬ ‫الشاشة‬ ‫في‬
‫بتغيير‬ ‫تقم‬ ‫ال‬ ‫تحميلھا‬‫التالي‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫و‬ ‫شيء‬)Next(
‫اإلعداد‬ ‫لعملية‬ ‫تمھيدا‬ ‫الجھاز‬ ‫على‬ ‫نفسه‬ ‫بفك‬ ‫البرنامج‬ ‫سيبدأ‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
23
‫الھدف‬ ‫المجلد‬ ‫بتغيير‬ ‫فيھا‬ ‫تخيرك‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫قليلة‬ ‫دقائق‬ ‫بعد‬
‫التالي‬ ‫زر‬ ‫اختر‬ ‫و‬ ‫شيء‬ ‫بتغيير‬ ‫تقم‬ ‫ال‬ ‫للبرنامج‬)Next(
‫نفسه‬ ‫إعداد‬ ‫في‬ ‫البرنامج‬ ‫يبدأ‬ ‫الخطوة‬ ‫ھذه‬ ‫في‬‫الجھاز‬ ‫على‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
24
‫و‬ ‫اإلعداد‬ ‫عملية‬ ‫في‬ ‫بنجاحه‬ ‫اإلعداد‬ ‫برنامج‬ ‫سيخبرك‬ ‫االنتھاء‬ ‫بعد‬
‫إنھاء‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬)Finish(‫اإلعداد‬ ‫برنامج‬ ‫منك‬ ‫يطلب‬ ‫قد‬
‫الجھاز‬ ‫تشغيل‬ ‫أعد‬ ‫و‬ ‫بذلك‬ ‫فقم‬ ‫الجھاز‬ ‫تشغيل‬ ‫إعادة‬ ‫ضرورة‬
‫لبريمجات‬ ‫النظام‬ ‫دعم‬ ‫ھي‬ ‫و‬ ‫أال‬ ‫األولى‬ ‫بالخطوة‬ ‫قمنا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬
‫جافا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
25
‫الثانية‬ ‫الخطوة‬)Android SDK(
‫بأندرويد‬ ‫الخاصة‬ ‫التطبيقات‬ ‫مطوري‬ ‫حزمة‬ ‫تحميل‬)Android
SDK(
‫االنترنت‬ ‫على‬ ‫التالي‬ ‫العنوان‬ ‫إلى‬ ‫اذھب‬
http://developer.android.com/sdk/index.html
‫المخ‬ ‫الموقع‬ ‫ھو‬ ‫و‬‫اآلن‬ ‫قم‬ ‫جوجل‬ ‫من‬ ‫أندرويد‬ ‫لمطوري‬ ‫صص‬
‫نظام‬ ‫نوع‬ ‫على‬ ‫بناء‬ ‫أمامك‬ ‫مبين‬ ‫ھو‬ ‫كما‬ ‫المطورين‬ ‫حزمة‬ ‫بتحميل‬
‫سنختار‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫بك‬ ‫الخاص‬ ‫التشغيل‬)Windows(،‫بعد‬ ‫و‬
‫االستخدام‬ ‫اتفاقية‬ ‫صفحة‬ ‫إلى‬ ‫بتحويلنا‬ ‫سيقوم‬ ‫ذلك‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
26
‫المستخدم‬ ‫اتفاقية‬ ‫على‬ ‫الموافقة‬ ‫اختر‬ ‫و‬ ‫الصفحة‬ ‫أخر‬ ‫إلى‬ ‫انزل‬‫إن‬
‫أردت‬-( :–‫تحميل‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫و‬)Download(‫عندھا‬ ‫و‬
‫فيھا‬ ‫اضغط‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫البرنامج‬ ‫تحميل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬
‫حفظ‬ ‫زر‬ ‫على‬)Save(
‫التالي‬ ‫الشكل‬ ‫كما‬ ‫الملف‬ ‫حفظ‬ ‫اختيار‬ ‫شاشة‬ ‫ذلك‬ ‫بعد‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
27
‫حفظ‬ ‫زر‬ ‫على‬ ‫انقر‬ ‫ثم‬ ‫المكتب‬ ‫سطح‬ ‫لتكن‬ ‫و‬ ‫الحفظ‬ ‫وجھة‬ ‫بتحديد‬ ‫قم‬
)Save(‫جھازك‬ ‫على‬ ‫البرنامج‬ ‫تحميل‬ ‫عملية‬ ‫ستبدأ‬ ‫عندھا‬ ‫و‬
‫تقريبا‬ ‫البرنامج‬ ‫حجم‬)22(‫ملف‬ ‫لك‬ ‫سيظھر‬ ‫االنتھاء‬ ‫بعد‬ ‫و‬ ‫ميجابايت‬
‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫مضغوط‬
‫مثل‬ ‫الضغط‬ ‫فك‬ ‫برامج‬ ‫باستخدام‬ ‫الملف‬ ‫ضغط‬ ‫فك‬ ‫يمكنك‬
)WinZip(‫ا‬ ‫فمجرد‬ ‫تملكه‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫و‬ ‫تملكه‬ ‫كنت‬ ‫إن‬‫لضغط‬
‫التشغيل‬ ‫نظام‬ ‫فإن‬ ‫عليه‬)Windows(‫سيفتح‬ ‫و‬ ‫الخاصية‬ ‫ھذه‬ ‫يدعم‬
‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المضغوط‬ ‫الملف‬ ‫محتويات‬ ‫به‬ ‫مجلد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
28
‫و‬ ‫السحب‬ ‫طريق‬ ‫عن‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫المجلد‬ ‫بسحب‬ ‫قم‬ ‫اآلن‬
‫اختيار‬ ‫و‬ ‫عليه‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫الفأرة‬ ‫بزر‬ ‫اإلفالت‬
‫نسخ‬)Copy(‫ا‬ ‫سطح‬ ‫إلى‬ ‫أذھب‬ ‫ثم‬‫زر‬ ‫قائمة‬ ‫من‬ ‫اختر‬ ‫و‬ ‫لمكتب‬
‫لصق‬ ‫األيمن‬ ‫الفأرة‬)Paste(‫كما‬ ‫الضغط‬ ‫فك‬ ‫عملية‬ ‫ستبدأ‬ ‫عندھا‬ ‫و‬
‫التالية‬ ‫الشاشة‬ ‫في‬
‫سطح‬ ‫على‬ ‫جديد‬ ‫مجلد‬ ‫ستجد‬ ‫الضغط‬ ‫فك‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬
‫الملف‬ ‫باسم‬ ‫المكتب‬)android-sdk-windows(‫بالضغط‬ ‫قم‬
‫محتوياته‬ ‫لك‬ ‫ليظھر‬ ‫لفتحه‬ ‫المجلد‬ ‫على‬ ‫المضاعف‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
29
‫التنفيذي‬ ‫الملف‬ ‫بتشغيل‬ ‫قم‬)SDK Setup(‫تحميل‬ ‫عملية‬ ‫في‬ ‫لتبدأ‬
‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫ستظھر‬ ‫و‬ ‫أندرويد‬ ‫موقع‬ ‫من‬ ‫اإلعداد‬ ‫ملفات‬ ‫أخر‬
‫أثناء‬ ‫خطاء‬ ‫عملية‬ ‫وجود‬ ‫الشاشة‬ ‫تظھر‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫ترى‬ ‫كما‬
‫عبر‬ ‫التخاطب‬ ‫من‬ ‫اإلعداد‬ ‫برنامج‬ ‫تمكن‬ ‫لعدم‬ ‫ذلك‬ ‫و‬ ‫التحميل‬ ‫عملية‬
‫بروتوكول‬)https(‫على‬ ‫يكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫الشاشة‬ ‫لك‬ ‫تظھر‬ ‫ال‬ ‫قد‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
30
‫في‬ ‫حاولوا‬ ‫ممن‬ ‫الكثيرين‬ ‫لكن‬ ‫و‬ ‫مخصصة‬ ‫أمان‬ ‫إعدادات‬ ‫أي‬ ‫جھازك‬
‫طريقة‬ ‫بشرح‬ ‫سنقوم‬ ‫لذا‬ ‫و‬ ‫المشكلة‬ ‫ھذه‬ ‫واجھوا‬ ‫التحميل‬ ‫عملية‬
‫تواجھك‬ ‫لم‬ ‫حال‬ ‫في‬ ‫التي‬ ‫و‬ ‫تليھا‬ ‫التي‬ ‫للخطوة‬ ‫ننتقل‬ ‫ثم‬ ‫من‬ ‫و‬ ‫حلھا‬
‫ل‬ ‫تظھر‬ ‫أن‬ ‫المفروض‬ ‫من‬ ‫البداية‬ ‫منذ‬ ‫مشاكل‬ ‫أي‬‫ك‬
‫إغالق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫اآلن‬)Close(‫مثل‬ ‫أخرى‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫ھذه‬
‫إلغاء‬ ‫زر‬ ‫علة‬ ‫بالضغط‬ ‫قم‬)Cancel(‫الرئيسية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
‫االختيار‬ ‫إلى‬ ‫اذھب‬ ‫عندھا‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫اإلعداد‬ ‫لبرنامج‬
‫إعدادات‬)Settings(‫بالتالية‬ ‫شبيه‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
31
‫الخيار‬ ‫زر‬ ‫باختيار‬ ‫قم‬ ‫اآلن‬)Force Https(‫العمل‬ ‫عن‬ ‫ليتغاضى‬
‫بروتوكول‬ ‫ضمن‬)Https(‫إعدادات‬ ‫تستخدم‬ ‫كنت‬ ‫حال‬ ‫في‬ ‫و‬
‫في‬ ‫الفارغة‬ ‫المربعات‬ ‫في‬ ‫بكتابتھا‬ ‫قم‬ ‫جھازك‬ ‫على‬ ‫خاصة‬ ‫بروكسي‬
‫يعلوه‬ ‫الذي‬ ‫الخيار‬ ‫اذھب‬ ‫الشاشة‬ ‫نفس‬ ‫من‬ ‫و‬ ‫ثم‬ ‫األعلى‬
)Available Packages(‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫الشجر‬ ‫فرد‬ ‫عند‬ ‫و‬‫أندرويد‬ ‫حول‬ ‫المتوفرة‬ ‫و‬ ‫األنظمة‬ ‫كل‬ ‫لك‬ ‫ستظھر‬ ‫ة‬
‫فقط‬ ‫تقوم‬ ‫أو‬ ‫معلمة‬ ‫جميعا‬ ‫عليھا‬ ‫اإلبقاء‬ ‫يمكنك‬ ‫لحالتنا‬ ‫بالنسبة‬ ‫و‬
‫بتحديد‬)1.6(‫الكتاب‬ ‫ھذا‬ ‫في‬ ‫أمثلتنا‬ ‫حوله‬ ‫ستكون‬ ‫يوف‬ ‫الذي‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
32
‫اخترنا‬ ‫لماذا‬ ‫البعض‬ ‫يتساءل‬ ‫قد‬)1.6(‫نظام‬ ‫أحدث‬ ‫نختر‬ ‫لم‬ ‫و‬)2.1(‫؟‬
‫قرابة‬ ‫أن‬ ‫ھو‬ ‫ببساطة‬ ‫السبب‬ ‫و‬)50(%‫في‬ ‫المتوفرة‬ ‫األجھزة‬ ‫من‬
‫بنظام‬ ‫تعمل‬ ‫األسواق‬)1.6(.‫في‬ ‫تتوفر‬ ‫لم‬ ‫األحدث‬ ‫النسخ‬ ‫أن‬ ‫كما‬
‫تلقائي‬ ‫بشكل‬ ‫يدعم‬ ‫أندرويد‬ ‫فإن‬ ‫ذلك‬ ‫من‬ ‫األھم‬ ‫و‬ ‫بعد‬ ‫العربية‬ ‫أسواقنا‬
‫سابق‬ ‫نظام‬ ‫على‬ ‫صممت‬ ‫التي‬ ‫التطبيقات‬ ‫األحدث‬ ‫تشغيله‬ ‫نظم‬ ‫في‬.‫كما‬
‫موجھة‬ ‫األسواق‬ ‫في‬ ‫المتوفرة‬ ‫التطبيقات‬ ‫أكثر‬ ‫أن‬‫في‬ ‫و‬ ‫النظام‬ ‫لھذا‬
‫نظام‬ ‫على‬ ‫جھاز‬ ‫تملك‬ ‫و‬ ‫مثلي‬ ‫كنت‬ ‫حال‬)1.5(‫في‬ ‫المتوفر‬ ‫ھو‬ ‫و‬
‫و‬ ‫مشاكل‬ ‫أي‬ ‫بدون‬ ‫أيضا‬ ‫عليه‬ ‫سيعمل‬ ‫تطبيقك‬ ‫فإن‬ ‫العربية‬ ‫األسواق‬
‫كل‬ ‫أن‬ ‫حيث‬ ‫بھذا‬ ‫االكتفاء‬ ‫أو‬ ‫جميعا‬ ‫تحميلھا‬ ‫في‬ ‫الخيار‬ ‫لك‬ ‫بالنھاية‬
‫يمكنك‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫في‬ ‫طويل‬ ‫وقت‬ ‫إلى‬ ‫تحتاج‬ ‫ھذه‬ ‫من‬ ‫عنصر‬
‫أي‬ ‫في‬‫السابقة‬ ‫الخطوات‬ ‫نفس‬ ‫بإتباع‬ ‫تحميلھا‬ ‫و‬ ‫العودة‬ ‫وقت‬.
‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫التحميل‬ ‫ھدف‬ ‫العناصر‬ ‫اختيار‬ ‫بعد‬ ‫و‬ ‫اآلن‬
)Install Selected(‫لك‬ ‫لتظھر‬ ‫الشاشة‬ ‫يمين‬ ‫أسفل‬ ‫في‬ ‫الموجود‬ ‫و‬
‫االستخدام‬ ‫اتفاقية‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫بالتالية‬ ‫شبيھة‬ ‫جديدة‬ ‫شاشة‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
33
‫اختيار‬ ‫عبر‬ ‫بالموافقة‬ ‫قم‬)Accept All(‫مرة‬ ‫الجميع‬ ‫على‬ ‫للموافقة‬
‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫واحدة‬)Install(‫شبيه‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫بالتالية‬
‫قم‬ ‫الوقت‬ ‫بعض‬ ‫تأخذ‬ ‫قد‬ ‫التي‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬
‫و‬ ‫التطوير‬ ‫حزمة‬ ‫تحميل‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬ ‫النافذة‬ ‫بإغالق‬
‫الثالثة‬ ‫الخطوة‬ ‫إلى‬ ‫لننتقل‬..
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
34
‫ا‬ ‫الخطوة‬‫لثالثة‬)Eclipse(
‫التطوير‬ ‫بيئة‬)Eclipse(‫كانت‬ ‫االستخدام‬ ‫متعددة‬ ‫تطوير‬ ‫بيئة‬ ‫ھي‬
‫شركة‬ ‫ملك‬)IBM(‫بشكل‬ ‫بتوفيرھا‬ ‫سنوات‬ ‫بضع‬ ‫منذ‬ ‫قامت‬ ‫ثم‬ ‫من‬ ‫و‬
‫يعملون‬ ‫المبرمجين‬ ‫أشھر‬ ‫أن‬ ‫تجد‬ ‫لذا‬ ‫و‬ ‫المصدر‬ ‫مفتوح‬ ‫و‬ ‫مجاني‬
‫اإلضافات‬ ‫تركيب‬ ‫عبر‬ ‫منصات‬ ‫عدة‬ ‫تدعم‬ ‫إذ‬ ‫تطبيقاتھم‬ ‫لتطوير‬ ‫عليھا‬
‫الخاصة‬‫التطوير‬ ‫بيئة‬ ‫نفس‬ ‫طريق‬ ‫عن‬ ‫منصة‬ ‫بكل‬.
‫التالية‬ ‫الوصلة‬ ‫على‬ ‫البرنامج‬ ‫موقع‬ ‫بزيارة‬ ‫قم‬ ‫البداية‬ ‫في‬:
e.org/downloadsEclipsehttp://www.
‫ال‬ ‫التطبيق‬ ‫من‬ ‫إصدارات‬ ‫عدة‬ ‫ستجد‬ ‫أمامك‬ ‫الظاھرة‬ ‫الصفحة‬ ‫في‬
‫أ‬ ‫إلى‬ ‫اذھب‬ ‫و‬ ‫باالرتباك‬ ‫تشعر‬‫النسخة‬ ‫بتحميل‬ ‫لنقوم‬ ‫الصفحة‬ ‫خر‬
‫نحتاج‬ ‫ما‬ ‫كل‬ ‫ھي‬ ‫و‬ ‫فقط‬ ‫األساسية‬)Eclipse Classic 3.5.2(
‫التالية‬ ‫الصفحة‬ ‫إلى‬ ‫لتأخذك‬ ‫عليھا‬ ‫بالضغط‬ ‫قم‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
35
‫طريق‬ ‫عن‬ ‫إما‬ ‫التحميل‬ ‫طريقة‬ ‫اختيار‬ ‫يمكن‬ ‫الصفحة‬ ‫ھذه‬ ‫طريق‬ ‫عن‬
‫بروتوكول‬)Torrent(‫الخوادم‬ ‫أحد‬ ‫طريق‬ ‫عن‬ ‫مباشر‬ ‫بشكل‬ ‫أو‬
‫ال‬ ‫توفر‬ ‫التي‬‫تطبيق‬،‫استخدام‬ ‫دائما‬ ‫أفضل‬ ‫لكني‬ ‫و‬ ‫ذلك‬ ‫في‬ ‫الخيار‬ ‫لك‬
‫ھو‬ ‫كما‬ ‫أخرى‬ ‫تطبيقات‬ ‫أي‬ ‫إلى‬ ‫حاجتھا‬ ‫لعدم‬ ‫المباشرة‬ ‫الوصالت‬
‫الصورة‬ ‫في‬ ‫المربع‬ ‫في‬ ‫موضح‬.
‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬ ‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫اختياره‬ ‫بعد‬
‫حفظ‬ ‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬)Save(‫قم‬ ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫ثم‬ ‫من‬ ‫و‬
‫ب‬‫المكتب‬ ‫سطح‬ ‫ليكن‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫الحفظ‬ ‫ھدف‬ ‫تحديد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
36
‫الحفظ‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫بعد‬)Save(‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬
‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬
‫و‬ ‫لديھم‬ ‫االنترنت‬ ‫سرعة‬ ‫على‬ ‫بناء‬ ‫الوقت‬ ‫بعض‬ ‫العملية‬ ‫منك‬ ‫تأخذ‬ ‫قد‬
‫باسم‬ ‫مضغوط‬ ‫ملف‬ ‫ستجد‬ ‫انتھائھا‬ ‫عند‬)Eclipsee-SDK-3.5.2-
win32(‫سط‬ ‫على‬‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬ ‫المكتب‬ ‫ح‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
37
‫قرابة‬ ‫البرنامج‬ ‫حجم‬)163(‫برنامج‬ ‫تملك‬ ‫كنت‬ ‫حال‬ ‫في‬ ‫و‬ ‫ميجابايت‬
‫مثل‬ ‫الضغط‬ ‫لفك‬)Win Zip(‫سطح‬ ‫على‬ ‫البرنامج‬ ‫فك‬ ‫فيمكنك‬
‫التشغيل‬ ‫نظام‬ ‫ليقوم‬ ‫عليه‬ ‫المضاعف‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫مباشرة‬ ‫المكتب‬
)Windows(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫بفتحه‬:
‫بسح‬ ‫اآلن‬ ‫قم‬‫و‬ ‫السحب‬ ‫خاصية‬ ‫عبر‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫المجلد‬ ‫ب‬
‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫بالفأرة‬ ‫اإلفالت‬
‫نسخ‬ ‫خيار‬)Copy(‫بزر‬ ‫قم‬ ‫و‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫اذھب‬ ‫ثم‬ ‫ومن‬
‫خيار‬ ‫باختيار‬ ‫األيمن‬ ‫الفأرة‬)Paste(‫الملف‬ ‫ضغط‬ ‫فك‬ ‫عملية‬ ‫لتبدأ‬:
‫ال‬ ‫سطح‬ ‫على‬ ‫مجلد‬ ‫ستجد‬ ‫الخطوة‬ ‫ھذه‬ ‫بعد‬‫باسم‬ ‫لديك‬ ‫مكتب‬
)Eclipse(‫محتوياته‬ ‫لديك‬ ‫ليفتح‬ ‫عليه‬ ‫المضاعف‬ ‫بالضغط‬ ‫قم‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
38
‫من‬ ‫أنھا‬ ‫إذ‬ ‫التطوير‬ ‫بيئة‬ ‫تنصيب‬ ‫عملية‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫وبھذا‬
‫على‬ ‫إعداد‬ ‫عملية‬ ‫إلى‬ ‫تحتاج‬ ‫ال‬ ‫التي‬ ‫و‬ ‫المحمولة‬ ‫التطبيقات‬ ‫نوعية‬
‫مباشرة‬ ‫التنفيذي‬ ‫البرنامج‬ ‫تشغيل‬ ‫طريق‬ ‫عن‬ ‫مباشرة‬ ‫تعمل‬ ‫و‬ ‫الجھاز‬
‫بھذ‬‫تليھا‬ ‫التي‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫الثالثة‬ ‫الخطوة‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫ا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
39
‫الرابعة‬ ‫الخطوة‬)ADT(
‫إضافة‬ ‫تحميل‬)ADT(‫أندرويد‬ ‫لتطبيقات‬ ‫الموجھة‬ ‫التطوير‬ ‫لدعم‬
‫على‬)Eclipse(
‫برنامج‬ ‫بتشغيل‬ ‫قم‬ ‫السابقة‬ ‫الخطوة‬ ‫انتھاء‬ ‫بعد‬)Eclipse(‫لك‬ ‫لتظھر‬
‫مرة‬ ‫ألول‬ ‫التالية‬ ‫الشاشة‬
‫ا‬ ‫وھذه‬‫يتم‬ ‫التي‬ ‫و‬ ‫بك‬ ‫الخاصة‬ ‫العمل‬ ‫مساحة‬ ‫فيھا‬ ‫تحدد‬ ‫التي‬ ‫لشاشة‬
‫اختيار‬ ‫أو‬ ‫لحقا‬ ‫مكانھا‬ ‫تغيير‬ ‫يمكنك‬ ‫و‬ ‫فيھا‬ ‫مشاريعك‬ ‫ملفات‬ ‫تخزين‬
‫خيار‬)Use this as default and do not ask again(‫و‬
‫بتشغيل‬ ‫فيھا‬ ‫تقوم‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫لك‬ ‫تظھر‬ ‫ال‬ ‫لكي‬ ‫اختيارك‬ ‫تحفظ‬ ‫التي‬
‫التطوير‬ ‫بيئة‬
‫زر‬ ‫على‬ ‫اآلن‬ ‫اضغط‬‫موافق‬)OK(‫من‬ ‫األولى‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
‫بالتالية‬ ‫والشبيھة‬ ‫التطوير‬ ‫برنامج‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
40
‫الترحيب‬ ‫تبويب‬ ‫لسان‬ ‫تجد‬ ‫الشاشة‬ ‫يسار‬ ‫أعلى‬ ‫في‬)welcome(‫قم‬
‫زر‬ ‫بضغط‬)X(‫الشكل‬ ‫كما‬ ‫التطوير‬ ‫بيئة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫إلغالقه‬
‫التالي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
41
‫إضافة‬ ‫بتحميل‬ ‫لنقوم‬ ‫اآلن‬)ADT(‫القائمة‬ ‫بالذھاب‬ ‫قم‬)Help(‫و‬
‫خيار‬ ‫باختيار‬ ‫قم‬ ‫منھا‬)Install New Software(‫موضح‬ ‫ھو‬ ‫كما‬
‫التالية‬ ‫بالصورة‬
‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫تظھر‬ ‫سوف‬ ‫الخيار‬ ‫لھذا‬ ‫اختيارك‬ ‫بعد‬
‫التالية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
42
‫زر‬ ‫علة‬ ‫بالضغط‬ ‫قم‬)Add(‫لك‬ ‫لتظھر‬ ‫التطبيق‬ ‫عنوان‬ ‫إلضافة‬
‫التالية‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬
‫بكتابة‬ ‫قم‬)Android(‫اال‬ ‫مربع‬ ‫في‬‫سم‬)Name(‫بكتابة‬ ‫قم‬ ‫و‬
‫مربع‬ ‫في‬ ‫التالي‬ ‫العنوان‬)Location(
eEclipsessl.google.com/android/-https://dl/
‫موافق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫ومن‬)OK(‫سيقوم‬ ‫معدودة‬ ‫دقائق‬ ‫بعد‬ ‫و‬
‫المل‬ ‫عن‬ ‫للبحث‬ ‫باالنترنت‬ ‫باالتصال‬ ‫البرنامج‬‫بالتطبيق‬ ‫الخاصة‬ ‫فات‬
‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
43
‫حرف‬ ‫بإزالة‬ ‫قم‬ ‫الشاشة‬ ‫ھذه‬ ‫لك‬ ‫تظھر‬ ‫لم‬ ‫حال‬ ‫في‬)S(‫عنوان‬ ‫من‬
‫من‬ ‫لتصبح‬ ‫الوصلة‬)https(‫إلى‬)http(‫ھي‬ ‫كما‬ ‫الوصلة‬ ‫باقي‬ ‫ثم‬
‫السابقة‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫بالتأكيد‬ ‫عندھا‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
44
‫ع‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫العناصر‬ ‫كل‬ ‫بتعليم‬ ‫قم‬‫التالي‬ ‫زر‬ ‫لى‬)Next(‫لتظھر‬
‫التالية‬ ‫الشاشة‬ ‫لك‬
‫الصورة‬ ‫كما‬ ‫المستخدم‬ ‫اتفاقية‬ ‫شاشة‬ ‫لتظھر‬ ‫التالي‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬
‫التالية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
45
‫خيار‬ ‫اختيار‬ ‫عبر‬ ‫المستخدم‬ ‫اتفاقية‬ ‫على‬ ‫بالموافقة‬ ‫قم‬)I accept(‫و‬
‫إنھاء‬ ‫زر‬ ‫اختر‬ ‫ثم‬ ‫من‬)Finish(‫كما‬ ‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫التالية‬ ‫الصورة‬
‫تحذير‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫االنترنت‬ ‫عبر‬ ‫التحميل‬ ‫من‬ ‫انتھائه‬ ‫بعد‬ ‫و‬
‫قم‬ ‫جھازك‬ ‫على‬ ‫التنصيب‬ ‫تود‬ ‫التي‬ ‫التطبيقات‬ ‫من‬ ‫المزيد‬ ‫ھناك‬ ‫بأن‬
‫موافق‬ ‫زر‬ ‫على‬ ‫بالضغط‬
‫تخبرك‬ ‫أخرى‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫التنصيب‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬ ‫ثم‬
‫التطوير‬ ‫بيئة‬ ‫تطبيق‬ ‫تشغيل‬ ‫إعادة‬ ‫إلى‬ ‫بحاجة‬ ‫بأنك‬)Eclipse(
‫موافق‬ ‫زر‬ ‫على‬ ‫فاضغط‬ ‫نافذة‬ ‫الجديدة‬ ‫اإلعدادات‬ ‫لتصبح‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
46
‫التشغيل‬ ‫ستعاود‬ ‫ثم‬ ‫من‬ ‫و‬ ‫ألي‬ ‫بشكل‬ ‫باإلغالق‬ ‫التطوير‬ ‫بيئة‬ ‫ستقوم‬
‫لديك‬ ‫التطوير‬ ‫بيئة‬ ‫تصبح‬ ‫بھذا‬ ‫و‬ ‫أخرى‬ ‫مرة‬‫البرمجة‬ ‫إمكانية‬
‫الندرو‬ ‫الموجھة‬‫يد‬.
‫الخامسة‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫الرابعة‬ ‫الخطوة‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬
‫و‬‫البرمجة‬ ‫في‬ ‫نبدأ‬ ‫بعدھا‬ ‫و‬ ‫األخيرة‬.
‫القائمة‬ ‫من‬window‫خيار‬ ‫باختيار‬ ‫قم‬)Preferences(‫ھو‬ ‫كما‬
‫التالية‬ ‫بالصورة‬ ‫موضح‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
47
‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
48
‫باختيار‬ ‫قم‬ ‫اليسرى‬ ‫الجھة‬ ‫في‬ ‫الشاشة‬ ‫أعلى‬ ‫من‬)Android(‫قد‬ ‫و‬
‫موافق‬ ‫على‬ ‫اضغط‬ ‫ظھورھا‬ ‫حال‬ ‫في‬ ‫و‬ ‫خطاء‬ ‫شاشة‬ ‫لك‬ ‫تظھر‬
‫وت‬‫التالي‬ ‫بالشكل‬ ‫الشاشة‬ ‫لك‬ ‫لتصبح‬ ‫جاھلھا‬:
‫استعراض‬ ‫زر‬ ‫من‬ ‫اآلن‬)Browse(‫ملفات‬ ‫مكان‬ ‫عن‬ ‫بالبحث‬ ‫قم‬
‫التي‬ ‫و‬ ‫جھازنا‬ ‫على‬ ‫تحميلھا‬ ‫في‬ ‫سابقا‬ ‫قمنا‬ ‫التي‬ ‫و‬ ‫التطوير‬ ‫حزمة‬
‫الصورة‬ ‫كما‬ ‫الرئيسي‬ ‫المجلد‬ ‫نختار‬ ‫و‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫كانت‬
‫التالية‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
49
‫موافق‬ ‫زر‬ ‫على‬ ‫نضغط‬ ‫ثم‬)OK(‫الشا‬ ‫لتصبح‬‫في‬ ‫كما‬ ‫لدينا‬ ‫شة‬
‫التالي‬ ‫الشكل‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
50
‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫اآلن‬)Apply(‫يمين‬ ‫أسفل‬ ‫في‬ ‫الموجود‬ ‫و‬
‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫الجديدة‬ ‫اإلعدادات‬ ‫لتطبيق‬ ‫الشاشة‬
‫التالية‬:
‫عملية‬ ‫أثناء‬ ‫سابقا‬ ‫بتحميلھا‬ ‫قمنا‬ ‫التي‬ ‫المنصات‬ ‫بعرض‬ ‫تقوم‬ ‫التي‬ ‫و‬
‫التطوير‬ ‫حزمة‬ ‫تنصيب‬.
‫على‬ ‫بالضغط‬ ‫قم‬‫عملية‬ ‫من‬ ‫انتھينا‬ ‫اآلن‬ ‫و‬ ‫النافذة‬ ‫إلغالق‬ ‫موافق‬ ‫زر‬
‫التالية‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫كامل‬ ‫بشكل‬ ‫توابعھا‬ ‫كل‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫إعداد‬
‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫على‬ ‫أكثر‬ ‫للتعرف‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
51
‫األول‬ ‫برنامجك‬
‫و‬ ‫األول‬ ‫بالتطبيق‬ ‫أعيننا‬ ‫نمتع‬ ‫دعنا‬ ‫البرمجة‬ ‫في‬ ‫اإلبحار‬ ‫قبل‬ ‫و‬ ‫لربما‬
‫مدى‬ ‫نشاھد‬‫و‬ ‫األول‬ ‫تطبيقان‬ ‫ببناء‬ ‫سنقوم‬ ‫أننا‬ ‫حيث‬ ‫العمل‬ ‫سھولة‬
‫باسم‬ ‫البرمجة‬ ‫لغات‬ ‫كل‬ ‫لدى‬ ‫عليه‬ ‫تعارف‬ ‫الذي‬)Hell World(
)‫بالعالم‬ ‫أھال‬(‫خرج‬ ‫التي‬ ‫و‬ ‫األولى‬ ‫التطبيق‬ ‫والدة‬ ‫لحظة‬ ‫يعني‬ ‫الذي‬ ‫و‬
‫التحية‬ ‫يبدأھم‬ ‫و‬ ‫العالم‬ ‫إلى‬ ‫بھا‬.
‫إال‬‫أن‬ ‫أرى‬ ‫أني‬)‫ببساطة‬ ‫أندرويد‬(‫أ‬ ‫تطبيق‬ ‫سنبني‬ ‫لذا‬ ‫و‬ ‫أسھل‬‫ندرويد‬
‫نقوم‬ ‫أن‬ ‫بعد‬ ‫و‬ ‫واحد‬ ‫برمجي‬ ‫سطر‬ ‫بدون‬ ‫و‬ ‫بساطة‬ ‫بكل‬ ‫و‬ ‫ببساطة‬
‫سنقوم‬ ‫جديد‬ ‫مشروع‬ ‫بدء‬ ‫خطوات‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫التطبيق‬ ‫ببناء‬
‫عليه‬ ‫برنامجك‬ ‫تشغيل‬ ‫لتستطيع‬ ‫أندرويد‬ ‫جھاز‬ ‫محاكي‬ ‫بإعداد‬.
‫التطوير‬ ‫بيئة‬ ‫بإغالق‬ ‫قمت‬ ‫قد‬ ‫كنت‬ ‫إن‬)Eclipse(‫بإعادة‬ ‫فقم‬
‫ا‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬ ‫اآلن‬ ‫تشغيلھا‬‫لرئيسية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
52
‫ملف‬ ‫العليا‬ ‫القائمة‬ ‫من‬)File(‫باختيار‬ ‫قم‬)New(‫ثم‬)New
Project(‫التالية‬ ‫بالصورة‬ ‫موضح‬ ‫ھو‬ ‫كما‬ ‫جديد‬ ‫مشروع‬ ‫أي‬
‫توصيف‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫جديد‬ ‫مشروع‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫عن‬
‫التالي‬ ‫بالشكل‬ ‫شبيھة‬ ‫ھي‬ ‫و‬ ‫المشروع‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
53
‫التالية‬ ‫الصورة‬ ‫كما‬ ‫أندرويد‬ ‫مشروع‬ ‫منھا‬ ‫اختر‬
‫اض‬ ‫ثم‬‫التالية‬ ‫زر‬ ‫على‬ ‫غط‬)Next(‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
54
‫اسم‬ ‫و‬ ‫التطبيق‬ ‫اسم‬ ‫و‬ ‫المشروع‬ ‫اسم‬ ‫بكتابة‬ ‫فيھا‬ ‫سنقوم‬ ‫حيث‬
‫ھي‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫التي‬ ‫و‬ ‫الھدف‬ ‫المنصة‬ ‫تحديد‬ ‫و‬ ‫النشاط‬ ‫و‬ ‫الحزمة‬
‫الوحيدة‬)1.6(‫لتصبح‬ ‫التالية‬ ‫بالمعلومات‬ ‫الفراغات‬ ‫بمليء‬ ‫قم‬ ‫اآلن‬
‫بھذه‬ ‫شبيھة‬ ‫شاشة‬ ‫لديك‬:
Project Nam: AndroidVerySimple
Build Target: 1.6
Application Name:VerySimple
Package name:com.book.VerySimple
Create Activity:Activity_VerySimple
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
55
‫إنھاء‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬)Finish(‫بالشكل‬ ‫جديد‬ ‫مشروع‬ ‫فتح‬ ‫ليتم‬
‫التالي‬
‫ببن‬ ‫المعالج‬ ‫قام‬ ‫ماذا‬ ‫على‬ ‫نتعرف‬ ‫دعنا‬ ‫اآلن‬‫أبناء‬ ‫بسرد‬ ‫ذلك‬ ‫و‬ ‫لنا‬ ‫ائه‬
‫التالي‬ ‫بالشكل‬ ‫لتكون‬ ‫العنصر‬
‫العنصر‬ ‫فتح‬ ‫قم‬ ‫اآلن‬)Res(‫تحته‬ ‫ليظھر‬)Layout(‫قم‬ ‫ثم‬ ‫ومن‬
‫الملف‬ ‫على‬ ‫مرتين‬ ‫بالنقر‬)main.xml(‫تطبيقك‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
56
‫بوضع‬ ‫بالعالم‬ ‫نرحب‬ ‫أن‬ ‫يجبرنا‬ ‫أندرويد‬ ‫أن‬ ‫نرى‬ ‫و‬ ‫األولى‬)Hello
World(‫الشاش‬ ‫على‬ ‫سيظھر‬ ‫ما‬ ‫ھذا‬ ‫و‬‫البرنامج‬ ‫تشغيل‬ ‫عند‬ ‫ة‬
‫و‬ ‫األول‬ ‫تطبيقنا‬ ‫بتشغيل‬ ‫لنقم‬ ‫و‬ ‫ذلك‬ ‫من‬ ‫أكثر‬ ‫لتعرف‬ ‫داعي‬ ‫ال‬ ‫اآلن‬
‫للخطوة‬ ‫فلننتقل‬ ‫لذا‬ ‫و‬ ‫المحاكي‬ ‫تطبيق‬ ‫إعداد‬ ‫علينا‬ ‫البداية‬ ‫في‬ ‫لكن‬
‫التالية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
57
‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬ ‫بناء‬‫األوامر‬
‫تملك‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬)Eclipse(‫عملية‬ ‫أثناء‬ ‫مشكلة‬ ‫واجھت‬ ‫أو‬
‫بناء‬‫طريق‬ ‫عن‬ ‫المشروع‬ ‫بناء‬ ‫دائما‬ ‫فيمكنك‬ ‫جديد‬ ‫مشروع‬ ‫معالج‬
‫سطر‬‫األوامر‬
‫عليھا‬ ‫ليتعرف‬ ‫النظام‬ ‫في‬ ‫األوامر‬ ‫سطر‬ ‫مسار‬ ‫تعريف‬ ‫علينا‬ ‫البداية‬ ‫في‬
‫جھاز‬ ‫إلى‬ ‫الذھاب‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫و‬ ‫مسار‬ ‫أي‬ ‫في‬ ‫طلبھا‬ ‫عند‬
‫على‬ ‫بالضغط‬ ‫و‬ ‫إبداء‬ ‫القائمة‬ ‫من‬ ‫أو‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫من‬ ‫الكمبيوتر‬
‫الك‬ ‫جھاز‬ ‫أيقونة‬‫إلى‬ ‫الذھاب‬ ‫ثم‬ ‫من‬ ‫و‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫مبيوتر‬
‫خصائص‬)Properties(‫خيارات‬ ‫تبويب‬ ‫لسان‬ ‫إلى‬ ‫الذھاب‬ ‫ثم‬ ‫ومن‬
‫متقدمة‬)Advanced(‫التالي‬ ‫بالشكر‬ ‫لنا‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
58
‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬)Environment Variables(‫وعندھا‬
‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المسارات‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
59
‫تحت‬ ‫و‬ ‫العلوي‬ ‫القسم‬ ‫في‬‫بند‬)User Environment(‫زر‬ ‫اختر‬
‫جديد‬)New(‫بالشكل‬ ‫جديدة‬ ‫شاشة‬ ‫لتظھر‬ ‫جديد‬ ‫مسار‬ ‫لتعريف‬
‫التالي‬
‫التالية‬ ‫بالمعلومات‬ ‫الشاشة‬ ‫بملء‬ ‫سنقوم‬
‫االسم‬ ‫مربع‬ ‫في‬)Name(‫كلمة‬ ‫نكتب‬)Path(‫القيمة‬ ‫مربع‬ ‫في‬ ‫و‬
)Variable Value(‫داخل‬ ‫الموجود‬ ‫األدوات‬ ‫مجلد‬ ‫مسار‬ ‫نضع‬
‫التطوي‬ ‫حزمة‬ ‫مجلد‬‫سطح‬ ‫على‬ ‫سابقا‬ ‫ضغطه‬ ‫بفك‬ ‫قمنا‬ ‫الذي‬ ‫و‬ ‫ر‬
‫التالي‬ ‫بالشكل‬ ‫لتكن‬ ‫و‬ ‫المكتب‬
C:Documents and SettingsUserNameDesktopandroid-sdk-windowstools
‫أن‬ ‫حيث‬)UserName(‫في‬ ‫أو‬ ‫للنظام‬ ‫الحالي‬ ‫المستخدم‬ ‫اسم‬ ‫ھو‬
‫انسخ‬ ‫و‬ ‫إليه‬ ‫فاذھب‬ ‫أخر‬ ‫مكان‬ ‫أي‬ ‫في‬ ‫الملف‬ ‫ضغط‬ ‫بفك‬ ‫قمت‬ ‫حال‬
‫المسا‬ ‫عنوان‬‫مجلد‬ ‫مع‬ ‫كامال‬ ‫ر‬)tools(‫القيمة‬ ‫في‬ ‫ضعه‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
60
‫موافق‬ ‫اضغط‬ ‫ثم‬)OK(‫بالشكل‬ ‫ليكون‬ ‫الجديد‬ ‫المسار‬ ‫إضافة‬ ‫ليتم‬
‫التالي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
61
‫موافق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ذلك‬ ‫بعد‬ ‫ثم‬)OK(‫للشاشة‬ ‫أخرى‬ ‫مرة‬ ‫ثم‬
‫موافق‬ ‫اضغط‬ ‫الرئيسية‬)OK(
‫إلى‬ ‫بالذھاب‬ ‫قم‬ ‫األوامر‬ ‫سطر‬ ‫من‬ ‫األوامر‬ ‫استخدام‬ ‫لتجرب‬ ‫اآلن‬
‫م‬ ‫تشغيل‬‫ابدأ‬ ‫قائمة‬ ‫ن‬)Start >> Run(‫األمر‬ ‫اكتب‬ ‫و‬)CMD(
‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫موافق‬ ‫على‬ ‫اضغط‬ ‫ثم‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
62
‫موافق‬ ‫زر‬ ‫على‬ ‫تضغط‬ ‫عندما‬)OK(‫و‬ ‫سوداء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬
‫التالي‬ ‫بالشكل‬ ‫الشبيھة‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫شاشة‬ ‫ھي‬
‫ترقيمھا‬ ‫و‬ ‫جھازنا‬ ‫في‬ ‫المتواجدة‬ ‫المنصات‬ ‫على‬ ‫لنتعرف‬ ‫البداية‬ ‫في‬
‫الجھاز‬ ‫في‬‫كتابة‬ ‫عبر‬ ‫ذلك‬ ‫و‬‫األمر‬‫التالي‬
android list target
‫زر‬ ‫اضغط‬ ‫ثم‬‫اإلدخال‬)Enter(
‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫لديك‬ ‫المنصات‬ ‫قائمة‬ ‫ستجد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
63
‫رقمھا‬ ‫واحدة‬ ‫منصة‬ ‫سوى‬ ‫لدينا‬ ‫يتوفر‬ ‫ال‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬)1(‫التي‬ ‫و‬
‫سطر‬ ‫عبر‬ ‫بنا‬ ‫الخاص‬ ‫المشروع‬ ‫لبناء‬ ‫سنستخدمھا‬‫األوامر‬
‫بناء‬ ‫لنجرب‬ ‫االن‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬‫األو‬‫ا‬‫مر‬‫علينا‬ ‫فلذا‬
‫كتابة‬‫األمر‬‫التالي‬
android create project -n AndroidVerySimple -p c:1 -k
com.book.VerySimple -a Activity_VerySimple -t 1
‫مالحظة‬)‫سطر‬‫األوامر‬‫النص‬ ‫لكن‬ ‫و‬ ‫واحد‬ ‫سطر‬ ‫على‬ ‫يكتب‬ ‫السابق‬
‫ا‬ ‫لدواعي‬ ‫سطرين‬ ‫على‬ ‫تقسيمه‬ ‫تم‬ ‫ھنا‬‫لكتاب‬(
‫أن‬ ‫حيث‬:
)AndroidVerySimple(‫المشروع‬ ‫اسم‬)Project Name(
‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-n(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
64
)com.book.VerySimple(‫الحزمة‬ ‫اسم‬)Package
Name(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-k(
)Activity_VerySimple(‫النشاط‬ ‫اسم‬)Activity Name(‫و‬
‫البارمت‬ ‫نستخدم‬‫لتعريفھا‬ ‫التالي‬ ‫ر‬)-a(
)c:1(‫جھاز‬ ‫على‬ ‫تخزينه‬ ‫يتم‬ ‫سوف‬ ‫الذي‬ ‫المشروع‬ ‫مسار‬ ‫ھو‬
)Path(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-p(
)1(‫الخطوة‬ ‫في‬ ‫رقمھا‬ ‫استعرضنا‬ ‫التي‬ ‫و‬ ‫نستھدفھا‬ ‫التي‬ ‫المنصة‬
‫السابقة‬)Target(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-t(
‫كت‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬‫سطر‬ ‫ابة‬‫األمر‬‫زر‬ ‫على‬ ‫الضغط‬ ‫و‬ ‫بالكامل‬ ‫ھو‬ ‫كما‬
‫اإلدخال‬)Enter(‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫ستظھر‬
‫يمكنك‬‫اآلن‬‫بتحديده‬ ‫قمنا‬ ‫الذي‬ ‫المجلد‬ ‫داخل‬ ‫المشروع‬ ‫ملفات‬ ‫تصفح‬
‫سابقا‬)c:1(‫المشاريع‬ ‫مساحة‬ ‫نفس‬ ‫اختيار‬ ‫أيضا‬ ‫يمكنك‬ ‫الذي‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
65
‫يستخدمھا‬ ‫التي‬)Eclipse(‫تك‬ ‫التي‬ ‫و‬ ‫المشاريع‬ ‫بناء‬ ‫في‬‫بالعادة‬ ‫ون‬
‫التالي‬ ‫المسار‬ ‫على‬
C:Documents and SettingsUserNameworkspace
‫سطر‬ ‫عبر‬ ‫المعالج‬ ‫قام‬ ‫التي‬ ‫الملفات‬ ‫لتستعرض‬‫األوامر‬‫بإنشائھا‬
‫التالي‬ ‫بالشكل‬ ‫المشروع‬ ‫ملفات‬ ‫لتجد‬ ‫للمسار‬ ‫فلتذھب‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
66
‫محاكي‬ ‫إعداد‬)Android(
‫القا‬ ‫إلى‬ ‫اذھب‬ ‫التطوير‬ ‫لبيئة‬ ‫الرئيسية‬ ‫الشاشة‬ ‫من‬‫ئمة‬)Window(
‫العنصر‬ ‫اختر‬ ‫ثم‬ ‫من‬ ‫و‬)Android SDK and AVD
Manager(‫التالية‬ ‫بالشاشة‬ ‫موضح‬ ‫ھو‬ ‫كما‬
‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
67
‫فيمكنك‬ ‫تقلق‬ ‫فال‬ ‫الشاشة‬ ‫ھذه‬ ‫تفتح‬ ‫ولم‬ ‫مشكلة‬ ‫واجھتك‬ ‫حال‬ ‫في‬
‫بفرد‬ ‫به‬ ‫قمنا‬ ‫الذي‬ ‫المجلد‬ ‫إلى‬ ‫الذھاب‬ ‫عبر‬ ‫يدوي‬ ‫بشكل‬ ‫تشغيلھا‬ ‫دائما‬
‫التطوير‬ ‫حزمة‬‫باسم‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫يتواجد‬ ‫الذي‬ ‫و‬)android-
sdk-windows(‫البرنامج‬ ‫بتشغيل‬ ‫قم‬ ‫و‬)SDK Setup(‫في‬ ‫و‬
‫أن‬ ‫فيھا‬ ‫يمكن‬ ‫أخرى‬ ‫طريقة‬ ‫فھناك‬ ‫تقلق‬ ‫فال‬ ‫أيضا‬ ‫معك‬ ‫يعمل‬ ‫لم‬ ‫حال‬
‫في‬ ‫عنھا‬ ‫سنتحدث‬ ‫التي‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫نبني‬
‫الجزء‬ ‫ھذا‬ ‫أخر‬.
‫بشكل‬ ‫يعمل‬ ‫لديك‬ ‫ما‬ ‫كل‬ ‫بأن‬ ‫لنفترض‬‫السابقة‬ ‫الشاشة‬ ‫ظھرت‬ ‫و‬ ‫سليم‬
‫الخيار‬ ‫إلى‬ ‫فلتذھب‬)Virtual Devices(‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬
)New(‫جھاز‬ ‫إعداد‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫الشاشة‬ ‫يمين‬ ‫أعلم‬ ‫في‬
‫جديد‬ ‫افتراضي‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
68
‫ذلك‬ ‫و‬ ‫االفتراضي‬ ‫الجھاز‬ ‫بيانات‬ ‫بتعريف‬ ‫سنقوم‬ ‫السابقة‬ ‫الشاشة‬ ‫في‬
‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬ ‫بنا‬ ‫خاص‬ ‫اسم‬ ‫بتحديد‬‫إصدارة‬‫نظ‬‫قمنا‬ ‫مما‬ ‫التشغيل‬ ‫ام‬
‫عملية‬ ‫أثناء‬ ‫سابقا‬ ‫بتحميلھا‬‫إعداد‬‫لن‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬ ‫التطوير‬ ‫حزمة‬
‫سوى‬ ‫لدينا‬ ‫يتواجد‬‫اإلصدارة‬)1.6(‫التي‬ ‫الملحقات‬ ‫نعرف‬ ‫ثم‬ ‫من‬ ‫و‬
‫داخلي‬ ‫ذاكرة‬ ‫كرت‬ ‫منھا‬ ‫و‬ ‫الجھاز‬ ‫يدعمھا‬)SD(‫الملحقات‬ ‫بعض‬ ‫و‬
‫اإلضافية‬‫الحقا‬ ‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫على‬ ‫سنتعرف‬ ‫التي‬ ‫و‬.
‫اآل‬‫ن‬‫المحاكي‬ ‫اسم‬ ‫بكتابة‬ ‫قم‬)VM_Android1.6(‫اختر‬ ‫و‬
‫إصدارة‬‫التشغيل‬ ‫نظام‬)1.6(‫بـ‬ ‫الذاكرة‬ ‫كرت‬ ‫حجم‬ ‫بتحديد‬ ‫قم‬ ‫ثم‬ ‫من‬ ‫و‬
)500(‫نقوم‬ ‫لكي‬ ‫الحقا‬ ‫سنحتاجھا‬ ‫التي‬ ‫و‬ ‫ميجا‬‫ب‬‫و‬ ‫التطبيقات‬ ‫تحميل‬
‫التطبيقات‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫التطبيقات‬ ‫سوق‬ ‫من‬ ‫عليھا‬ ‫الملفات‬
‫بنا‬ ‫لنستطيع‬ ‫نوعيتھا‬ ‫و‬ ‫الموجودة‬‫ذلك‬ ‫بعد‬ ‫و‬ ‫مشابھة‬ ‫تطبيقات‬ ‫ء‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
69
‫سنقوم‬‫بإضافة‬‫القسم‬ ‫طريق‬ ‫عن‬ ‫العتاد‬)Hardware(‫زر‬ ‫اختيار‬ ‫و‬
)New(‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫فتظھر‬
‫و‬ ‫الذاكرة‬ ‫كرت‬ ‫خاصية‬ ‫دعم‬ ‫فعلينا‬ ‫الذاكرة‬ ‫كرت‬ ‫حجم‬ ‫اخترنا‬ ‫أننا‬ ‫بما‬
‫سنضيف‬ ‫لذا‬)SD Card Support(‫زر‬ ‫على‬ ‫سنضغط‬ ‫ثم‬ ‫من‬ ‫و‬
)OK(‫ب‬ ‫العملية‬ ‫نفس‬ ‫نكرر‬ ‫و‬‫زر‬ ‫على‬ ‫الضغط‬)New(‫إلضافة‬‫عتاد‬
‫من‬ ‫كل‬ ‫لنختر‬ ‫و‬ ‫جديد‬
GPS Support
Accelerometer
‫التالي‬ ‫بالشكل‬ ‫النھائية‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
70
‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫ذلك‬ ‫بعد‬)Create AVD(‫ليتم‬ ‫قليال‬ ‫انتظر‬ ‫و‬
‫لمحاكي‬ ‫بناء‬ ‫تم‬ ‫بأنه‬ ‫مفادھا‬ ‫رسالة‬ ‫لنا‬ ‫ستظھر‬ ‫بعدھا‬ ‫و‬ ‫المحاكي‬ ‫بناء‬
‫ا‬ ‫في‬ ‫كما‬ ‫بنجاح‬‫التالي‬ ‫لشكل‬
‫موافق‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫بعد‬ ‫و‬)OK(‫قائمة‬ ‫ضمن‬ ‫الجھاز‬ ‫سيظھر‬
‫األجھزة‬‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
71
‫زر‬ ‫على‬ ‫الضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫تحديده‬ ‫سوى‬ ‫عليك‬ ‫ما‬ ‫الجھاز‬ ‫لتشغيل‬ ‫االن‬
)Start(‫للوقت‬ ‫تجاھلھا‬ ‫التالي‬ ‫بالشكل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬
‫اضغط‬ ‫و‬ ‫الحالي‬)Launch(
‫سيبدأ‬ ‫االن‬‫التالي‬ ‫بالشكل‬ ‫لنا‬ ‫ليظھر‬ ‫بالعمل‬ ‫المحاكي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
72
‫الوقت‬ ‫بعض‬ ‫يحاج‬ ‫الذي‬ ‫و‬ ‫المحاكي‬ ‫شغلنا‬ ‫أن‬ ‫بعد‬‫إلقالع‬‫نظام‬
‫بعد‬ ‫لكن‬ ‫و‬ ‫ذلك‬ ‫فلك‬ ‫الجھاز‬ ‫في‬ ‫تتجول‬ ‫أن‬ ‫أردت‬ ‫إذا‬ ‫الداخلي‬ ‫التشغيل‬
‫برنامجنا‬ ‫بتشغيل‬ ‫لنقوم‬ ‫التطوير‬ ‫بيئة‬ ‫إلى‬ ‫فلنعود‬ ‫ذلك‬‫األول‬‫ذلك‬ ‫و‬
‫رأ‬ ‫في‬ ‫المشروع‬ ‫اسم‬ ‫إلى‬ ‫الذھاب‬ ‫عبر‬‫بزر‬ ‫الضغط‬ ‫و‬ ‫الشجرة‬ ‫س‬
‫الفأرة‬‫األيمن‬‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬)Run As(‫القائمة‬ ‫من‬ ‫ثم‬ ‫ومن‬
‫اختر‬ ‫الفرعية‬)Android Application(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
73
‫عبارة‬ ‫ھي‬ ‫و‬ ‫المحاكي‬ ‫في‬ ‫سيظھر‬ ‫بك‬ ‫الخاص‬ ‫التطبيق‬ ‫أن‬ ‫ستجد‬ ‫و‬
‫وحيد‬ ‫سطر‬ ‫على‬ ‫تحتوي‬ ‫فقط‬ ‫شاشة‬ ‫عن‬)HelloWorld(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
74
‫تط‬ ‫تشغيل‬ ‫محاولة‬ ‫عند‬ ‫مشكلة‬ ‫واجھت‬ ‫حال‬ ‫في‬‫أنه‬ ‫بسبب‬ ‫ذلك‬ ‫و‬ ‫بيقك‬
‫معالج‬ ‫أحيانا‬‫إعداد‬‫ملفات‬ ‫في‬ ‫المراجع‬ ‫كامل‬ ‫ببناء‬ ‫يقوم‬ ‫ال‬ ‫المشروع‬
‫بالتالية‬ ‫شبيھة‬ ‫خطأ‬ ‫رسالة‬ ‫لك‬ ‫وستظھر‬ ‫المتنوعة‬ ‫المشروع‬
‫إلى‬ ‫بالذھاب‬ ‫تقوم‬ ‫أو‬ ‫فتحه‬ ‫تعيد‬ ‫و‬ ‫المشروع‬ ‫تغلق‬ ‫أن‬ ‫عليك‬ ‫إما‬ ‫فلذلك‬
‫القائمة‬)Project(‫خيار‬ ‫اختيار‬ ‫ثم‬ ‫ومن‬)Clean(‫ال‬ ‫في‬ ‫كما‬‫صورة‬
‫التالية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
75
‫زر‬ ‫على‬ ‫اضغط‬ ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫ذلك‬ ‫بعد‬ ‫و‬
‫موافق‬)OK(
‫عالمة‬ ‫ھناك‬ ‫كانت‬ ‫أنه‬ ‫ستالحظ‬)X(‫اسم‬ ‫على‬ ‫كانت‬ ‫حمراء‬ ‫صغيرة‬
‫العالمة‬ ‫ھذه‬ ‫ستختفي‬ ‫العملية‬ ‫ھذه‬ ‫بعد‬ ‫و‬ ‫الشجرة‬ ‫أعلى‬ ‫في‬ ‫المشروع‬
‫عليك‬ ‫و‬‫اآلن‬‫على‬ ‫تطبيقك‬ ‫لتشغيل‬ ‫السابقة‬ ‫الخطوة‬ ‫تكرر‬ ‫أن‬‫المحاكي‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
76
‫التعامل‬‫مع‬‫األوامر‬ ‫سطر‬ ‫طريق‬ ‫عن‬ ‫االفتراضي‬ ‫الجھاز‬
‫يمكن‬ ‫كيف‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬‫إنشاء‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬
‫األوامر‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫مع‬ ‫التعامل‬ ‫كيفية‬ ‫نتعلم‬ ‫دعنا‬
‫األوامر‬‫قمت‬ ‫أنك‬ ‫المفروض‬ ‫من‬ ‫لكن‬ ‫و‬‫بإضافة‬)Environment
Variables(‫عندما‬ ‫ذلك‬ ‫تعلمنا‬ ‫كما‬‫جديد‬ ‫مشروع‬ ‫تبدأ‬ ‫كيف‬ ‫شرحنا‬
‫لتكرار‬ ‫حاجة‬ ‫فال‬ ‫سابقا‬ ‫بذلك‬ ‫قمت‬ ‫حال‬ ‫في‬ ‫و‬‫األمر‬‫الذھاب‬ ‫عليك‬ ‫و‬
‫سطر‬ ‫لتشغيل‬ ‫مباشرة‬‫األوامر‬
‫ابدأ‬ ‫قائمة‬ ‫من‬ ‫تشغيل‬ ‫إلى‬ ‫بالذھاب‬ ‫قم‬)Start >> Run(‫اكتب‬ ‫و‬
‫األمر‬)CMD(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫موافق‬ ‫على‬ ‫اضغط‬ ‫ثم‬
‫موافق‬ ‫زر‬ ‫على‬ ‫تضغط‬ ‫عندما‬)OK(‫ستظ‬‫و‬ ‫سوداء‬ ‫شاشة‬ ‫لك‬ ‫ھر‬
‫التالي‬ ‫بالشكل‬ ‫الشبيھة‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫شاشة‬ ‫ھي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
77
‫و‬ ‫المساعدة‬ ‫ملف‬ ‫الكتشاف‬ ‫التالي‬ ‫األمر‬ ‫كتابة‬ ‫بتجربة‬ ‫قم‬ ‫اآلن‬
‫جھاز‬ ‫إلنشاء‬ ‫استخدامھا‬ ‫يمكن‬ ‫التي‬ ‫المختلفة‬ ‫البارامتر‬
Android –h
‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬‫اإلدخال‬)enter(
)android -h(‫المتغير‬ ‫أن‬ ‫حيث‬)h(‫لألمر‬ ‫بتمريره‬ ‫قمنا‬ ‫الذي‬
)android(‫كل‬ ‫يشرح‬ ‫الذي‬ ‫و‬ ‫المساعدة‬ ‫ملف‬ ‫عرض‬ ‫منه‬ ‫يطلب‬
‫و‬ ‫عليھا‬ ‫اإلطالع‬ ‫يمكن‬ ‫كبيرة‬ ‫قائمة‬ ‫لنا‬ ‫ستظھر‬ ‫و‬ ‫الممكنة‬ ‫المتغيرات‬
‫الشاشة‬ ‫بھذه‬ ‫شبيھة‬ ‫ھي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
78
‫أردنا‬ ‫حال‬ ‫في‬ ‫مثال‬‫إضافة‬‫التالي‬ ‫السطر‬ ‫جرب‬ ‫جديد‬ ‫افتراضي‬ ‫جھاز‬
‫أرقامھا‬ ‫و‬ ‫المنصات‬ ‫لمعرفة‬ ‫أوال‬‫لديك‬
android list target
‫زر‬ ‫اضغط‬ ‫ثم‬‫اإلدخال‬)Enter(
‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫لديك‬ ‫المنصات‬ ‫قائمة‬ ‫ستجد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
79
‫رقمھا‬ ‫واحدة‬ ‫منصة‬ ‫سوى‬ ‫لدينا‬ ‫يتوفر‬ ‫ال‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬)1(‫الذي‬ ‫و‬
‫سطر‬ ‫عبر‬ ‫بنا‬ ‫الخاص‬ ‫المحاكي‬ ‫لبناء‬ ‫سنستخدمه‬‫األوامر‬‫لكتابة‬
‫االدخ‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫ثم‬ ‫التالي‬ ‫السطر‬‫ال‬)Enter(
android create avd -n VM_Android1.6 -t 1
‫أن‬ ‫حيث‬)VM_Android1.6(‫و‬ ‫المحاكي‬ ‫اسم‬ ‫ھو‬)create
avd -n(‫يعني‬‫إنشاء‬‫البارمتر‬ ‫و‬ ‫جديد‬ ‫افتراضي‬ ‫جھاز‬)-t(‫يحدد‬
‫ھي‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫المستخدمة‬ ‫الواجھة‬)1(‫ذلك‬ ‫بعد‬ ‫المعالج‬ ‫لنا‬ ‫ليظھر‬
‫بعض‬ ‫ليسألنا‬‫األسئلة‬‫ا‬ ‫العتاد‬ ‫عن‬‫نود‬ ‫لذي‬‫إضافته‬‫سنجيب‬ ‫الذي‬ ‫و‬
‫بـ‬ ‫عليه‬)yes(‫أو‬)No(‫زر‬ ‫على‬ ‫بالضغط‬ ‫أو‬ ‫فقط‬‫اإلدخال‬)Enter(
‫ألخذ‬‫القوس‬ ‫ضمن‬ ‫تكون‬ ‫التي‬ ‫االفتراضية‬ ‫القيمة‬‫ي‬‫مثال‬ ‫ن‬[yes]
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
80
‫مالحظة‬:‫المحاكي‬ ‫الجھاز‬ ‫ببناء‬ ‫قمت‬ ‫قد‬ ‫كنت‬ ‫إن‬
)VM_Android1.6(‫جربت‬ ‫و‬ ‫سابقا‬ ‫الرسومي‬ ‫المعالج‬ ‫عبر‬
‫الشيء‬ ‫بنفس‬ ‫القيام‬‫سطر‬ ‫عبر‬‫األوامر‬‫قد‬ ‫االسم‬ ‫بأن‬ ‫رسالة‬ ‫فستأتيك‬
‫ليكون‬ ‫مثال‬ ‫اسمه‬ ‫تغيير‬ ‫إلى‬ ‫تحتاج‬ ‫و‬ ‫الحقا‬ ‫حجزه‬ ‫تم‬
)VM_Android1.6_1(
‫من‬ ‫االنتھاء‬ ‫بعد‬‫إنشاء‬‫بكتابة‬ ‫قم‬ ‫لتشغيله‬ ‫و‬ ‫المحاكي‬‫األمر‬‫التالي‬
emulator -avd VM_Android1.6_1
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
81
‫المحاكي‬ ‫لديك‬ ‫ليظھر‬
‫مالحظة‬:‫قمت‬ ‫حال‬ ‫في‬‫بإغال‬‫ق‬‫سطر‬ ‫نافذة‬‫األوامر‬‫ستقوم‬ ‫فأنك‬
‫بإغالق‬‫الن‬ ‫تباعا‬ ‫المحاكي‬‫األمر‬‫و‬ ‫ينتھي‬ ‫حتى‬ ‫التشغيل‬ ‫تحت‬ ‫مازال‬
‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫بتشغيل‬ ‫قمت‬ ‫حال‬ ‫في‬ ‫لذا‬‫األوامر‬‫فانك‬
‫ستحتاج‬‫لإلبقاء‬‫سطر‬ ‫شاشة‬ ‫على‬‫األوامر‬‫قم‬ ‫أو‬ ‫الخلفية‬ ‫في‬ ‫تعمل‬
‫بالذھاب‬‫إلى‬‫تشغيل‬ ‫و‬ ‫التطوير‬ ‫حزمة‬)SDK Setup(‫ب‬ ‫لتجد‬‫أن‬
‫قمنا‬ ‫الذي‬ ‫الجديد‬ ‫المحاكي‬‫بإنشائه‬‫سطر‬ ‫ضمن‬‫األوامر‬‫موجود‬
‫باإلضافة‬‫قائمة‬ ‫ضمن‬ ‫للسابق‬‫األجھزة‬‫االفتراضية‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
82
‫إضافة‬‫العربية‬ ‫اللغة‬‫إلى‬‫المحاكي‬)‫على‬ ‫الحصول‬ ‫عليك‬ ‫يتوجب‬
‫الخطوط‬ ‫ملفات‬:DroidSans-Bold.ttf,
DroidSansFallback.ttf, DroidSans.ttf(
adb remount
adb shell rm /system/fonts/*
adb push c:fontssDroidSans-Bold.ttf
/system/fonts/
adb push c:fontssDroidSansFallback.ttf
/system/fonts/
adb push c:fontssDroidSans.ttf /system/fonts/
‫ظھور‬ ‫حال‬ ‫في‬‫ر‬‫سالة‬‫مساحة‬ ‫وجود‬ ‫بعدم‬ ‫تفيد‬ ‫خطأ‬‫كافية‬‫و‬‫يمكنك‬
،‫التطبيقات‬ ‫بعض‬ ‫حذف‬‫مثال‬:
adb shell rm /system/app/AlarmClock.apk
‫سطر‬ ‫من‬ ‫برنامج‬ ‫تنصيب‬‫األوامر‬
adb install c:Vending.apk
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
83
‫الخارجي‬ ‫العالم‬ ‫و‬ ‫المحاكي‬
‫لنتعرف‬‫اآلن‬‫لنا‬ ‫تتيح‬ ‫التطوير‬ ‫بيئة‬ ‫ضمن‬ ‫موجودة‬ ‫جديدة‬ ‫أداة‬ ‫على‬
‫التعامل‬ ‫و‬ ‫خصائصه‬ ‫و‬ ‫ملفاته‬ ‫إلى‬ ‫الوصول‬ ‫و‬ ‫المحاكي‬ ‫مع‬ ‫التخاطب‬
‫ك‬ ‫و‬ ‫معه‬‫و‬ ‫الجھاز‬ ‫خصائص‬ ‫كل‬ ‫تجربة‬ ‫نستطيع‬ ‫لكي‬ ‫حقيقي‬ ‫جھاز‬ ‫أنه‬
‫حقيقي‬ ‫جھاز‬ ‫على‬ ‫النھائي‬ ‫تطبيقك‬ ‫تجربة‬ ‫عن‬ ‫يغني‬ ‫ال‬ ‫بالتأكيد‬ ‫ھذا‬
‫عمله‬ ‫كيفية‬ ‫لتعرف‬
‫أداة‬)DDMS(
‫التطوير‬ ‫بيئة‬ ‫بتشغيل‬ ‫قمت‬ ‫قد‬ ‫أنك‬ ‫حاليا‬ ‫أفترض‬)Eclipse(‫علينا‬ ‫و‬
‫أداة‬ ‫تشغيل‬)DDMS(‫بالضغط‬ ‫قم‬ ‫الشاشة‬ ‫يمين‬ ‫أعلى‬ ‫من‬ ‫ذلك‬ ‫و‬
‫زر‬ ‫على‬‫اإلضافة‬)+(‫التالي‬ ‫الشكل‬ ‫كما‬ ‫قائمة‬ ‫لنا‬ ‫لتظھر‬
‫باختيار‬ ‫قم‬)DDMS(‫يمكن‬ ‫و‬ ‫الشاشة‬ ‫محتويات‬ ‫ضمن‬ ‫لتصبح‬
‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬ ‫و‬ ‫مباشرة‬ ‫لھا‬ ‫الوصول‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
84
‫بأن‬ ‫ستالحظ‬ ‫االن‬)DDMS(‫في‬ ‫أصبحت‬‫األعلى‬‫يمكن‬ ‫التي‬ ‫و‬
‫التطوير‬ ‫بيئة‬ ‫بين‬ ‫ما‬ ‫و‬ ‫بينھا‬ ‫ما‬ ‫التحويل‬)Java(‫لسھو‬‫و‬ ‫الوصول‬ ‫لة‬
‫التنقل‬
‫الطرق‬ ‫من‬ ‫بأي‬ ‫المحاكي‬ ‫بتشغيل‬ ‫نقوم‬ ‫بأن‬ ‫تقتضي‬ ‫التالية‬ ‫الخطوة‬
‫عليھا‬ ‫ليتعرف‬ ‫بشرحھا‬ ‫قمنا‬ ‫التي‬ ‫السابقة‬)DDMS(‫من‬ ‫يمكننا‬ ‫و‬
‫تشغيل‬ ‫بعد‬ ‫التالي‬ ‫بالشكل‬ ‫شبيھة‬ ‫شاشة‬ ‫لنا‬ ‫لتظھر‬ ‫معھا‬ ‫التواصل‬
‫المحاكي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
85
‫كذ‬ ‫و‬ ‫بالكامل‬ ‫الجھاز‬ ‫لملفات‬ ‫الوصول‬ ‫يمكنك‬ ‫فإنه‬ ‫ترى‬ ‫كما‬‫الحال‬ ‫لك‬
‫العلوية‬ ‫اليمنى‬ ‫الجھة‬ ‫من‬ ‫الداخلي‬ ‫الذاكرة‬ ‫لكرت‬)File Explorer(
‫الخلفية‬ ‫في‬ ‫تعمل‬ ‫التي‬ ‫العمليات‬ ‫معرفة‬ ‫و‬)Threads(‫أو‬)Heap(
‫أو‬)Allocation Tracker(
‫قائمة‬ ‫من‬ ‫يمكنك‬)File Explorer(‫ليكن‬ ‫و‬ ‫مثال‬ ‫المجلد‬ ‫اختيار‬
‫الذاكرة‬ ‫كرت‬)sd card(‫القائمة‬ ‫أعلى‬ ‫من‬ ‫ثم‬ ‫من‬ ‫و‬‫زر‬ ‫اختيار‬
‫الكمبيوتر‬ ‫جھاز‬ ‫من‬ ‫ملف‬ ‫لسحب‬ ‫الجوال‬ ‫ھاتف‬‫إلى‬‫أو‬ ‫المحاكي‬
‫المحاكي‬ ‫من‬ ‫ملف‬ ‫لنسخ‬ ‫الحفظ‬ ‫زر‬ ‫اختيار‬‫إلى‬‫الكمبيوتر‬ ‫جھاز‬.
‫تنويه‬:‫الملفات‬ ‫بنسخ‬ ‫قم‬ ‫و‬ ‫النظام‬ ‫ملفات‬ ‫ھيكلية‬ ‫على‬ ‫بالتعرف‬ ‫قم‬
‫النظام‬ ‫يتعامل‬ ‫كيف‬ ‫الحقا‬ ‫لتعرف‬ ‫بنيتھا‬ ‫كيفية‬ ‫اعرف‬ ‫و‬ ‫جھازك‬ ‫على‬
‫أ‬ ‫في‬ ‫حال‬ ‫أو‬ ‫معھا‬‫مثال‬ ‫تغيرھا‬ ‫ردت‬)‫الرنين‬ ‫ملفات‬ ‫تغيير‬(‫صورة‬ ‫أو‬
‫الخلفية‬.
‫قائمة‬ ‫ستجد‬ ‫اليسرى‬ ‫الجھة‬ ‫في‬‫باألجھزة‬)Devices(‫تعمل‬ ‫التي‬
‫بتعريف‬ ‫قمت‬ ‫و‬ ‫فعلي‬ ‫جھاز‬ ‫بشبك‬ ‫قمت‬ ‫لو‬ ‫حتى‬ ‫حاليا‬)USB
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
86
Driver(‫التطوير‬ ‫حزمة‬ ‫ضمن‬ ‫الموجود‬ ‫و‬)SDK(‫ستجد‬ ‫فإنك‬
‫الوصول‬ ‫يمكن‬ ‫و‬ ‫القائمة‬ ‫بھذه‬ ‫الجھاز‬‫لملفات‬‫ه‬‫ال‬‫معه‬ ‫التعامل‬ ‫و‬ ‫داخلية‬
‫محاكي‬ ‫أنه‬ ‫لو‬ ‫كما‬.
‫قائمة‬ ‫تحت‬‫األجھزة‬‫بالمحاكي‬ ‫التحكم‬ ‫قائمة‬ ‫توجد‬)Emulator
Control(‫فعلي‬ ‫أنه‬ ‫لو‬ ‫كما‬ ‫الجھاز‬ ‫مع‬ ‫التخاطب‬ ‫من‬ ‫تمكنك‬ ‫التي‬ ‫و‬
‫على‬ ‫فيظھر‬ ‫االتصال‬ ‫و‬ ‫ھاتف‬ ‫رقم‬ ‫كتابة‬ ‫تستطيع‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬
‫ا‬ ‫الرقم‬ ‫من‬ ‫وارد‬ ‫اتصال‬ ‫ھناك‬ ‫بأن‬ ‫المحاكي‬ ‫شاشة‬‫كذلك‬ ‫و‬ ‫كتبته‬ ‫لذي‬
‫أردت‬ ‫حال‬ ‫في‬ ‫الحال‬‫إرسال‬‫نصية‬ ‫رسالة‬)SMS(‫أن‬ ‫أردت‬ ‫أو‬
‫العالمي‬ ‫التوضع‬ ‫عبر‬ ‫مكان‬ ‫ترسل‬)GPS(‫الطول‬ ‫خطي‬ ‫تمرير‬ ‫عبر‬
‫العرض‬ ‫و‬)Longitude(‫و‬)latitude(‫تطبيق‬ ‫كان‬ ‫حال‬ ‫في‬
‫جھاز‬ ‫على‬ ‫مثال‬ ‫يعتمد‬)GPS(.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
87
‫تدريب‬
‫رأيك‬ ‫ما‬‫اآلن‬‫قليال‬ ‫المحاكي‬ ‫على‬ ‫بالعمل‬ ‫تقوم‬ ‫لو‬‫بعض‬ ‫تحميل‬ ‫و‬
‫لتتعرف‬ ‫البرامج‬ ‫سوق‬ ‫من‬ ‫المجانية‬ ‫التطبيقات‬‫أكثر‬‫البرامج‬ ‫ھذه‬ ‫على‬
‫االنترنت‬ ‫متصفح‬ ‫إلى‬ ‫بالذھاب‬ ‫قم‬ ‫المحاكي‬ ‫جھاز‬ ‫شاشة‬ ‫من‬
)Browser(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
88
‫يقوم‬ ‫المحاكي‬ ‫أن‬ ‫بسبب‬ ‫ذلك‬ ‫و‬ ‫الشكل‬ ‫بھذا‬ ‫الشاشة‬ ‫لك‬ ‫تظھر‬ ‫قد‬
‫على‬ ‫بالتعرف‬‫إعدادات‬‫ير‬ ‫و‬ ‫لديك‬ ‫الجھاز‬‫يأتي‬ ‫الذي‬ ‫و‬ ‫للموقع‬ ‫سلھا‬
‫العربية‬ ‫الخطوط‬ ‫على‬ ‫يحتوي‬ ‫ال‬ ‫المحاكي‬ ‫أن‬ ‫بما‬ ‫و‬ ‫العربية‬ ‫بالواجھة‬
‫حتى‬‫اآلن‬‫باختيار‬ ‫قم‬ ‫لذا‬ ‫و‬)Google.com in English(‫للتحول‬
‫االنجليزي‬ ‫الواجھة‬ ‫إلى‬
‫تنويه‬:‫جھازك‬ ‫من‬ ‫مباشرة‬ ‫االنترنت‬ ‫على‬ ‫بالحصول‬ ‫يقوم‬ ‫المحاكي‬
‫الكمب‬ ‫جھاز‬ ‫يكون‬ ‫أن‬ ‫من‬ ‫بد‬ ‫ال‬ ‫فلذا‬‫باالنترنت‬ ‫متصل‬ ‫لديك‬ ‫يوتر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
89
‫البرامج‬ ‫سوق‬ ‫مواقع‬ ‫أحد‬ ‫إلى‬ ‫للذھاب‬ ‫التالي‬ ‫العنوان‬ ‫بكتابة‬ ‫قم‬ ‫و‬
‫العامة‬)slideme.org(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
90
‫اآلن‬‫اذھب‬‫إلى‬‫القائمة‬ ‫في‬ ‫الموقع‬
‫الزر‬ ‫على‬ ‫بالضغط‬ ‫وقم‬‫األحمر‬)SAM v2.42(‫تحميل‬ ‫في‬ ‫ليبدأ‬
‫جھازك‬ ‫على‬ ‫البرنامج‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
91
‫بعمل‬ ‫البرنامج‬ ‫تحميل‬ ‫انتھاء‬ ‫بعد‬‫على‬ ‫بالضغط‬ ‫ذلك‬ ‫و‬ ‫له‬ ‫تنصيب‬
‫البرنامج‬ ‫صورة‬
‫جھازك‬ ‫على‬ ‫التطبيق‬ ‫تحميل‬ ‫عملية‬ ‫ستبدأ‬ ‫ذلك‬ ‫بعد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
92
‫تقوم‬ ‫أن‬ ‫عليك‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬‫بالضغ‬‫ط‬‫زر‬ ‫على‬
)Done(‫التحميل‬ ‫عملية‬ ‫النتھاء‬
‫تعديل‬ ‫بعمل‬ ‫تقوم‬ ‫أن‬ ‫فعليك‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫تتمكن‬ ‫لم‬ ‫حال‬ ‫في‬
‫في‬ ‫بسيط‬‫إعدادات‬‫ا‬‫بالتحميل‬ ‫موقعه‬ ‫الغير‬ ‫بالتطبيقات‬ ‫للسماح‬ ‫لنظام‬
‫بجميع‬ ‫و‬ ‫جھازك‬ ‫على‬‫األحوال‬‫أنت‬‫الخيار‬ ‫ھذا‬ ‫لتفعيل‬ ‫بحاجة‬
‫سوق‬ ‫في‬ ‫الموجودة‬ ‫التطبيقات‬ ‫أغلب‬ ‫تحميل‬ ‫من‬ ‫لتستطيع‬)Slide
Me(‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫بذلك‬ ‫للقيام‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫الحقا‬
)Menu(‫و‬‫آنت‬‫ال‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬ ‫الرئيسية‬ ‫الشاشة‬ ‫على‬‫تالية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
93
‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬)Settings(‫بخيارات‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬
‫اإلعدادات‬‫كالتالي‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
94
‫خيار‬ ‫على‬ ‫بالضغط‬ ‫قم‬)Applications(‫القائمة‬ ‫إلى‬ ‫للوصول‬
‫كھذه‬ ‫بھا‬ ‫الخاصة‬ ‫الفرعية‬
‫االول‬ ‫الخيار‬ ‫بتمكين‬ ‫قم‬)Unknown sources(‫إن‬‫يكن‬ ‫لم‬‫كذلك‬
‫ت‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫التالية‬ ‫الشاشة‬ ‫كما‬ ‫ليصبح‬‫في‬ ‫ذلك‬ ‫لتطبيق‬ ‫حتاج‬
‫الفعلي‬ ‫جھازك‬‫إن‬‫أردت‬‫على‬ ‫أيضا‬ ‫اضغط‬ ‫ذلك‬ ‫بعد‬ ‫و‬ ‫عليه‬ ‫التجربة‬
‫الخيار‬)Development(‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
95
‫ھي‬ ‫و‬ ‫كذلك‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫خيارات‬ ‫الثالث‬ ‫بتمكين‬ ‫بعبرھا‬ ‫قم‬
‫مع‬ ‫التعامل‬ ‫بتمكين‬ ‫الخاصة‬)DDMS(‫متابعة‬ ‫عملية‬ ‫تسھيل‬ ‫و‬
‫األخطاء‬‫ع‬ ‫البرمجة‬ ‫و‬‫لى‬‫األجھزة‬‫تحتاج‬ ‫الحال‬ ‫كذلك‬ ‫و‬‫إلى‬‫عمل‬
‫حال‬ ‫في‬ ‫الفعلي‬ ‫جھازك‬ ‫على‬ ‫الخطوات‬ ‫نفس‬‫أردت‬‫عليه‬ ‫التجربة‬
‫للعودة‬ ‫مرات‬ ‫عدة‬ ‫عليه‬ ‫بالضغط‬ ‫قم‬ ‫الرجوع‬ ‫سھم‬ ‫عبر‬ ‫االن‬‫إلى‬
‫حفظ‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬‫اإلعدادات‬‫بھا‬ ‫قمنا‬ ‫التي‬
‫برنامج‬ ‫بتشغيل‬ ‫قم‬ ‫البرامج‬ ‫قائمة‬ ‫من‬ ‫االن‬)Slide Me(‫لتظھر‬
‫الشاشة‬‫فرعية‬ ‫تصنيفات‬ ‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫التالية‬‫ألنواع‬
‫البرنامج‬ ‫تشغيل‬ ‫عند‬ ‫و‬ ‫الموجودة‬ ‫التطبيقات‬‫ألول‬‫لك‬ ‫ستظھر‬ ‫مرة‬
‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫عليھا‬ ‫بالموافقة‬ ‫قم‬ ‫االستخدام‬ ‫اتفاقية‬ ‫شاشة‬
‫البرنامج‬
‫باستكشاف‬ ‫قم‬‫أنواع‬‫تشاء‬ ‫ما‬ ‫منھا‬ ‫حمل‬ ‫و‬ ‫قسم‬ ‫كل‬ ‫في‬ ‫التطبيقات‬
‫منھا‬ ‫و‬ ‫مجاني‬ ‫ھو‬ ‫ما‬ ‫فمنھا‬‫حال‬ ‫في‬ ‫و‬ ‫مدفوع‬ ‫ھو‬ ‫ما‬‫أردت‬‫تجربة‬
‫المدفوعة‬ ‫التطبيقات‬‫فأنت‬‫موقع‬ ‫في‬ ‫للتسجيل‬ ‫تحتاج‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
96
)slideme.org(‫تأكيد‬ ‫و‬ ‫االئتمانية‬ ‫بطاقاتك‬ ‫بيانات‬ ‫تخزين‬ ‫و‬
‫تتم‬ ‫عملية‬ ‫عبر‬ ‫لھا‬ ‫ملكيتك‬‫أثناء‬‫الشراء‬ ‫لك‬ ‫يتيح‬ ‫مما‬ ‫التسجيل‬
‫حساب‬ ‫على‬ ‫الموقع‬ ‫من‬ ‫مباشرة‬ ‫المبالغ‬ ‫تقييد‬ ‫و‬ ‫التطبيق‬ ‫من‬ ‫مباشرة‬
‫بطاق‬‫بطاقة‬ ‫لبيانات‬ ‫الثالث‬ ‫الطرف‬ ‫لمعرفة‬ ‫الحاجة‬ ‫دون‬ ‫االئتمانية‬ ‫تك‬
‫أو‬ ‫االئتمانية‬‫إلدخال‬‫مرة‬ ‫بياناتك‬‫أخرى‬‫مكان‬ ‫أي‬ ‫في‬
‫فلنجرب‬‫اآلن‬‫القائمة‬ ‫من‬ ‫تطبيق‬ ‫تحميل‬)Utilities(‫تطبيق‬ ‫ھو‬ ‫و‬
‫قائمة‬‫المشترٮات‬)OI Shopping List(‫ثم‬ ‫من‬ ‫و‬ ‫عليه‬ ‫للتعرف‬
‫في‬‫األجزاء‬‫تطب‬ ‫ببناء‬ ‫لنقوم‬ ‫القادمة‬‫المھام‬ ‫بقائمة‬ ‫مشابه‬ ‫يق‬
‫القائمة‬ ‫من‬)Utilities(‫البرنامج‬ ‫عن‬ ‫ابحث‬)OI Shopping
List(
‫يمكنك‬ ‫التي‬ ‫و‬ ‫البرنامج‬ ‫بمعلومات‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫عليه‬ ‫اضغط‬‫أن‬
‫فيھا‬ ‫تتعرف‬‫أكثر‬‫التطبيق‬ ‫معلومات‬ ‫عن‬‫باإلضافة‬‫إلى‬‫عن‬ ‫صور‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
97
‫ما‬ ‫و‬ ‫سعره‬ ‫و‬ ‫البرنامج‬ ‫واجھة‬‫إلى‬‫من‬ ‫ذلك‬‫أمور‬‫العلم‬ ‫مع‬‫أن‬‫ھ‬‫ذا‬
‫تحميل‬ ‫يمكن‬ ‫و‬ ‫بل‬ ‫مجاني‬ ‫البرنامج‬‫الشفرة‬‫من‬ ‫به‬ ‫الخاصة‬ ‫المصدرية‬
‫المصادر‬ ‫جزء‬ ‫في‬ ‫الحقا‬ ‫عليه‬ ‫سندل‬ ‫الذي‬ ‫و‬ ‫المبرمج‬ ‫موقع‬
‫زر‬ ‫على‬ ‫بالنقر‬ ‫قم‬)Terms & Download(‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫االستخدام‬ ‫اتفاقية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
98
‫زر‬ ‫على‬ ‫بالنقر‬ ‫قم‬ ‫ذلك‬ ‫بعد‬)Install(‫لتبد‬‫أ‬‫التي‬ ‫و‬ ‫التحميل‬ ‫عملية‬
‫ستكو‬‫قائمة‬ ‫في‬ ‫ن‬‫اإلنذارات‬‫العلوية‬)Notifications(‫إذ‬‫فيھا‬ ‫يقوم‬
‫الوصول‬ ‫يمكنك‬ ‫و‬ ‫الخلفية‬ ‫في‬ ‫جھازك‬ ‫على‬ ‫البرنامج‬ ‫تحميل‬ ‫بعملية‬
‫البطارية‬ ‫معلومات‬ ‫فيھا‬ ‫تظھر‬ ‫التي‬ ‫و‬ ‫العلوية‬ ‫القائمة‬ ‫تمرير‬ ‫عبر‬ ‫لھا‬
‫الساعة‬ ‫و‬
‫التنصيب‬ ‫عملية‬ ‫لتبدأ‬ ‫عليه‬ ‫اضغط‬ ‫التحميل‬ ‫من‬ ‫البرنامج‬ ‫انتھاء‬ ‫بعد‬
‫عل‬‫جھازك‬ ‫ى‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
99
‫بال‬ ‫تقوم‬‫ض‬‫غ‬‫زر‬ ‫على‬ ‫ط‬)Install(‫التحميل‬ ‫انتھاء‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
‫لحظات‬ ‫بعد‬
‫على‬ ‫بالضغط‬ ‫قم‬‫زر‬)Open(‫البرنامج‬ ‫لتشغيل‬
‫نوع‬ ‫من‬ ‫وھي‬ ‫يتم‬ ‫بتحميلھا‬ ‫تقوم‬ ‫التي‬ ‫الملفات‬ ‫مالحظة‬)apk(‫يتم‬ ‫و‬
‫مجلد‬ ‫في‬ ‫بھا‬ ‫االحتفاظ‬)Download(‫الخارجية‬ ‫الجھاز‬ ‫ذاكرة‬ ‫في‬
)SD Card(‫لت‬ ‫و‬‫جھاز‬ ‫على‬ ‫تنصيبھا‬ ‫ستطيع‬‫أخر‬‫الحاجة‬ ‫دون‬
‫إلعادة‬‫الخطوات‬‫أو‬‫وجودة‬Slide Me‫تطبيق‬ ‫لوجود‬ ‫بحاجة‬ ‫أنت‬
‫أسمة‬)Apps Installer(‫من‬ ‫الملفات‬ ‫عن‬ ‫بالبحث‬ ‫يقوم‬ ‫الذي‬ ‫و‬
‫نوع‬)apk(‫يمكنك‬ ‫و‬ ‫مباشرة‬ ‫تنصيبھا‬ ‫من‬ ‫تمكينك‬ ‫و‬ ‫جھازك‬ ‫على‬
‫موقع‬ ‫من‬ ‫التطبيق‬ ‫ھذا‬ ‫على‬ ‫الحصول‬)Slide Me(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
100
‫باستكشا‬ ‫قم‬‫تطبيق‬ ‫مع‬ ‫التعامل‬ ‫كيفية‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫البرنامج‬ ‫ف‬
‫على‬ ‫فعلي‬‫أندرويد‬‫واجھات‬ ‫ببناء‬ ‫القيام‬ ‫كيفية‬ ‫على‬ ‫التعرف‬ ‫لتستطيع‬
‫بنفسك‬ ‫مشابھة‬ ‫تطبيق‬.
‫تنويه‬:‫عبر‬ ‫و‬ ‫يمكنك‬‫أداة‬)DDMS(‫شاشة‬ ‫عن‬ ‫صور‬ ‫بأخذ‬ ‫تقوم‬ ‫أن‬
‫القائمة‬ ‫من‬ ‫ذلك‬ ‫و‬ ‫المحاكي‬)Devices(‫الذھاب‬ ‫ثم‬‫إلى‬‫زر‬‫األدوات‬
)‫صورة‬ ‫شكل‬()Screen Capture(‫بأخذ‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫و‬
‫عند‬ ‫بذلك‬ ‫أنا‬ ‫قمت‬ ‫كما‬ ‫جھازك‬ ‫على‬ ‫حفظھا‬ ‫و‬ ‫المحاكي‬ ‫من‬ ‫صورة‬
‫التدريب‬ ‫ھذا‬ ‫شرح‬
‫المحاكي‬ ‫دلع‬
‫الجھاز‬ ‫بشكل‬ ‫ليصبح‬ ‫لديك‬ ‫المحاكي‬ ‫شكل‬ ‫بتغيير‬ ‫تقوم‬ ‫لو‬ ‫مارأيك‬
‫الذھاب‬ ‫سوى‬ ‫عليك‬ ‫ما‬‫إلى‬‫المجلد‬
android-sdk-windowsplatformsandroid-1.6skinsHVGA
‫حال‬ ‫في‬ ‫الموجودة‬ ‫بالصور‬ ‫التالعب‬ ‫ثم‬ ‫من‬ ‫و‬‫أردت‬‫صورة‬ ‫تغيير‬ ‫مثال‬
‫كالتالي‬ ‫لتصبح‬ ‫الجھاز‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
101
‫الثاني‬ ‫مشروعك‬ ‫بناء‬)‫المھام‬ ‫قائمة‬(
‫الخطوات‬‫األولى‬‫بيئة‬ ‫على‬ ‫تعريفك‬ ‫على‬ ‫تركز‬ ‫كانت‬ ‫الكتاب‬ ‫ھذا‬ ‫في‬
‫نقم‬ ‫لم‬ ‫و‬ ‫معھا‬ ‫التعامل‬ ‫أساسيات‬ ‫تعليمك‬ ‫و‬ ‫تھيئتھا‬ ‫كيفية‬ ‫و‬ ‫التطوير‬
‫بكتا‬‫حتى‬ ‫كود‬ ‫سطر‬ ‫أي‬ ‫بة‬‫اآلن‬‫عن‬ ‫التشمير‬ ‫في‬ ‫البدء‬ ‫فعلينا‬ ‫لذا‬ ‫و‬
‫الذي‬ ‫و‬ ‫الكود‬ ‫بعض‬ ‫على‬ ‫يحتوي‬ ‫فعلي‬ ‫برنامج‬ ‫أول‬ ‫كتابة‬ ‫و‬ ‫ساعدينا‬
‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫عن‬ ‫المزيد‬ ‫بداخله‬ ‫سنشرح‬.
‫المھام‬ ‫قائمة‬ ‫برنامج‬ ‫على‬ ‫وقع‬ ‫اختياري‬‫باألساس‬‫ألنه‬‫ضمنيا‬ ‫يأتي‬ ‫ال‬
‫كما‬ ‫التشغيل‬ ‫نظام‬ ‫مع‬‫فھو‬ ‫الوقت‬ ‫بنفس‬ ‫و‬ ‫وظيفته‬ ‫فھم‬ ‫في‬ ‫بسيط‬ ‫أنه‬
‫منھا‬ ‫سنتعلم‬ ‫التي‬ ‫الخصائص‬ ‫من‬ ‫الكثير‬ ‫يستخدم‬‫أساسيات‬‫البرمجة‬
‫شاشة‬ ‫من‬ ‫أكثر‬ ‫مع‬ ‫التعامل‬ ‫منھا‬ ‫و‬ ‫الندرويد‬ ‫الموجھة‬)‫نشاط‬(‫حفظ‬ ‫و‬
‫المزيد‬ ‫تكسبنا‬ ‫التي‬ ‫المميزات‬ ‫من‬ ‫غيرھا‬ ‫و‬ ‫أوامر‬ ‫قائمة‬ ‫بناء‬ ‫و‬ ‫المھام‬
‫المھارة‬ ‫من‬.
‫قم‬‫اآلن‬‫بيئ‬ ‫بتشغيل‬‫التطوير‬ ‫ة‬)Eclipse(‫و‬‫ابد‬‫أ‬‫في‬‫إعداد‬‫مشروع‬
‫لنسيمه‬ ‫و‬ ‫جديد‬)Task List(‫التالي‬ ‫الشكل‬ ‫في‬ ‫ليكون‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
102
‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫المشروع‬ ‫ملفات‬ ‫شاشة‬ ‫لنا‬ ‫تظھر‬ ‫أن‬ ‫بعد‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
103
‫عالمة‬ ‫وجود‬ ‫تالحظ‬ ‫لربما‬)X(‫باللون‬‫األحمر‬‫و‬ ‫الشجرة‬ ‫رأس‬ ‫على‬
‫ق‬ ‫لتصحيحھا‬ ‫و‬ ‫المشروع‬ ‫في‬ ‫خطاء‬ ‫وجود‬ ‫على‬ ‫تدل‬ ‫التي‬‫باستخدام‬ ‫م‬
)Project >> Clean(‫أول‬ ‫ببناء‬ ‫قمنا‬ ‫عندما‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬
‫المعالج‬ ‫بسبب‬ ‫أخطاء‬ ‫أي‬ ‫من‬ ‫المشروع‬ ‫لتنظيف‬ ‫ذلك‬ ‫و‬ ‫مشروع‬.
‫المعالج‬ ‫قام‬ ‫الذي‬ ‫و‬ ‫البرمجي‬ ‫الكود‬ ‫لنستعرض‬‫بإنشائه‬‫ألول‬‫شاشة‬
)‫نشاط‬(‫مجلد‬ ‫إلى‬ ‫لنذھب‬ ‫و‬ ‫افتراضي‬ ‫بشكل‬ ‫لنا‬)src(‫تحته‬ ‫من‬ ‫و‬
‫الحزمة‬ ‫إلى‬ ‫نذھب‬)com.android.TaskList(‫من‬ ‫ثم‬ ‫ومن‬
‫الملف‬ ‫على‬ ‫المضاعف‬ ‫بالنقر‬ ‫نقوم‬ ‫تحتھا‬)Activity_TaskList(
‫الكود‬ ‫لنا‬ ‫ليظھر‬‫األساسي‬‫النظام‬ ‫قام‬ ‫الذي‬ ‫و‬‫بإضافته‬‫و‬‫المسئول‬‫عن‬
‫على‬ ‫افتراضي‬ ‫بشكل‬ ‫و‬ ‫فقط‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬ ‫تشغيل‬
‫المشروع‬ ‫أسم‬ ‫يحتوي‬ ‫عنوان‬ ‫مربع‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
104
‫استعرا‬ ‫يمكنك‬ ‫كما‬‫الشاشة‬ ‫ض‬)‫النشاط‬ ‫شكل‬(‫بيئة‬ ‫قامت‬ ‫الذي‬
‫المصادر‬ ‫مجلد‬ ‫تحت‬ ‫ذلك‬ ‫و‬ ‫افتراضي‬ ‫بشكل‬ ‫ببنائه‬ ‫التطوير‬)res(‫ثم‬
‫اختيار‬)layout(‫الملف‬ ‫على‬ ‫المضاعف‬ ‫بالنقر‬ ‫تحتھا‬ ‫من‬ ‫و‬
)main.xml(‫التالية‬ ‫الصورة‬ ‫كما‬ ‫الشاشة‬ ‫شكل‬ ‫لدينا‬ ‫ليظھر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
105
‫التبويب‬ ‫لسان‬ ‫أعلى‬ ‫من‬)main.xml(‫الشاش‬ ‫شكل‬ ‫بتغيير‬ ‫قم‬‫ة‬
‫شكل‬ ‫في‬ ‫أكثر‬ ‫للتحكم‬ ‫عرضي‬ ‫شكل‬ ‫من‬ ‫بدال‬ ‫طولي‬ ‫بشكل‬ ‫لتصبح‬
‫الجھاز‬ ‫على‬ ‫تعمل‬ ‫عندما‬ ‫االفتراضية‬ ‫الشاشة‬،‫الخاصية‬ ‫بتغيير‬ ‫قم‬
)Config(‫القيمة‬ ‫من‬)Landscape(‫القيمة‬ ‫إلى‬)Portrait(
‫التالي‬ ‫بالشكل‬ ‫تصبح‬ ‫و‬ ‫قليال‬ ‫الشاشة‬ ‫شكل‬ ‫لتتغير‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
106
‫مربعي‬ ‫ھناك‬ ‫الشاشة‬ ‫بجانب‬ ‫اليسرى‬ ‫القائمة‬ ‫من‬‫باسم‬ ‫ن‬)Layout(
‫و‬)Views(‫و‬ ‫مباشرة‬ ‫عناصرھا‬ ‫بسحب‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫التي‬ ‫و‬
‫سنذھب‬ ‫لكننا‬ ‫و‬ ‫الشاشة‬ ‫على‬ ‫وضعھا‬‫إلى‬‫لنتعرف‬ ‫المصدري‬ ‫الملف‬
‫العمل‬ ‫لنحترف‬ ‫يدوي‬ ‫بشكل‬ ‫بعمله‬ ‫نقوم‬ ‫و‬ ‫الكود‬ ‫ھيكلية‬ ‫على‬ ‫أكثر‬
‫عليه‬.
‫تبويب‬ ‫لسان‬ ‫ستجد‬ ‫اليسرى‬ ‫الناحية‬ ‫في‬ ‫الشاشة‬ ‫تحت‬)main.xml(
‫و‬)layout(‫إلى‬ ‫بالتغيير‬ ‫قم‬)main.xml(‫الشاشة‬ ‫لك‬ ‫لتظھر‬
‫التالية‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
107
‫على‬ ‫لنتعرف‬‫األ‬‫كواد‬‫المكتوبة‬
1 <?xml version="1.0" encoding="utf-8"?>
2<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello"
11 />
12 </LinearLayout>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
108
‫بترقيم‬ ‫ھنا‬ ‫قمت‬ ‫لقد‬‫األسطر‬‫أنت‬ ‫يمكنك‬ ‫و‬ ‫كما‬ ‫لھا‬ ‫الرجوع‬ ‫لسھولة‬
‫تقوم‬ ‫أن‬ ‫أيضا‬‫بإظھار‬‫أرقام‬‫األسطر‬‫التطوير‬ ‫بيئة‬ ‫داخل‬ ‫من‬
)Eclipse(‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫ذلك‬ ‫و‬‫األيمن‬‫من‬ ‫اليسار‬ ‫أقصى‬ ‫على‬
‫قم‬ ‫المنسدلة‬ ‫القائمة‬ ‫من‬ ‫ثم‬ ‫من‬ ‫و‬ ‫الفارغة‬ ‫المنطقة‬ ‫في‬ ‫الكود‬ ‫سطر‬
‫خيار‬ ‫بتحديد‬)Show Line Numbers(
‫لتظھ‬‫أسطر‬ ‫أرقام‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫الشاشة‬ ‫لنا‬ ‫ر‬
‫لنستطيع‬ ‫البرمجي‬ ‫الكود‬‫اإلشارة‬‫الحقا‬ ‫إليھا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
109
‫شرحه‬ ‫و‬ ‫الكود‬ ‫إلى‬ ‫بالعودة‬ ‫و‬ ‫االن‬
1 <?xml version="1.0" encoding="utf-8"?>
‫ملف‬ ‫ترويسة‬ ‫فتح‬)XML(‫ترميز‬ ‫و‬ ‫المعياري‬)UTF-8(‫الدولي‬
‫اللغات‬ ‫كل‬ ‫لدعم‬
2<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent">
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
110
‫األسطر‬‫من‬)2(‫حتى‬ ‫و‬)6(‫موزع‬ ‫لكنه‬ ‫و‬ ‫واحد‬ ‫سطر‬ ‫عن‬ ‫عبارة‬ ‫ھي‬
‫ل‬ ‫أسطر‬ ‫عدة‬ ‫إلى‬‫أو‬ ‫ذلك‬ ‫تغيير‬ ‫يمكنك‬ ‫و‬ ‫القراءة‬ ‫سھولة‬‫اإلبقاء‬‫على‬
‫ذلك‬
‫العرض‬ ‫طريقة‬ ‫اختيار‬ ‫ھو‬ ‫السطر‬ ‫ھذا‬ ‫في‬ ‫المھم‬
)LinearLayout(‫طرق‬ ‫أحدى‬ ‫الكتاب‬ ‫أول‬ ‫في‬ ‫ذكرنا‬ ‫كما‬ ‫التي‬ ‫و‬
‫ل‬ً‫أ‬ ‫من‬ ‫العرض‬)4(‫برصف‬ ‫تقضي‬ ‫التي‬ ‫و‬ ‫مختلفة‬ ‫عرض‬ ‫طرق‬
‫من‬ ‫متتالي‬ ‫بشكل‬ ‫العناصر‬‫األعلى‬‫إلى‬‫األسفل‬‫تباعا‬
‫ال‬ ‫بداخل‬ ‫ما‬‫وسم‬)LinearLayout(‫الخصائص‬ ‫من‬ ‫مجموعة‬ ‫ھناك‬
‫الخاصية‬ ‫أھمھا‬ ‫من‬ ‫لعل‬ ‫و‬ ‫العرض‬ ‫طريقة‬ ‫تحدد‬ ‫التي‬
)orientation(‫بشكل‬ ‫المتتالي‬ ‫الرصف‬ ‫طريق‬ ‫توصف‬ ‫التي‬ ‫و‬
‫بشكل‬ ‫و‬ ‫ھي‬ ‫و‬ ‫أفقي‬ ‫أو‬ ‫عامودي‬‫افتراضي‬‫بشكل‬ ‫بالرصف‬ ‫تقوم‬
‫أفقي‬ ‫بشكل‬ ‫لتصبح‬ ‫تغيرھا‬ ‫يمكن‬ ‫و‬ ‫عامودي‬‫إال‬‫ب‬‫الخاصية‬
)horizontal(‫و‬‫الخاصيتين‬ ‫الحال‬ ‫كذلك‬)layout_width(‫و‬
)layout_height(‫التي‬ ‫و‬ ‫عنصر‬ ‫كل‬ ‫توضع‬ ‫مكان‬ ‫تحدد‬ ‫التي‬ ‫و‬
‫القيمة‬ ‫تأخذ‬)fill_parent(‫المساحة‬ ‫تعبئة‬ ‫أي‬‫األب‬‫ھذه‬ ‫في‬ ‫و‬
‫عنصر‬ ‫كل‬ ‫فإن‬ ‫افتراضي‬ ‫ھو‬ ‫كما‬ ‫عاموديا‬ ‫الشكل‬ ‫كان‬ ‫حال‬ ‫في‬ ‫الحالة‬
‫سيقوم‬‫بتعبئ‬‫ة‬‫يم‬ ‫أقصى‬ ‫إلى‬ ‫الشاشة‬ ‫يسار‬ ‫أقصى‬ ‫من‬ ‫اسكر‬‫ين‬
‫العرض‬ ‫كان‬ ‫حال‬ ‫في‬ ‫أما‬ ‫الشاشة‬‫أفقيا‬‫فأنه‬‫سيتم‬‫من‬ ‫التعبئة‬‫األعلى‬
‫إلى‬‫األسفل‬
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello"/>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
111
‫من‬‫السطر‬)7(‫السطر‬ ‫حتى‬ ‫و‬)11(‫واحد‬ ‫سطر‬ ‫ھو‬‫كائن‬ ‫لتوصيف‬
‫السابقة‬ ‫االسباب‬ ‫لنفس‬ ‫سطور‬ ‫عدة‬ ‫على‬ ‫توزيعه‬ ‫تم‬ ‫التي‬ ‫و‬ ‫نصي‬
‫تتغير‬ ‫قد‬ ‫و‬ ‫العناصر‬ ‫أغلب‬ ‫في‬ ‫المشتركة‬ ‫الخصائص‬ ‫بعض‬ ‫ھناك‬
‫بشرح‬ ‫سنقوم‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫لكن‬ ‫و‬ ‫العنصر‬ ‫وظيفة‬ ‫على‬ ‫بناء‬ ‫بعضھا‬
‫ھي‬ ‫و‬ ‫االفتراضية‬ ‫الخصائص‬)layout_width(‫تأخذ‬ ‫التي‬ ‫و‬
‫بتعبئة‬ ‫الخاصة‬ ‫القيمة‬‫األب‬)fill_parent(‫الخاصية‬ ‫و‬
)layout_height(‫القيمة‬ ‫تأخذ‬ ‫التي‬ ‫و‬)wrap_content(‫و‬
‫النزول‬ ‫و‬ ‫عاموديا‬ ‫التمدد‬ ‫العنصر‬ ‫لھذا‬ ‫يمكن‬ ‫أنه‬ ‫تعني‬ ‫التي‬‫ألكثر‬‫من‬
‫الداخلي‬ ‫النص‬ ‫طول‬ ‫على‬ ‫بناء‬ ‫ذلك‬ ‫استدعى‬ ‫حال‬ ‫في‬ ‫سطر‬،‫أما‬
‫للخاصية‬ ‫بالنسبة‬)text(‫المصادر‬ ‫ملف‬ ‫من‬ ‫قيمتھا‬ ‫تأخذ‬ ‫التي‬ ‫و‬
‫الخا‬‫تغييرھا‬ ‫يمكن‬ ‫ال‬ ‫و‬ ‫النص‬ ‫داخل‬ ‫ستعرض‬ ‫التي‬ ‫القيمة‬ ‫ھي‬ ‫و‬ ‫رجي‬
‫أن‬ ‫إذ‬ ‫ھنا‬ ‫من‬ ‫مباشرة‬)@string/hello(‫في‬ ‫القيمة‬ ‫عنوان‬ ‫ھي‬
‫بعد‬ ‫عليھا‬ ‫سنتعرف‬ ‫التي‬ ‫و‬ ‫نفسھا‬ ‫القيمة‬ ‫ليست‬ ‫و‬ ‫المصادر‬ ‫ملف‬
‫مباشرة‬ ‫الكود‬ ‫ھذا‬ ‫شرح‬
12 </LinearLayout>
‫السطر‬)12(‫الوسم‬ ‫ينھي‬)LinearLayout(‫ينھي‬ ‫الذي‬ ‫و‬‫بذلك‬
‫بنا‬ ‫الخاص‬ ‫الكود‬
‫النص‬ ‫مربع‬ ‫بأن‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬)TextView(‫بعض‬ ‫لديه‬
‫و‬ ‫المصادر‬ ‫ملف‬ ‫من‬ ‫قيمتھا‬ ‫يأخذ‬ ‫التي‬ ‫و‬ ‫االسم‬ ‫منھا‬ ‫و‬ ‫الخصائص‬
‫المجلد‬ ‫تحت‬ ‫المشروع‬ ‫ملفات‬ ‫من‬ ‫له‬ ‫الوصول‬ ‫يمكن‬ ‫الذي‬)res(‫و‬
‫مجلد‬ ‫ثم‬ ‫من‬)Value(‫الملف‬ ‫اسم‬ ‫على‬ ‫بالنقر‬ ‫قم‬ ‫بعدھا‬ ‫و‬()‫لتظھر‬
‫الت‬ ‫الشاشة‬‫الية‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
112
‫بالضغط‬ ‫ذلك‬ ‫و‬ ‫ھنا‬ ‫من‬ ‫النص‬ ‫بداخل‬ ‫التي‬ ‫قيمة‬ ‫تعديل‬ ‫يمكننا‬ ‫االن‬
‫مثال‬ ‫ليكن‬ ‫و‬ ‫المرجع‬ ‫اسم‬ ‫على‬)hell(‫تفتح‬ ‫عندما‬ ‫ثم‬ ‫ومن‬‫الناف‬‫ذ‬‫ة‬‫قم‬
‫من‬ ‫القيمة‬ ‫بتعديل‬)Hello World, Activity_TaskList(!
‫إلى‬)Task List(‫التالي‬ ‫بالشكل‬ ‫لتصبح‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
113
‫المرجع‬ ‫تغيير‬ ‫أيضا‬ ‫يمكنك‬ ‫االن‬)app_name(‫فيه‬ ‫القيمة‬ ‫تغيير‬ ‫و‬
‫من‬)Task List(‫إلى‬)My 1st
Application(‫والتي‬‫ستغير‬
‫بتشغيل‬ ‫نقوم‬ ‫عندما‬ ‫ستظھر‬ ‫التي‬ ‫و‬ ‫النافذة‬ ‫أعلى‬ ‫في‬ ‫التطبيق‬ ‫عنوان‬
‫القادمة‬ ‫المرة‬ ‫في‬ ‫البرنامج‬
‫لنتعرف‬ ‫النص‬ ‫خلفية‬ ‫لون‬ ‫عن‬ ‫عبارة‬ ‫أخر‬ ‫مرجع‬ ‫سنضيف‬ ‫ذلك‬ ‫بعد‬
‫استخدامھا‬ ‫و‬ ‫القيم‬ ‫تغيير‬ ‫كيفية‬ ‫على‬
‫قم‬‫زر‬ ‫على‬ ‫بالضغط‬)add(‫لتظھر‬ ‫المراجع‬ ‫قائمة‬ ‫بجانب‬ ‫الموجود‬
‫التالية‬ ‫الشاشة‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
114
‫المرجع‬ ‫باختيار‬ ‫قم‬)color(‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬)OK(‫ليظھر‬
‫تركنا‬ ‫مع‬ ‫القائمة‬ ‫في‬ ‫جديد‬ ‫مرجع‬ ‫عنصر‬ ‫لدينا‬‫ل‬‫ت‬‫عبئة‬‫العنصر‬ ‫ھذا‬
‫من‬ ‫كل‬ ‫بتعريف‬ ‫قمنا‬ ‫حيث‬ ‫بالقيم‬
Name : TextViewBackColor
Value: #FF0000
‫التالية‬ ‫الشاشة‬ ‫في‬ ‫كما‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
115
‫القيمة‬ ‫أن‬ ‫حيث‬)#FF0000(‫ألوان‬ ‫معادلة‬ ‫تستخدم‬)RGB(‫و‬
‫كود‬ ‫في‬ ‫المستخدمة‬‫األلوان‬‫في‬)HTML(‫فيھا‬ ‫تكون‬ ‫التي‬ ‫و‬ ‫مثال‬
‫خانتين‬ ‫أول‬ ‫أن‬ ‫عبارة‬)FF(‫للقيمة‬ ‫ھي‬)R(‫تعني‬ ‫التي‬ ‫و‬)Red(‫و‬
‫الالحقتين‬ ‫الخانتين‬ ‫ثم‬ ‫من‬)00(‫بالقيمة‬ ‫خاصة‬)G(‫تعني‬ ‫التي‬ ‫و‬
)Green(‫الخان‬ ‫ثم‬ ‫من‬ ‫و‬‫تين‬‫األخيرتين‬)00(‫بالقيمة‬ ‫خاصة‬)B(
‫أي‬)Blue(‫خلط‬ ‫يمكن‬ ‫بذلك‬ ‫و‬‫األلوان‬‫لون‬ ‫لتكوين‬ ‫الثالثة‬ ‫الرئيسية‬
‫للون‬ ‫قيمة‬ ‫بوضع‬ ‫قم‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫جديد‬‫األحمر‬‫للونين‬ ‫صفر‬ ‫و‬
‫األخضر‬‫و‬‫األزرق‬‫اللون‬ ‫على‬ ‫للحصول‬ ‫ذلك‬ ‫و‬‫األحمر‬‫فقط‬
‫تحتاج‬‫اآلن‬‫إلغالق‬‫تبويب‬ ‫لسان‬)string.xml(‫يقوم‬ ‫لكي‬ ‫ذلك‬ ‫و‬
‫نفسه‬ ‫المشروع‬ ‫في‬ ‫استخدامھا‬ ‫يمكن‬ ‫و‬ ‫المشروع‬ ‫في‬ ‫القيم‬ ‫بحفظ‬
‫في‬ ‫الموجود‬ ‫الكود‬ ‫إلى‬ ‫بالعودة‬ ‫االن‬)main.xml(‫المجلد‬ ‫تحت‬
)layout(‫ليصبح‬ ‫النص‬ ‫بمربع‬ ‫الخاص‬ ‫الكود‬ ‫على‬ ‫بالتعديل‬ ‫قمنا‬ ‫و‬
‫التالي‬ ‫بالشكل‬
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:background="@color/TextViewBackColor" />
‫قمنا‬ ‫أننا‬ ‫حيث‬‫بإضافة‬‫الخاصية‬)background(‫لھا‬ ‫أسندنا‬ ‫و‬
‫المصادر‬ ‫ملف‬ ‫في‬ ‫عرفناھا‬ ‫التي‬ ‫اللون‬ ‫قيمة‬
)TextViewBackColor(‫اآلن‬‫بع‬‫قم‬ ‫البسيطة‬ ‫التعديالت‬ ‫ھذه‬ ‫د‬
‫بھا‬ ‫قمنا‬ ‫التي‬ ‫التعديالت‬ ‫أثر‬ ‫لترى‬ ‫برنامجك‬ ‫بتشغيل‬
‫زر‬ ‫على‬ ‫بالضغط‬ ‫فقم‬ ‫برسالة‬ ‫المشروع‬ ‫حفظ‬ ‫البرنامج‬ ‫منك‬ ‫يطلب‬ ‫قد‬
‫موافق‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
116
‫بالشكل‬ ‫ليكون‬ ‫المحاكي‬ ‫جھاز‬ ‫على‬ ‫يعمل‬ ‫ھو‬ ‫و‬ ‫تطبيقنا‬ ‫بعدھا‬ ‫لترى‬ ‫و‬
‫التالي‬
‫أصبح‬ ‫التطبيق‬ ‫عنوان‬ ‫أن‬ ‫حيث‬)My 1st
Application(‫القيمة‬ ‫و‬
‫أصبحت‬ ‫سطر‬ ‫أول‬ ‫في‬ ‫النصية‬)Task List(‫بأن‬ ‫ستالحظ‬ ‫كذلك‬ ‫و‬
‫اللون‬ ‫حمراء‬ ‫بخلفية‬ ‫أصبح‬ ‫النص‬ ‫مربع‬
‫تنويه‬:‫كيفية‬ ‫رأينا‬ ‫كما‬‫إسناد‬‫ملف‬ ‫من‬ ‫القيم‬)String(‫تتيح‬ ‫التي‬ ‫و‬
‫حال‬ ‫في‬ ‫مثال‬ ‫الحقا‬ ‫القيم‬ ‫ھذه‬ ‫تغيير‬ ‫لنا‬‫أتحنا‬‫واجھة‬ ‫تغيير‬ ‫للمستخدم‬
‫بالدال‬ ‫تقوم‬ ‫حيث‬ ‫التطبيق‬‫ملف‬ ‫على‬ ‫لة‬)String(‫اللغة‬ ‫بداللة‬ ‫أخر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
117
‫الحاجة‬ ‫دون‬ ‫مباشرة‬ ‫النص‬ ‫تمرير‬ ‫يمكننا‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫مثال‬ ‫المحلية‬
‫الحالي‬ ‫الكود‬ ‫كما‬ ‫مباشرة‬ ‫بالتعويض‬ ‫المرجع‬ ‫إلى‬ ‫للداللة‬
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Task List"
android:background="@color/TextViewBackColor" />
‫نحن‬‫اآلن‬‫خط‬ ‫إلى‬ ‫بحاجة‬‫و‬‫ة‬‫إضافية‬‫ھي‬ ‫و‬‫إعطاء‬‫صندوق‬ ‫عنصر‬
‫النص‬)TextView(‫معه‬ ‫التعامل‬ ‫نستطيع‬ ‫لكي‬ ‫ذلك‬ ‫و‬ ‫وحيد‬ ‫اسم‬
‫مثال‬ ‫ليكن‬ ‫و‬ ‫بنا‬ ‫الخاص‬ ‫الكود‬ ‫طريق‬ ‫عن‬)MainTextView(‫و‬
‫طريق‬ ‫ھناك‬ ‫بذلك‬ ‫لنقوم‬‫طريق‬ ‫عن‬ ‫أو‬ ‫مباشرة‬ ‫الكود‬ ‫طريق‬ ‫عن‬ ‫إما‬ ‫تين‬
‫ليقوم‬ ‫المرة‬ ‫ھذه‬ ‫عليه‬ ‫سنتعرف‬ ‫الذي‬ ‫و‬ ‫الخصائص‬ ‫صندوق‬ ‫استخدام‬
‫عنا‬ ‫بدال‬ ‫بالعمل‬ ‫ھو‬
‫مجلد‬ ‫تحت‬ ‫الشاشة‬ ‫إلى‬ ‫بالعودة‬ ‫قم‬)res >> layout(‫ل‬‫ي‬‫ظ‬‫ھ‬‫ر‬‫شكل‬
‫تبويب‬ ‫لسان‬ ‫ستجد‬ ‫أسفلھا‬ ‫في‬ ‫و‬ ‫بالواجھة‬ ‫الخاصة‬ ‫الشاشة‬
)Properties(‫عن‬ ‫بالبحث‬ ‫لتقم‬ ‫و‬‫الخاصية‬)id(‫لتقم‬ ‫و‬‫بإسناد‬
‫القيمة‬)MainTextView(‫التالي‬ ‫بالشكل‬ ‫ليكون‬ ‫إليھا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
118
‫التطوير‬ ‫بيئة‬ ‫ستقوم‬ ‫النقطة‬ ‫ھذه‬ ‫من‬ ‫انتھائك‬ ‫عند‬‫بإضافة‬‫سطر‬‫إلى‬
‫داخل‬ ‫النص‬ ‫مربع‬ ‫خصائص‬ ‫ضمن‬ ‫ھو‬ ‫و‬ ‫الكائن‬ ‫ھذا‬ ‫لتعريف‬ ‫النظام‬
‫الملف‬)main.xml(‫التالي‬ ‫بالشكل‬ ‫ليكون‬
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Task List"
android:background="@color/TextViewBackColor"
android:id="@+id/MainTextView"/>
‫تقوم‬ ‫أن‬ ‫فعليك‬ ‫الكود‬ ‫من‬ ‫مباشرة‬ ‫بتعريفه‬ ‫تقوم‬ ‫أن‬ ‫أردت‬ ‫حال‬ ‫في‬ ‫أو‬
‫بالش‬ ‫بكتابته‬‫التالي‬ ‫كل‬
android:id="@+id/MainTextView"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
119
‫تقوم‬ ‫التي‬ ‫و‬‫بإخبار‬‫التطوير‬ ‫بيئة‬‫بأننا‬‫جديد‬ ‫عنصر‬ ‫بتعريف‬ ‫نقوم‬
‫باسم‬)MainTextView(‫دو‬ ‫معه‬ ‫التعامل‬ ‫من‬ ‫سنتمكن‬ ‫عندھا‬ ‫و‬‫ن‬
‫إال‬ ‫أخر‬ ‫مكان‬ ‫في‬ ‫لتعريفه‬ ‫الحاجة‬‫يمكنك‬ ‫ال‬ ‫أنه‬ ‫تقع‬ ‫ذلك‬ ‫محدودية‬ ‫أن‬
‫ا‬ ‫الكائنات‬ ‫ضمن‬ ‫العنصر‬ ‫ھذا‬ ‫مع‬ ‫التعامل‬‫مثله‬ ‫قبله‬ ‫لتي‬‫فإنھا‬‫لن‬
‫العرض‬ ‫طريقة‬ ‫استخدمنا‬ ‫حال‬ ‫في‬ ‫مثال‬ ‫موجود‬ ‫انه‬ ‫تعرف‬
)Relative(‫و‬‫أردنا‬‫أن‬‫و‬ ‫البعض‬ ‫بعضھا‬ ‫مع‬ ‫الكائنات‬ ‫ھذه‬ ‫تتخاطب‬
‫تحتاج‬‫إلى‬‫الكائنات‬ ‫طريق‬ ‫عن‬ ‫معھا‬ ‫التعامل‬‫أالحقة‬
‫أن‬ ‫حيث‬)@+id/(‫بأن‬ ‫النظام‬ ‫تخبر‬ ‫االسم‬ ‫قبل‬ ‫وضعناھا‬ ‫التي‬ ‫و‬
‫تعري‬ ‫تم‬ ‫جديد‬ ‫كائن‬ ‫ھناك‬‫مباشرة‬ ‫معه‬ ‫التعامل‬ ‫يمكن‬ ‫الحقا‬ ‫و‬ ‫ھنا‬ ‫فه‬
‫مثال‬ ‫المرجع‬ ‫عبر‬
@id/MainTextView
‫وجود‬ ‫بدون‬‫إشارة‬‫الموجب‬)+(‫إذ‬‫أننا‬‫اآلن‬‫ليس‬ ‫و‬ ‫معه‬ ‫نتعامل‬
‫الحقا‬ ‫سترى‬ ‫كما‬ ‫تعريفه‬
‫للمشروع‬ ‫جديدة‬ ‫شاشة‬ ‫اضافة‬)‫جديد‬ ‫نشاط‬(
‫اآلن‬‫لنقوم‬‫بإنشاء‬‫عن‬ ‫إليھا‬ ‫نصل‬ ‫سوف‬ ‫التي‬ ‫ھي‬ ‫و‬ ‫جديدة‬ ‫شاشة‬
‫قائ‬ ‫طريق‬‫تمكيننا‬ ‫ھي‬ ‫الشاشة‬ ‫ھذه‬ ‫وظيفة‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬ ‫من‬ ‫مة‬
‫أحدھما‬ ‫نص‬ ‫مربعي‬ ‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫المھمة‬ ‫بيانات‬ ‫كتابة‬ ‫من‬
‫المھمة‬ ‫عنوان‬ ‫على‬ ‫يحتوي‬)Title(‫تفاصيل‬ ‫على‬ ‫يحتوي‬ ‫الثاني‬ ‫و‬
‫المھمة‬)Details(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
120
‫قائمة‬ ‫ببناء‬ ‫فلنقم‬ ‫الشاشة‬ ‫بناء‬ ‫من‬ ‫انتھينا‬ ‫أن‬ ‫بعد‬)Menu(‫على‬
‫الرئيسي‬ ‫الشاشة‬‫الثانية‬ ‫الشاشة‬ ‫استدعاء‬ ‫من‬ ‫لتمكننا‬ ‫ة‬
‫قائمة‬ ‫بناء‬)Menu(
‫عد‬‫اآلن‬‫الشاشة‬ ‫إلى‬‫األولى‬)Activity_TaskList(‫قم‬ ‫و‬‫بإضافة‬
‫الدالة‬ ‫استدعاء‬ ‫سطر‬)Menu(‫داخل‬ ‫في‬ ‫معھا‬ ‫التعامل‬ ‫نستطيع‬ ‫حتى‬
‫الرئيسية‬ ‫للدالة‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫بنا‬ ‫الخاص‬ ‫الكود‬)View(
import android.view.Menu;
import android.view.View;
‫إلى‬ ‫نحتاج‬ ‫كما‬‫إضافة‬‫النص‬ ‫مربعات‬ ‫مع‬ ‫التعامل‬ ‫دالة‬
import android.widget.TextView;
‫الشكل‬ ‫بھذا‬ ‫لدينا‬ ‫الكود‬ ‫ليصبح‬
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.widget.TextView;
public class Activity_TaskList extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
121
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
‫اآلن‬‫الكود‬ ‫بعض‬ ‫سنضيف‬‫إلنشاء‬)‫جديدة‬ ‫قائمة‬(
‫الحوار‬ ‫صناديق‬)activities,alertdialog,toast(
‫تختلف‬ ‫التي‬ ‫و‬ ‫الحوار‬ ‫صناديق‬ ‫من‬ ‫أنواع‬ ‫ثالث‬ ‫أندرويد‬ ‫في‬ ‫يوجد‬
‫رأيك‬ ‫ما‬ ‫الوظيفة‬ ‫باالختالف‬‫اآلن‬‫تظھر‬ ‫صغيرة‬ ‫رسالة‬ ‫أضفنا‬ ‫لو‬
‫مثال‬ ‫ترحيب‬ ‫رسالة‬ ‫فيھا‬ ‫تظھر‬ ‫البرنامج‬ ‫افتتاح‬ ‫عند‬ ‫لفترة‬
)Welcome(‫مفيدة‬ ‫معلومات‬ ‫بتضمينھا‬ ‫الحقا‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫و‬
‫الواجب‬ ‫المھام‬ ‫عدد‬ ‫مثال‬ ‫أو‬ ‫المھام‬ ‫عدد‬ ‫مثال‬‫أدائھا‬‫حال‬ ‫في‬ ‫اليوم‬
‫و‬ ‫البرنامج‬ ‫طورت‬‫إض‬‫ا‬‫فة‬‫وقت‬ ‫تحديد‬ ‫خاصية‬‫إلنھاء‬‫مثال‬ ‫مھمة‬ ‫كل‬
‫قم‬ ‫الحوار‬ ‫صناديق‬ ‫دالة‬ ‫الستدعاء‬ ‫االن‬‫بإضافة‬‫في‬ ‫التالي‬ ‫الشطر‬
‫أعلى‬‫الكود‬
‫البداي‬ ‫في‬‫إلى‬ ‫بحاجة‬ ‫أنت‬ ‫ة‬‫إضافة‬‫مرجع‬
import android.widget.Toast;
‫قم‬ ‫ثم‬ ‫من‬ ‫و‬‫بإضافة‬‫ليصبح‬ ‫المشروع‬ ‫إلى‬ ‫التالي‬ ‫الكود‬
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Toast.makeText(Activity_TaskList.this,"Welcome",0).show()
;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
122
TextView[] tvs;
tvs = new TextView[10];
for (int i=0; i<10; ++i)
{
tvs[i] = new TextView(this);
tvs[i].setText("hi");
}
}
‫اآلن‬‫للترحيب‬ ‫حوار‬ ‫مربع‬ ‫ستظھر‬ ‫التطبيق‬ ‫تشغيل‬ ‫عند‬
‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬ ‫تظھر‬ ‫قائمة‬ ‫الكود‬ ‫إلى‬ ‫سنضيف‬)Menu(‫و‬
‫حفظ‬ ‫كلمة‬ ‫يحتوي‬ ‫وحيد‬ ‫زر‬ ‫بھا‬ ‫سنضع‬ ‫التي‬)Save(‫يظھر‬ ‫و‬
‫النظام‬ ‫من‬ ‫بالحفظ‬ ‫الخاصة‬ ‫االفتراضية‬ ‫الصورة‬
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem item1 = menu.add(0, 1, 0, "Save");
item1.setIcon(android.R.drawable.ic_menu_save );
return true;
}
‫اآلن‬‫داخل‬ ‫النص‬ ‫قيمة‬ ‫بطباعة‬ ‫سنقوم‬ ‫العنصر‬ ‫ھذا‬ ‫على‬ ‫الضغط‬ ‫عند‬
‫الكونسول‬)‫العمل‬ ‫سجل‬(
‫تحتا‬ ‫البداية‬ ‫في‬‫إلى‬ ‫ج‬‫إضافة‬‫إلى‬ ‫مرجع‬
import android.util.Log;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
123
‫ثم‬ ‫من‬ ‫و‬‫إضافة‬‫التالي‬ ‫الكود‬
@Override
public boolean onOptionsItemSelected(MenuItem item) {
TextView MainTextView =
(TextView)findViewById(R.id.MainTextView);
switch (item.getItemId())
{
case 1 :
Log.v("Task:",MainTextView.getText().toString());
return true;
}
return false;
}
‫المشروع‬ ‫ھذا‬ ‫إلى‬ ‫المدخل‬ ‫أنھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
124
‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫نشر‬
‫حساب‬ ‫تسجيل‬ ‫إلى‬ ‫أوال‬ ‫تحتاج‬ ‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫لنشر‬
‫مبلغ‬ ‫دفع‬ ‫يتطلب‬ ‫الذي‬ ‫و‬ ‫للبيع‬ ‫بك‬ ‫خاص‬)50(‫لمرة‬ ‫و‬ ‫أمريكي‬ ‫دوالر‬
‫واحدة‬
‫بمثابة‬ ‫ليكون‬ ‫تطبيق‬ ‫لكل‬ ‫خاص‬ ‫مفتاح‬ ‫إنشاء‬ ‫إلى‬ ‫بحاجة‬ ‫أنت‬ ‫ثم‬
‫التطبيق‬ ‫لھذا‬ ‫رقمي‬ ‫توقيع‬ ‫أو‬ ‫بصمة‬،‫حال‬ ‫في‬ ‫و‬‫إنشاء‬‫الملف‬ ‫ھذا‬
‫أمن‬ ‫مكان‬ ‫في‬ ‫حفظه‬ ‫إلى‬ ‫تحتاج‬،‫على‬ ‫التطبيق‬ ‫برفع‬ ‫قيامك‬ ‫عند‬ ‫حيث‬
‫ب‬ ‫أندرويد‬ ‫سوق‬‫تحديثات‬ ‫أي‬ ‫برفع‬ ‫تقوم‬ ‫أن‬ ‫تستطيع‬ ‫فلن‬ ‫التوقيع‬ ‫ھذا‬
‫مرة‬ ‫بأول‬ ‫به‬ ‫قمت‬ ‫الذي‬ ‫التوقيع‬ ‫بنفس‬ ‫إال‬ ‫جديدة‬
‫خاص‬ ‫مفتاح‬ ‫تسجيل‬‫لتطبيقك‬
‫أداة‬ ‫عن‬ ‫جھازك‬ ‫في‬ ‫ابحث‬)keytool(‫مجلد‬ ‫داخل‬ ‫الموجودة‬ ‫و‬
)JDK(‫مثال‬ ‫التالي‬ ‫المسار‬ ‫على‬ ‫ليكن‬ ‫و‬
C:Program FilesJavajdk1.6.0_18binkeytool.exe
‫سطر‬ ‫من‬‫األوامر‬‫بكتابة‬ ‫قم‬ ‫جھازك‬ ‫في‬‫األمر‬‫التالي‬
keytool -list -alias alias_name -keystore my-
release-key.keystore
‫أنك‬ ‫حيث‬‫ستستبد‬‫ل‬‫مثال‬ ‫ليكن‬ ‫و‬ ‫بأخرى‬ ‫العوامل‬ ‫بعض‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
125
keytool -genkey -v -keystore badwi.keystore -alias
badwi -keyalg RSA -keysize 2048 -validity 10000
‫التطبيق‬ ‫اسم‬ ‫الحظ‬)badwi(‫المدخالت‬ ‫بعض‬ ‫لك‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬
‫الخاص‬ ‫التشفير‬ ‫أجل‬ ‫من‬ ‫ذلك‬ ‫و‬ ‫تعريفھا‬ ‫إلى‬ ‫تحتاج‬ ‫التي‬‫إلنشاء‬‫ملف‬
‫الخاص‬ ‫التعريف‬
‫اآلن‬‫الملف‬ ‫عن‬ ‫ابحث‬)badwi.keystore(‫في‬ ‫عادة‬ ‫يكون‬ ‫الذي‬ ‫و‬
‫المسار‬:
Windows Vista or 7:
C:Users<user>.androidbadwi.keystore
Windows XP:
C:Documents and Settings<user>.androidbadwi.keystore
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
126
‫المفتاح‬ ‫مع‬ ‫التطبيق‬ ‫تصدير‬
‫عن‬ ‫ذلك‬ ‫و‬ ‫المنتج‬ ‫الملف‬ ‫مع‬ ‫الملف‬ ‫ھذا‬ ‫لربط‬ ‫تحتاج‬ ‫الخطوة‬ ‫ھذه‬ ‫بعد‬
‫التطوير‬ ‫بيئة‬ ‫طريق‬،‫و‬ ‫المشروع‬ ‫اسم‬ ‫إلى‬ ‫اذھب‬‫اضغط‬‫الفأرة‬ ‫بزر‬
‫األيمن‬
‫معال‬ ‫مربع‬ ‫لك‬ ‫ليظھر‬‫الملف‬ ‫تصدير‬ ‫ج‬‫المشروع‬ ‫اسم‬ ‫يحوي‬ ‫الذي‬ ‫و‬
‫التالي‬ ‫اختر‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
127
‫الذي‬ ‫المفتاح‬ ‫ملف‬ ‫مكان‬ ‫تحديد‬ ‫إلى‬ ‫تحتاج‬ ‫الشاشة‬ ‫ھذه‬ ‫في‬‫انشئن‬‫ا‬‫ھا‬
‫استخدمتھا‬ ‫الذي‬ ‫السر‬ ‫كلمة‬ ‫كذلك‬ ‫و‬ ‫سابقا‬‫أثناء‬‫المفتاح‬ ‫بناء‬
‫اخترتھا‬ ‫الذي‬ ‫السر‬ ‫كلمة‬ ‫اكتب‬‫أثناء‬‫معرف‬ ‫تعريف‬‫المفتاح‬‫أثناء‬
‫اإلنشاء‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
128
‫ال‬ ‫ھذه‬ ‫في‬‫و‬ ‫النھائي‬ ‫الملف‬ ‫بتصدير‬ ‫تقوم‬ ‫سوف‬ ‫أين‬ ‫ستحدد‬ ‫شاشة‬
‫أندرويد‬ ‫سوق‬ ‫على‬ ‫برفعه‬ ‫تقوم‬ ‫سوف‬ ‫الذي‬
‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫رفع‬
‫اذھب‬‫إلى‬‫التالي‬ ‫العنوان‬
http://market.android.com/publish/Home
‫ال‬ ‫الرئيسية‬ ‫الصفحة‬ ‫ستجد‬‫تستعرض‬ ‫تي‬‫الحالية‬ ‫التطبيقات‬ ‫قائمة‬
‫زر‬ ‫على‬ ‫اضغط‬)Upload Application(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
129
‫شاشة‬ ‫لك‬ ‫لتظھر‬‫إضافة‬‫جديد‬ ‫تطبيق‬،‫التطبيق‬ ‫رفع‬ ‫سوى‬ ‫عليك‬ ‫ما‬
‫و‬ ‫بالتطبيق‬ ‫الخاصة‬ ‫الصور‬ ‫و‬ ‫بتصديره‬ ‫قمنا‬ ‫الذي‬ ‫النھائي‬‫األيقونات‬
‫بك‬ ‫الخاصة‬ ‫المعلومات‬ ‫و‬
‫الخاصة‬ ‫الشاشة‬‫باإلضافة‬‫التالية‬ ‫الصفحة‬ ‫في‬،‫و‬‫التي‬ ‫الصفحة‬ ‫في‬
‫البيانات‬ ‫رفع‬ ‫بعد‬ ‫للشاشة‬ ‫صورة‬ ‫توجد‬ ‫تليھا‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
130
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
131
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
132
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
133
‫تطبيق‬RestDroid-mini
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
134
‫تطبيق‬RestDroid-mini
‫بتطبيق‬ ‫الخاص‬ ‫البرمجي‬ ‫الكود‬ ‫شرح‬ ‫الفصل‬ ‫ھذا‬ ‫يتناول‬RestDroid‫والذي‬
‫مع‬ ‫بالتعاون‬ ‫العرب‬ ‫أندرويد‬ ‫مطوري‬ ‫مجتمع‬ ‫مشاريع‬ ‫من‬ ‫مشروع‬ ‫كأول‬ ‫طرحناه‬
‫ال‬ ‫أردرويد‬ ‫موقع‬‫وھواتفه‬ ‫األندرويد‬ ‫بنظام‬ ‫عالقة‬ ‫ماله‬ ‫بكل‬ ‫متخصص‬.‫تم‬ ‫التطبيق‬
‫األندرويد‬ ‫تطبيقات‬ ‫سوق‬ ‫في‬ ‫طرحه‬“‫مي‬ ‫ساليد‬ ‫وسوق‬ ‫ماركت‬ ‫أندرويد‬”‫قد‬ ‫وكنا‬
‫يملكھا‬ ‫التي‬ ‫المميزات‬ ‫وعن‬ ‫عنه‬ ‫كتبنا‬.‫سيكون‬ ‫التطبيق‬ ،‫قبل‬ ‫من‬ ‫ذكرنا‬ ‫وكما‬
‫األندرويد‬ ‫ببرمجة‬ ‫العرب‬ ‫المھتمون‬ ‫ليتمكن‬ ‫كامل‬ ‫بشكل‬ ‫المصدر‬ ‫مفتوح‬‫من‬
‫األندرويد‬ ‫تطبيقات‬ ‫مجال‬ ‫نحو‬ ‫واالنطالق‬ ‫المصدرية‬ ‫الشفرة‬ ‫وفھم‬ ‫دراسة‬.‫ولكن‬
‫تطبيق‬ ‫من‬ ‫مصغرة‬ ‫لنسخة‬ ‫كامل‬ ‫شرح‬ ‫بتقديم‬ ‫الكتاب‬ ‫ھذا‬ ‫في‬ ‫سنقوم‬RestDroid
‫ب‬ ‫سميناھا‬ ‫األصلي‬RestDroid-mini.
‫التالية‬ ‫الخصائص‬ ‫على‬ ‫تحتوي‬ ‫التطبيق‬ ‫من‬ ‫الكاملة‬ ‫النسخة‬:
‫تطبيق‬RestDroid‫يستخدم‬‫الواج‬‫التطويرية‬ ‫البرمجية‬ ‫ھة‬API‫بموقع‬ ‫الخاصة‬
‫التالية‬ ‫المزايا‬ ‫عليھا‬ ‫ليبني‬ ‫قيم‬:
-‫فيھا‬ ‫المطاعم‬ ‫عن‬ ‫والبحث‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬.
-‫أفضل‬ ‫وعرض‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬٥٠‫فيھا‬ ‫مطعما‬.
-‫معينة‬ ‫مواصفات‬ ‫باستخدام‬ ‫مطاعم‬ ‫عن‬ ‫والبحث‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬)‫مطعم‬
‫ن‬ ،‫صيني‬ ،‫ايطالي‬،‫أسماك‬ ،‫باتي‬…).
-‫بھا‬ ‫الخاصة‬ ‫التقييمات‬ ‫وبجانبھا‬ ‫البحث‬ ‫معلومات‬ ‫تناسب‬ ‫التي‬ ‫المطاعم‬ ‫عرض‬.
-‫غوغل‬ ‫خرائط‬ ‫على‬ ‫المطاعم‬ ‫عرض‬.
-‫الفروع‬ ‫معلومات‬ ‫استعراض‬ ‫إمكانية‬)‫وذلك‬ ‫الخريطة‬ ‫على‬ ‫بعضھا‬ ‫يظھر‬ ‫ال‬ ‫وقد‬
‫المستخدمين‬ ‫قبل‬ ‫من‬ ‫قيم‬ ‫موقع‬ ‫في‬ ‫األصل‬ ‫في‬ ‫مواقعھا‬ ‫تحديد‬ ‫عدم‬ ‫بسبب‬).
-‫إمكا‬‫المطاعم‬ ‫على‬ ‫المستخدمين‬ ‫تعليقات‬ ‫استعراض‬ ‫نية‬.
‫التالية‬ ‫التقنيات‬ ‫يستخدم‬ ‫التطبيق‬:
-‫ال‬ ‫واستخدام‬ ‫باالنترنت‬ ‫االتصال‬API.
-‫غوغل‬ ‫خرائط‬.
‫لالستزادة‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
135
‫اليوتيوب‬ ‫على‬ ‫تعريفي‬ ‫مقطع‬:
EDuS6gq4JAhttp://www.youtube.com/watch?v=B
‫واحد‬ ‫زر‬ ‫بعرض‬ ‫التطبيق‬ ‫سيكتفي‬ ،‫ھنا‬ ‫سنشرحھا‬ ‫والتي‬ ‫المصغرة‬ ‫للنسخة‬ ‫بالنسبة‬
‫أفضل‬ ‫جلب‬ ‫يتم‬ ‫عليه‬ ‫بالضغط‬٥٠‫الرياض‬ ‫مدينة‬ ‫في‬ ‫مطعما‬-‫العربية‬ ‫المملكة‬
‫تقييمھا‬ ‫ويعرض‬ ‫السعودية‬.‫على‬ ‫موقعه‬ ‫عرض‬ ‫سيتم‬ ،‫مطعم‬ ‫أي‬ ‫على‬ ‫بالضغط‬
‫غوغل‬ ‫خريطة‬.
‫التطبيق‬ ‫واجھات‬:
‫تسب‬ ‫التي‬ ‫الخطوة‬‫إظھارھا‬ ‫المطلوب‬ ‫الواجھات‬ ‫وعدد‬ ‫شكل‬ ‫تحديد‬ ‫ھي‬ ،‫البرمجة‬ ‫ق‬
‫التطبيق‬ ‫في‬.‫وھي‬ ‫واجھات‬ ‫ثالثة‬ ‫الى‬ ‫تطبيقنا‬ ‫في‬ ‫نحتاج‬:
‫البداية‬ ‫واجھة‬:
‫عليه‬ ‫مكتوب‬ ‫وزر‬ ‫التطبيق‬ ‫شعار‬ ‫يظھر‬ ‫وفيھا‬“‫أفضل‬ ‫جلب‬٥٠‫في‬ ‫مطعما‬
‫الرياض‬”.
‫المطاعم‬ ‫واجھة‬:
‫وتقييماتھا‬ ‫المطاعم‬ ‫أسماء‬ ‫تظھر‬ ‫وفيھا‬.‫المرغو‬ ‫الشكل‬‫كل‬ ‫تقييم‬ ‫يظھر‬ ‫أن‬ ‫ھو‬ ‫ب‬
‫مطعم‬)‫الموزونة‬ ‫العالمة‬(‫شكل‬ ‫على‬٥‫نجوم‬+‫رقما‬ ‫الموزونة‬ ‫العالمة‬+‫عدد‬
‫رقما‬ ‫األصوات‬)‫بحسب‬ ‫المطاعم‬ ‫لمقارنة‬ ‫األنسب‬ ‫المعيار‬ ‫ھي‬ ‫الموزونة‬ ‫العالمة‬
‫قيم‬ ‫موقع‬.(
‫الخريطة‬ ‫واجھة‬:
‫يتم‬ ‫بحيث‬ ‫غوغل‬ ‫خريطة‬ ‫على‬ ‫ومكانه‬ ‫المطعم‬ ‫اسم‬ ‫فيھا‬ ‫يظھر‬ ‫التي‬ ‫الواجھة‬ ‫وھي‬
‫خضراء‬ ‫بنقطة‬ ‫المطعم‬ ‫مكان‬ ‫تمثيل‬.
‫المجموعات‬ ‫تصميم‬ ‫الى‬ ‫اآلن‬ ‫نأتي‬ ،‫الواجھات‬ ‫تصميم‬ ‫بعد‬Classes‫والدوال‬
Methods‫بالتطبيق‬ ‫الخاصة‬.‫جاھدين‬ ‫سنقوم‬‫بإتباع‬‫تصميم‬ ‫في‬ ‫السبل‬ ‫أفضل‬
‫وظيفتھا‬ ‫وفھم‬ ‫فھمھا‬ ‫القارىء‬ ‫على‬ ‫يسھل‬ ‫بشكل‬ ‫المجموعات‬)‫شرحنا‬ ‫في‬ ‫نفترض‬
‫الجافا‬ ‫بلغة‬ ‫القارىء‬ ‫إلمام‬-‫مستوى‬‫مبتدئ‬‫متقدم‬-‫التي‬ ‫األكواد‬ ‫فھم‬ ‫من‬ ‫وتمكنه‬
‫الكتاب‬ ‫ھذا‬ ‫من‬ ‫السابقة‬ ‫الصفحات‬ ‫في‬ ‫عرضناھا‬(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
136
‫بھا‬ ‫يقترن‬ ‫واجھة‬ ‫كل‬ ‫فإن‬ ‫نعرف‬ ‫كما‬ ‫بداية‬‫خاصة‬ ‫مجموعة‬‫إضافة‬ ‫بھا‬‫إلى‬‫ملف‬
XML‫إظھارھا‬ ‫المطلوب‬ ‫المرئية‬ ‫العناصر‬ ‫على‬ ‫يحتوي‬)‫الشعار‬+‫في‬ ‫زر‬
‫مثال‬ ‫األولى‬ ‫الواجھة‬(‫أننا‬ ‫يعني‬ ‫وھذا‬‫بحاجة‬‫إلى‬٣‫و‬ ‫جافا‬ ‫مجموعات‬٣‫ملفات‬
XML‫التالي‬ ‫بالشكل‬:
‫ھي‬ ‫األولى‬ ‫الواجھة‬ ‫طبعا‬intro‫ھي‬ ‫والثانية‬Best50‫ھي‬ ‫والثالثة‬
ViewOnMapActivity.
‫المساعدة‬ ‫المجموعات‬ ‫من‬ ‫عدد‬ ‫لدينا‬ ‫يوجد‬ ،‫أعاله‬ ‫مجموعات‬ ‫الثالث‬ ‫الى‬ ‫باإلضافة‬
‫التالي‬ ‫النحو‬ ‫على‬ ‫وھي‬:
RestDroidApplication.java
‫لھا‬ ‫أطفاال‬ ‫المجموعات‬ ‫باقي‬ ‫تعتبر‬ ‫التي‬ ‫األم‬ ‫المجموعة‬ ‫وھي‬“‫بوراثة‬ ‫تقوم‬ ‫كونھا‬
‫مجموعة‬Application‫األنشطة‬ ‫حكما‬ ‫تحتھا‬ ‫تندرج‬ ‫والتي‬Activities
‫والمجموعات‬Classes‫التطبيق‬ ‫في‬ ‫الموجودة‬”.‫وضع‬ ‫ھو‬ ‫تواجدھا‬ ‫من‬ ‫الھدف‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
137
‫الكود‬ ‫يتكرر‬ ‫ال‬ ‫بحيث‬ ‫فيھا‬ ‫المجموعات‬ ‫بين‬ ‫المشتركة‬ ‫الدوال‬‫في‬ ‫للدوال‬ ‫البرمجي‬
‫مجموعة‬ ‫من‬ ‫أكثر‬.‫والتي‬ ‫العامة‬ ‫للمتغيرات‬ ‫كمستودع‬ ‫استخدامھا‬ ‫الى‬ ‫باإلضافة‬
‫اليھا‬ ‫الدخول‬ ‫مجموعة‬ ‫ألي‬ ‫يمكن‬Global Variables (‫سيتم‬ ‫المتغيرات‬ ‫ھذه‬
‫مجموعة‬ ‫تطلبھا‬ ‫التي‬ ‫القيم‬ ‫لتمرير‬ ‫كوسيلة‬ ‫توظيفھا‬‫التي‬ ‫المجموعة‬ ‫من‬ ‫واجھة‬
‫قبلھا‬.(‫بحا‬ ‫لسنا‬ ‫أننا‬ ‫آخر‬ ‫بمعنى‬‫كل‬ ‫في‬ ‫المجموعات‬ ‫من‬ ‫النوع‬ ‫لھذا‬ ‫اللجوء‬ ‫الى‬ ‫جة‬
‫المجموعات‬ ‫بين‬ ‫المشتركة‬ ‫الدوال‬ ‫من‬ ‫عدد‬ ‫وجود‬ ‫حالة‬ ‫في‬ ‫ولكن‬ ،‫نبرمجه‬ ‫تطبيق‬
‫الدوال‬ ‫ھذه‬ ‫على‬ ‫التعديل‬ ‫بعد‬ ‫فيما‬ ‫ليسھل‬ ‫واحد‬ ‫مكان‬ ‫في‬ ‫وضعھا‬ ‫يفضل‬ ‫فإنه‬.
RatedItem.java
‫لكائن‬ ‫بسيطة‬ ‫مجموعة‬ ‫وھي‬Object‫المطعم‬ ‫يمثل‬.‫لديه‬ ‫المطعم‬ ‫ھذا‬‫الخصائص‬
‫التالية‬:‫مميز‬ ‫رقم‬+‫اسم‬+‫األصوات‬ ‫عدد‬+‫الموزونة‬ ‫العالمة‬.
RatedRestaurantListItem.java
‫بھا‬ ‫ويقترن‬
rest_list_item.xml
‫بكل‬ ‫الخاص‬ ‫العرض‬ ‫قالب‬ ‫تكوين‬ ‫ھو‬ ‫ال‬ ‫ام‬ ‫االكس‬ ‫وملف‬ ‫المجموعة‬ ‫ھذه‬ ‫ودور‬
‫مطعم‬.‫الواجھة‬ ‫في‬ ‫يظھر‬ ‫ال‬ ‫ام‬ ‫االكس‬ ‫ملف‬ ‫في‬ ‫وضعه‬ ‫يتم‬ ‫ما‬ ‫فإن‬ ‫نعرف‬ ‫كما‬‫عند‬
‫به‬ ‫وضعنا‬ ‫فإذا‬ ،‫تشغيلھا‬٣‫ھي‬ ‫كما‬ ‫ستظھر‬ ،‫وصورة‬ ‫أزرار‬.‫السؤال‬‫لو‬ ‫ماذا‬ ‫ھو‬
‫عدد‬ ‫مع‬ ‫حالتنا‬ ‫في‬ ‫يتناسب‬ ‫تفاعلي‬ ‫بشكل‬ ‫وتتشكل‬ ‫الواجھة‬ ‫تتغير‬ ‫أن‬ ‫نريد‬ ‫كنا‬
‫المطاعم‬)‫وھو‬ ‫ثابت‬ ‫رقم‬ ‫لدينا‬ ‫التطبيق‬ ‫ھذا‬ ‫في‬٥٠‫التطبيق‬ ‫في‬ ‫ولكن‬ ،‫مطعما‬
‫من‬ ‫أكثر‬ ‫المدن‬ ‫احدى‬ ‫تملك‬ ‫ال‬ ‫قد‬ ،‫األشمل‬٣٠‫مط‬‫عما‬(‫نريد‬ ‫ال‬ ‫أننا‬ ‫الى‬ ‫أضف‬
‫الواجھة‬ ‫عناصر‬ ‫تكرار‬٥٠‫مرة؟‬
‫واحد‬ ‫بعنصر‬ ‫الخاصة‬ ‫الواجھة‬ ‫بتشكيل‬ ‫ھو‬ ‫الحل‬)‫واحد‬ ‫مطعم‬ ‫أي‬(‫والتحكم‬
‫عنصر‬ ‫كل‬ ‫ومحتوى‬ ‫التكرار‬ ‫مرات‬ ‫بعدد‬ ‫برمجيا‬)‫لمجموعة‬ ‫الحاجة‬ ‫تأتي‬ ‫وھنا‬
RatedItem.java‫عنصر‬ ‫كل‬ ‫معلومات‬ ‫منھا‬ ‫سنستقي‬ ‫والتي‬.(
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
138
‫الشكل‬١
AddressOverlay.java
‫نقطة‬ ‫رسم‬ ‫يمكننا‬ ‫بحيث‬ ‫الخريطة‬ ‫فوق‬ ‫تظھر‬ ‫كطبقة‬ ‫استخدامھا‬ ‫يتم‬ ‫المجموعة‬ ‫ھذه‬
‫المطعم‬ ‫لموقع‬ ‫المقابل‬ ‫المكان‬ ‫في‬ ‫خضراء‬.
‫إذ‬‫الشكل‬ ‫في‬ ‫ھو‬ ‫كما‬ ‫للمجموعات‬ ‫النھائي‬ ‫الشكل‬ ‫لدينا‬ ‫يصبح‬٢.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
139
‫الشكل‬٢
‫نالحظ‬‫يلي‬ ‫ما‬ ‫أعاله‬ ‫الشكل‬ ‫من‬:
-‫مجموعة‬RestDroidApplication.java‫أصب‬‫حت‬‫تستطيع‬ ‫عامة‬ ‫مجموعة‬
‫مجموعة‬ ‫خصائص‬ ‫ورثت‬ ‫األولى‬ ‫كون‬ ‫معھا‬ ‫التواصل‬ ‫المجموعات‬ ‫باقي‬
Application‫األندرويد‬ ‫تطبيق‬ ‫جسد‬ ‫تمثل‬ ‫التي‬ ‫المجموعة‬ ‫وھي‬)‫التطبيق‬ ‫أن‬ ‫أي‬
Application‫نشاط‬ ‫مجموعة‬ ‫من‬ ‫مكون‬Activity‫أكثر‬ ‫أو‬ ‫واحدة‬.(
-‫من‬ ‫خصائصھا‬ ‫تستمد‬ ‫التي‬ ‫الثالث‬ ‫المجموعات‬Activity‫تستطيع‬ ‫أنھا‬ ‫يجمعھا‬
‫السابقة‬ ‫المجموعة‬ ‫أي‬ ،‫يحتويھا‬ ‫الذي‬ ‫الجسد‬ ‫ومتغيرات‬ ‫دوال‬ ‫رؤية‬.
-‫مساعد‬ ‫ذكرنا‬ ‫كما‬ ‫ھي‬ ‫الباقية‬ ‫المجموعات‬(Auxiliary)‫من‬ ‫يستفيد‬ ‫وبعضھا‬
‫وتعريفھا‬ ‫صياغتھا‬ ‫ويعيد‬ ‫أعلى‬ ‫مجموعات‬ ‫خصائص‬)‫كمجموعتي‬
RatedRestaurantListItem.java‫و‬AddressOverlay.java)‫وھو‬‫ما‬
‫سيت‬‫م‬‫الحقا‬ ‫توضيحه‬.
-‫مجموعة‬RatedRestaurantListItem.java‫بملف‬ ‫ترتبط‬
rest_list_item.xml‫بملفات‬ ‫المجموعات‬ ‫باقي‬ ‫الرتباط‬ ‫ما‬ ‫نوعا‬ ‫مغاير‬ ‫بشكل‬
‫القادم‬ ‫الشرح‬ ‫في‬ ‫جليا‬ ‫سيبرز‬ ‫وھذا‬ ‫خاصتھا‬ ‫ال‬ ‫ام‬ ‫االكس‬)‫وصل‬ ‫تم‬ ‫لذلك‬
‫أسود‬ ‫وليس‬ ‫رمادي‬ ‫بخط‬ ‫وملفھا‬ ‫المجموعة‬.(
‫التطبي‬ ‫إنشاء‬‫ق‬:
‫والتوجه‬ ‫االكليبس‬ ‫بتشغيل‬ ‫نقوم‬‫إلى‬‫قائمة‬File>new>project
‫مجلد‬ ‫بفتح‬ ‫نقوم‬Android‫منه‬ ‫ونختار‬Android Project
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
140
‫نقوم‬ ‫ثم‬‫بمليء‬‫التالية‬ ‫الصور‬ ‫في‬ ‫لما‬ ‫مشابه‬ ‫بشكل‬ ‫البيانات‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
141
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
142
‫تعريف‬ ‫علينا‬ ‫يتوجب‬ ،‫المشروع‬ ‫داخل‬ ‫العربية‬ ‫األحرف‬ ‫استخدام‬ ‫من‬ ‫نتمكن‬ ‫حتى‬
‫ليك‬ ‫الترميز‬‫ون‬UTF-8‫المشروع‬ ‫في‬.‫المشروع‬ ‫اسم‬ ‫على‬ ‫األيمن‬ ‫بالزر‬ ‫اضغط‬
‫ثم‬ ‫ومن‬Properties:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
143
‫مجموعة‬ ‫بإنشاء‬ ‫اآلن‬ ‫نقوم‬Class‫بمسمى‬intro:
‫بھا‬ ‫الخاصة‬ ‫البيانات‬ ‫ونمأل‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
144
(‫المنشأة‬ ‫المجموعة‬ ‫تعلو‬ ‫التي‬ ‫المجموعة‬ ‫اسم‬ ‫الحظ‬android.app.Activity )
‫ا‬ ‫الكود‬ ‫كتابة‬ ‫في‬ ‫الشروع‬ ‫قبل‬‫المجموعة‬ ‫بھذه‬ ‫الخاص‬ ‫لبرمجي‬)‫ستقترن‬ ‫والتي‬
‫للمستخدم‬ ‫ستظھر‬ ‫التي‬ ‫اإلبتدائية‬ ‫بالواجھة‬(‫الواجھة‬ ‫بإنشاء‬ ‫نقوم‬ ‫أن‬ ‫يفضل‬ ،
‫المرئية‬.‫ملف‬ ‫باستخدام‬ ‫نقوم‬ ،‫ذلك‬ ‫لعمل‬main.xml‫تم‬ ‫الذي‬‫إنشاؤه‬‫عند‬ ‫تلقائيا‬
‫المشروع‬ ‫إنشاء‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
145
‫الشكل‬ ‫على‬ ‫وستكون‬ ،‫جدا‬ ‫بسيطة‬ ‫تصميمھا‬ ‫نريد‬ ‫التي‬ ‫الواجھة‬‫التالي‬:
‫زر‬ ،‫المنتصف‬ ‫في‬ ‫تظھر‬ ‫صورة‬ ،‫بيضاء‬ ‫خلفية‬.
‫ملف‬ ‫سنترك‬ ،‫البيضاء‬ ‫للخلفية‬ ‫بالنسبة‬main.xml‫نسميه‬ ‫ملف‬ ‫بإنشاء‬ ‫ونقوم‬ ‫قليال‬
‫مثال‬colors.xml‫مجلد‬ ‫تحت‬ ‫ونضعه‬values (‫بالزر‬ ‫بالضغط‬ ‫اإلنشاء‬ ‫يتم‬
‫مجلد‬ ‫على‬ ‫األيمن‬values‫ثم‬ ‫ومن‬new>file>colors.xml .‫ملفات‬ ‫تسمية‬
‫ا‬ ‫االكس‬‫يجب‬ ‫ال‬ ‫م‬‫أن‬‫صغيرة‬ ‫حروف‬ ‫باستخدام‬ ‫تتم‬lower case‫أن‬ ‫وعليھا‬
‫الرموز‬ ‫من‬ ‫تخلو‬).
‫الملف‬ ‫محتوى‬:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="background">#FFFFFFFF</color>
</resources>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
146
‫فباستخدا‬ ،‫التطوير‬ ‫عملية‬ ‫في‬ ‫مھم‬ ‫دور‬ ‫له‬ ‫الملفات‬ ‫من‬ ‫النوع‬ ‫ھذا‬‫أسماء‬ ‫م‬
‫قيم‬ ‫تعديل‬ ‫مجرد‬ ‫بعد‬ ‫فيما‬ ‫يمكنك‬ ،‫البرمجي‬ ‫الكود‬ ‫في‬ ‫بداخله‬ ‫الموجودة‬ ‫المتغيرات‬
‫ككل‬ ‫البرنامج‬ ‫في‬ ‫الجديدة‬ ‫القيمة‬ ‫استخدام‬ ‫ليتم‬ ‫الملف‬ ‫ھذا‬ ‫في‬ ‫المتغيرات‬.‫وھذا‬
‫ملف‬ ‫على‬ ‫ينطبق‬ ‫األمر‬strings.xml‫متغيرات‬ ‫تعريف‬ ‫يتم‬ ‫وفيه‬ ‫المجلد‬ ‫نفس‬ ‫في‬
‫اإلشارة‬ ‫يتم‬ ‫نصية‬‫إليھا‬‫في‬ ‫باالسم‬،‫النصوص‬ ‫ھذه‬ ‫قيم‬ ‫تغيير‬ ‫يراد‬ ‫وعندما‬ ،‫الكود‬
‫نلجأ‬ ،‫البرمجي‬ ‫الكود‬ ‫في‬ ‫متغير‬ ‫كل‬ ‫عن‬ ‫البحث‬ ‫من‬ ‫فبدال‬‫إلى‬‫تحديدا‬ ‫الملف‬ ‫ھذا‬
،‫بداخله‬ ‫الموجودة‬ ‫القيم‬ ‫ونغير‬‫الطريقة‬ ‫ھذه‬ ‫أتبع‬ ‫ال‬ ‫لألسف‬ ‫ولكنني‬‫أقوم‬ ‫حيث‬
‫فمعذرة‬ ،‫الكود‬ ‫داخل‬ ‫النصوص‬ ‫بكتابة‬.
‫اآلن‬ ‫نعود‬‫إلى‬‫الـ‬ ‫ملف‬main.xml‫ونضيف‬ ،‫التالي‬:
<!-- ‫ونوع‬ ‫المستخدمة‬ ‫النسخة‬ ‫يعرف‬ ‫وھو‬ ‫متواجدا‬ ‫يكون‬ ‫أن‬ ‫يجب‬ ‫السطر‬ ‫ھذا‬
‫الترميز‬ -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
"dhttp://schemas.android.com/apk/res/androi"=xmlns:android
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/background">
<RelativeLayout
"http://schemas.android.com/apk/res/android"=xmlns:android
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!--‫مصدرھا‬ ‫وتحديد‬ ‫الصورة‬ ‫لتعريف‬ ‫يستخدم‬ -->
<ImageView
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
147
android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/andbooklogo"
android:adjustViewBounds="true"
android:layout_centerHorizontal="true"
>
</ImageView>
<!--‫الزر‬ ‫لتعريف‬ ‫يستخدم‬ -->
<Button android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ImageView01"
android:paddingLeft="20px"
android:paddingRight="20px"
android:layout_centerInParent="true"
android:layout_marginTop="20px"
/>
</RelativeLayout>
</LinearLayout>
‫في‬ ‫أننا‬ ‫نالحظ‬ImageView‫است‬ ‫نريد‬ ‫التي‬ ‫الصورة‬ ‫مصدر‬ ‫بإضافة‬ ‫قمنا‬‫خدامھا‬.
‫الصورة‬ ‫إلضافة‬‫إلى‬‫وسحبھا‬ ‫عليھا‬ ‫بالضغط‬ ‫نقوم‬ ،‫المشروع‬‫إلى‬‫مجلد‬
res/drawable-hdpi‫أو‬res/drawable‫الموجود‬ ‫بحسب‬)‫استخدام‬ ‫يمكنكم‬
‫الموقع‬ ‫على‬ ‫التطبيق‬ ‫ملفات‬ ‫في‬ ‫الموجودة‬ ‫تلك‬ ‫أو‬ ‫لديكم‬ ‫صورة‬).
‫عن‬ ‫ماذا‬ ‫ھو‬ ‫القادم‬ ‫السؤال‬LinearLayout‫و‬RelativeLayout‫للتعرف‬ ‫؟‬
‫علي‬‫الملحق‬ ‫لقراءة‬ ‫أدعوكم‬ ،‫ھا‬“‫أ‬”‫الكتاب‬ ‫ھذا‬ ‫من‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
148
‫بشرح‬ ‫أقم‬ ‫لم‬RelativeLayout‫ولكنه‬ ‫المبدأ‬ ‫في‬ ‫الباقية‬ ‫األوعية‬ ‫مع‬ ‫يتشابه‬ ‫كونه‬
‫العناصر‬ ‫ترتيب‬ ‫أن‬ ‫في‬ ‫عنھم‬ ‫يختلف‬)‫وغيرھا‬ ‫والصور‬ ‫األزرار‬(‫بنسبة‬ ‫يكون‬
‫بعضھا‬ ‫بين‬ ‫أماكنھا‬.‫الى‬ ‫محاذاته‬ ‫مع‬ ‫الصورة‬ ‫أسفل‬ ‫زر‬ ‫بوضع‬ ‫رغبت‬ ‫اذا‬ ‫بمعنى‬
‫ال‬‫أسفل‬ ‫سيقع‬ ‫بأنه‬ ‫الزر‬ ‫ستعرف‬ ‫حيث‬ ‫اإلمكانية‬ ‫ھذه‬ ‫سيعطيك‬ ‫الوعاء‬ ‫فھذا‬ ،‫يمين‬
‫محاذاته‬ ‫مع‬ ‫الصورة‬‫إلى‬‫اليمين‬.‫تفسير‬ ‫وھذا‬android:layout_below‫في‬
‫ھي‬ ‫المعطاة‬ ‫والقيمة‬ ،‫الزر‬ ‫تعريف‬‫رقم‬‫معرف‬‫الصورة‬.
‫زر‬ ‫على‬ ‫بالضغط‬ ‫استعراضھا‬ ‫ويمكننا‬ ،‫المرئية‬ ‫الواجھة‬ ‫عمل‬ ‫من‬ ‫انتھينا‬
Layout‫الشكل‬ ‫في‬ ‫كما‬:
‫المجموعة‬ ‫لملف‬ ‫نعود‬ ‫واآلن‬intro .‫التالي‬ ‫سيكون‬ ‫الكود‬) :‫على‬ ‫بالشرح‬ ‫سأقوم‬
‫الكود‬)
package android.prog.easily;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
149
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class intro extends Activity
{
//‫زر‬ ‫نوع‬ ‫من‬ ‫متغير‬ ‫تعريف‬
private Button getbest50;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//‫ملف‬ ‫نستخدم‬main‫المرئية‬ ‫الواجھة‬ ‫أجل‬ ‫من‬
setContentView(R.layout.main);
setUpViews();
}
private void setUpViews()
{
getbest50 = (Button)findViewById(R.id.search);
getbest50.setText("‫أفضل‬٥٠‫مطعم‬");
//‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫سيتم‬ ‫ماذا‬ ‫تعريف‬
getbest50.setOnClickListener(new
View.OnClickListener()
{
public void onClick(View v)
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
150
{
top50Handler();
}
});
}
protected void top50Handler()
{
}
}
‫التالي‬ ‫ھو‬ ‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫عمله‬ ‫علينا‬ ‫يتوجب‬ ‫ما‬:
‫أفضل‬ ‫وجلب‬ ‫باالنترنت‬ ‫االتصال‬٥٠‫و‬ ،‫الرياض‬ ‫مدينة‬ ‫في‬ ‫مطعما‬‫االنتقال‬ ‫ثم‬ ‫من‬
‫إلى‬‫وتقييماتھا‬ ‫المطاعم‬ ‫تعرض‬ ‫واجھة‬.
‫ملف‬ ‫ونترك‬ ‫قليال‬ ‫ھنا‬ ‫سنتوقف‬intro.java (‫على‬ ‫تشغيله‬ ‫بالمناسبة‬ ‫يمكنك‬ ‫والذي‬
‫شيئا‬ ‫يحصل‬ ‫ولن‬ ،‫الحالي‬ ‫شكله‬ ‫ورؤية‬ ‫المحاكي‬‫إذا‬‫الزر‬ ‫على‬ ‫ضغطنا‬(‫ونقوم‬
‫المجموعة‬ ‫بتعريف‬RatedItem.java‫التالي‬ ‫بالشكل‬:
package android.prog.easily;
import java.io.Serializable;
public class RatedItem implements Serializable
{
private static final long serialVersionUID =
5500258407135652423L;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
151
private String name;
private int id;
private int voteCount;
private double wScore;
public RatedItem(String name, int id, int voteCount,
double wScore)
{
this.name = name;
this.id = id;
this.voteCount = voteCount;
this.wScore = wScore;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getId()
{
return id;
}
public void setId(int id)
{
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
152
this.id = id;
}
public int getVoteCount()
{
return voteCount;
}
public void setVoteCount(int voteCount)
{
this.voteCount = voteCount;
}
public double getwScore()
{
return wScore;
}
public void setwScore(int wScore)
{
this.wScore = wScore;
}
}
‫ملف‬ ‫بإنشاء‬ ‫سنقوم‬ ‫واآلن‬RestDroidApplication.java‫قلنا‬ ‫كما‬ ‫والذي‬
‫واألنشطة‬ ‫الواجھات‬ ‫لجميع‬ ‫يمكن‬ ‫ومتغيرات‬ ‫دوال‬ ‫على‬ ‫سيحتوي‬Activities
‫استخدامھ‬‫ا‬)‫مرات‬ ‫عدة‬ ‫األنشطة‬ ‫كل‬ ‫في‬ ‫نفسھا‬ ‫الدوال‬ ‫لنسخ‬ ‫داعي‬ ‫ال‬ ‫أي‬).
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
153
‫يلي‬ ‫ما‬ ‫تحتوي‬ ‫المجموعة‬:
package android.prog.easily;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Application;
public class RestDroidApplication extends Application
{
API KeyQaym‫قيم‬ ‫موقع‬ ‫من‬ ‫عليه‬ ‫الحصول‬ ‫يتوجب‬//
private String key = "xxxxxxxxxxxxxxxxxxxx";
private int[] countryAndCityIds;
private JSONObject[] ratedRestaurants;
;globalAdapterData>RatedItemArrayList<private
;itemOnMapRatedItemprivate
private String branchesDetailsText;
public String getBranchesDetailsText()
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
154
{
return branchesDetailsText;
}
public void setBranchesDetailsText(String
branchesDetailsText)
{
this.branchesDetailsText = branchesDetailsText;
}
getItemOnMap()RatedItempublic
{
;itemOnMapreturn
}
itemOnMap)RatedItemsetItemOnMap(voidpublic
{
= itemOnMap;itemOnMap.this
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public void onTerminate()
{
super.onTerminate();
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
155
//‫طلب‬ ‫بعمل‬ ‫تقوم‬ ‫دالة‬HTTP‫المعطى‬ ‫الموقع‬ ‫معلومات‬ ‫من‬ ‫للحصول‬
‫بروتوكول‬ ‫عبر‬REST
public String queryRESTurl(String url)
{
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response;
try
{
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream instream = entity.getContent();
String result1 =
convertStreamToString(instream);
instream.close();
return result1;
}
}
catch (IOException e)
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
156
{
}
return null;
}
//‫المستلمة‬ ‫المعلومات‬ ‫بتحويل‬ ‫تقوم‬ ‫دالة‬‫إلى‬‫صيغة‬String‫يمكن‬
‫معھا‬ ‫التعامل‬
public String convertStreamToString(InputStream is)
throws IOException
{
if (is != null)
{
StringBuilder sb = new StringBuilder();
String line;
try
{
BufferedReader reader = new BufferedReader(new
while ((line = reader.readLine()) != null)
{
sb.append(line).append("n");
}
}
finally
{
is.close();
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
157
return sb.toString();
}
else
{
return "";
}
}
/*
‫الترميز‬ ‫تتبع‬ ‫قيم‬ ‫من‬ ‫المستلمة‬ ‫المعلومات‬JSON‫البرمجية‬ ‫المكتبة‬ ‫ولكن‬
‫مختلف‬ ‫بشكل‬ ‫الترميز‬ ‫مع‬ ‫تتعامل‬ ‫الترميز‬ ‫اسم‬ ‫نفس‬ ‫تحمل‬ ‫والتي‬ ‫بالجافا‬ ‫الموجودة‬
‫ا‬ ‫على‬ ‫التغييرات‬ ‫بعض‬ ‫لعمل‬ ‫اضطررت‬ ‫لذلك‬ ‫ما‬ ‫نوعا‬‫من‬ ‫ألتمكن‬ ‫المستلمة‬ ‫لقيم‬
‫عناصر‬ ‫من‬ ‫مصفوفة‬ ‫في‬ ‫وتعبئتھا‬ ‫استخالصھا‬JSON‫معھا‬ ‫التعامل‬ ‫يسھل‬ ‫التي‬
‫وقيمة‬ ‫مفتاح‬ ‫نمط‬ ‫على‬ ‫تعمل‬ ‫ألنھا‬Key/value ..‫البرمجي‬ ‫السياق‬ ‫تتبع‬ ‫يمكنكم‬
‫اتبعتھا‬ ‫التي‬ ‫الطريقة‬ ‫لمعرفة‬ ‫للكود‬)‫بسيطة‬ ‫وھي‬..(‫صفحة‬ ‫مراجعة‬ ‫يلزمكم‬ ‫كما‬
‫توثيق‬"‫قيم‬"‫ورؤية‬
‫ال‬‫فيھا‬ ‫يتم‬ ‫التي‬ ‫صيغة‬‫إرسال‬‫الجافا‬ ‫تقبلھا‬ ‫التي‬ ‫بالصيغة‬ ‫ومقارنتھا‬ ‫البيانات‬
‫الـ‬ ‫لعناصر‬JSON
*/
public JSONObject[] retrieveJSONs(String urlString)
{
String result = queryRESTurl(urlString);
JSONObject[] jarr = null;
if (result != null)
{
try
{
result = result.substring(1, result.length()-
1);
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
158
int counter = 0;
boolean firstSeen = false;
boolean secondSeen = false;
//‫حل‬‫نوع‬ ‫من‬ ‫قة‬for‫المستلمة‬ ‫العناصر‬ ‫عدد‬ ‫لمعرفة‬
‫عناصر‬ ‫عدد‬ ‫تحديد‬ ‫وبالتالي‬JSON‫المطلوبة‬
for (int i = 0; i < result.length(); i++)
{
if (result.charAt(i) == '{' && firstSeen ==
{
firstSeen = true;
counter++;
}
else if (result.charAt(i) == '{' && firstSeen
==true)
{
secondSeen = true;
}
if (result.charAt(i) == '}' && secondSeen
==true)
{
secondSeen = false;
}
else if (result.charAt(i) == '}' &&
secondSeen ==false)
{
firstSeen = false;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
159
}
}
jarr = new JSONObject [counter];
int ind1 = 0;
int ind2 = 0;
boolean firstSeenS = false;
boolean secondSeenS = false;
//‫عناصر‬ ‫إلنشاء‬ ‫حلقة‬JSON
for (int i = 0; i < result.length(); i++)
{
firstSeenS = false;
secondSeenS = false;
if (result.charAt(i) == '{' && firstSeenS
==false)
{
firstSeenS = true;
ind1 = i;
for (int j = i+1; j < result.length();
j++)
{
if (result.charAt(j) == '{' &&
{
secondSeenS = true;
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
160
if (result.charAt(j) == '}' &&
{
secondSeenS = false;
}
else if (result.charAt(j) == '}'
&&
secondSeenS == false)
{
String mid =
jarr[ind2] = new
ind2++;
i = j;
break;
}
}
}
}
}
catch (JSONException e)
{
}
}
return jarr;
}
//‫ال‬ ‫لطلب‬ ‫الكامل‬ ‫النص‬ ‫بعمل‬ ‫تقوم‬ ‫دالة‬API‫له‬ ‫المفتاح‬ ‫بإضافة‬ ‫وتقوم‬
public String getUrlStringCommand(String command)
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
161
{
;"http://api.qaym.com/0.1/"String service_url =
String url = "";
url = service_url + command + "/key=" + key;
return url;
}
public void setCountryAndCityIds(int[]
countryAndCityIds)
{
this.countryAndCityIds = countryAndCityIds;
}
public int[] getCountryAndCityIds()
{
return countryAndCityIds;
}
public JSONObject[] getRatedRestaurants()
{
return ratedRestaurants;
}
public void setRatedRestaurants(JSONObject[]
ratedRestaurants)
{
this.ratedRestaurants = ratedRestaurants;
}
> getGlobalAdapterData()RatedItemArrayList<public
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
162
{
;globalAdapterDatareturn
}
public void
>RatedItemist<setGlobalAdapterData(ArrayL
globalAdapter)
{
= globalAdapter;globalAdapterData.this
}
intgetGlobalAdapterDataItem(RatedItempublic
position)
{
.get(position);globalAdapterDatareturn
}
}
‫بالعودة‬‫لملف‬intro.java‫التالي‬ ‫الكود‬ ‫بإضافة‬ ‫نقوم‬ ،:
protected void top50Handler()
{
try
{
//‫ال‬ ‫نص‬ ‫عمل‬API‫أفضل‬ ‫بجلب‬ ‫الخاص‬٥٠‫مطعما‬
‫الرياض‬ ‫مدينة‬ ‫من‬"‫بھا‬ ‫الخاص‬ ‫الكود‬٥٧"
String attrcommand = "cities/" + "57" +
"/items/top";
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
163
//‫يسبقھا‬ ‫دالة‬ ‫استخدام‬ ‫بمجرد‬
accessApplicationMethods()‫نقوم‬ ‫أننا‬ ‫اعرفوا‬‫ملف‬ ‫من‬ ‫دالة‬ ‫باستخدام‬
RestDroidApplication.java
String attributesCommand =
accessApplicationMethods().getUrlStringCommand(attrcom
mand);
JSONObject[] topCities =
accessApplicationMethods().retrieveJSONs(attributesComma
nd);
//‫مصفوفة‬‫نوع‬ ‫من‬ ‫بعناصر‬ ‫بتعبئتھا‬ ‫سنقوم‬
ReatedItem‫بكائنات‬ ‫باالستعانة‬ ‫الخاصة‬ ‫بمعلوماته‬ ‫عنصر‬ ‫كل‬ ‫وتزويد‬‫عناصر‬
JSON‫السابق‬ ‫السطر‬ ‫في‬ ‫بتكوينھا‬ ‫قمنا‬ ‫التي‬
ArrayList<RatedItem> sRest = new
ArrayList<RatedItem>();
if (topCities != null)
{
for (int ff = 0; ff < topCities.length;
ff++)
{
//‫من‬ ‫قيمة‬ ‫على‬ ‫الحصول‬ ‫كيفية‬ ‫الحظوا‬
‫عنصر‬JSON‫مفتاح‬ ‫عبر‬"item_id"‫ذلك‬ ‫على‬ ‫وقس‬
int id =
Integer.parseInt(topCities[ff].getString("item_id"));
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
164
String name =
topCities[ff].getString("item_name");
int voteConutt =
Integer.parseInt(topCities[ff].getString("total_number_of_vot
es"));
double weScore =
Double.parseDouble(topCities[ff].getString("weighted_score
"));
//‫على‬ ‫لتكون‬ ‫الموزونة‬ ‫العالمة‬ ‫تعديل‬
‫مقياس‬٥‫من‬ ‫بدال‬١٠
double weScoreR = weScore *
100;
weScoreR =
Math.round(weScoreR);
weScoreR = weScoreR / 10 / 2;
RatedItem singleRest = new
RatedItem(name,id,
voteConutt, weScoreR);
sRest.add(singleRest);
}
}
else
{
RatedItem singleRest = new
RatedItem("Empty List",0, 0, 0);
sRest.add(singleRest);
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
165
accessApplicationMethods().setGlobalAdapterData(sRest);
goToBest50Act();// ***
}
catch (JSONException e)
{
}
}
//‫يستخد‬ ‫نشاط‬ ‫أي‬ ‫في‬ ‫تعريفھا‬ ‫يتم‬ ‫دالة‬‫المجموعة‬ ‫دوال‬ ‫م‬
RestDroidApplication.java‫بھا‬ ‫الموجودة‬ ‫الدوال‬ ‫دخول‬ ‫من‬ ‫بھا‬ ‫ونتمكن‬
protected RestDroidApplication
accessApplicationMethods()
{
return (RestDroidApplication)getApplication();
}
‫أفضل‬ ‫جلب‬ ‫من‬ ‫تمكننا‬ ‫السابقة‬ ‫اإلضافة‬٥٠‫مطعما‬.‫اال‬ ‫لدينا‬ ‫وبقي‬‫للواجھة‬ ‫نتقال‬
‫بـ‬ ‫له‬ ‫رمزت‬ ‫الذي‬ ‫السطر‬ ‫به‬ ‫يقوم‬ ‫ما‬ ‫وھذا‬ ،‫المطاعم‬ ‫تعرض‬ ‫التي‬:
// ***
‫الدالة‬ ‫يستدعي‬ ‫والذي‬goToBest50Act‫التالي‬ ‫بالشكل‬ ‫ونعرفھا‬:
protected void goToBest50Act()
{
);class.Best50,thisIntent(newIntent goToBest =
startActivity(goToBest);
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
166
‫ملف‬ ‫ليصبح‬intro.java‫التالي‬ ‫بالشكل‬:
package android.prog.easily;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class intro extends Activity
{
//‫زر‬ ‫نوع‬ ‫من‬ ‫متغير‬ ‫تعريف‬
private Button getbest50;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//‫ملف‬ ‫نستخدم‬main‫المرئية‬ ‫الواجھة‬ ‫أجل‬ ‫من‬
setContentView(R.layout.main);
setUpViews();
}
private void setUpViews()
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
167
{
getbest50 = (Button)findViewById(R.id.search);
setText("
//‫س‬ ‫ماذا‬ ‫تعريف‬‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫يتم‬
getbest50.setOnClickListener(new
View.OnClickListener()
{
public void onClick(View v)
{
top50Handler();
}
});
}
protected void goToBest50Act()
{
);class.Best50,thisIntent(newIntent goToBest =
startActivity(goToBest);
}
protected void top50Handler()
{
try
{
//‫ال‬ ‫نص‬ ‫عمل‬API‫أفضل‬ ‫بجلب‬ ‫الخاص‬٥٠‫مطعما‬
‫الرياض‬ ‫مدينة‬ ‫من‬"‫بھا‬ ‫الخاص‬ ‫الكود‬٥٧"
String attrcommand = "cities/" + "57" +
"/items/top";
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
168
//‫يسبقھا‬ ‫دالة‬ ‫استخدام‬ ‫بمجرد‬
accessApplicationMethods()‫ملف‬ ‫من‬ ‫دالة‬ ‫باستخدام‬ ‫نقوم‬ ‫أننا‬ ‫اعرفوا‬
RestDroidApplication.java
String attributesCommand =
accessApplicationMethods().getUrlStringCommand(attrcom
mand);
JSONObject[] topCities =
accessApplicationMethods().retrieveJSONs(attributesComma
nd);
//‫نوع‬ ‫من‬ ‫بعناصر‬ ‫بتعبئتھا‬ ‫سنقوم‬ ‫مصفوفة‬
ReatedItem‫بكائنات‬ ‫باالستعانة‬ ‫الخاصة‬ ‫بمعلوماته‬ ‫عنصر‬ ‫كل‬ ‫وتزويد‬‫عناصر‬
JSON‫السابق‬ ‫السطر‬ ‫في‬ ‫بتكوينھا‬ ‫قمنا‬ ‫التي‬
ArrayList<RatedItem> sRest = new
ArrayList<RatedItem>();
if (topCities != null)
{
for (int ff = 0; ff < topCities.length;
ff++)
{
//‫من‬ ‫قيمة‬ ‫على‬ ‫الحصول‬ ‫كيفية‬ ‫الحظوا‬
‫عنصر‬JSON‫مفتاح‬ ‫عبر‬"item_id"‫ذلك‬ ‫على‬ ‫وقس‬
int id =
Integer.parseInt(topCities[ff].getString("item_id"));
String name =
topCities[ff].getString("item_name");
int voteConutt =
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
169
Integer.parseInt(topCities[ff].getString("total_number_of_vot
es"));
double weScore =
Double.parseDouble(topCities[ff].getString("weighted_score
"));
//‫على‬ ‫لتكون‬ ‫الموزونة‬ ‫العالمة‬ ‫تعديل‬
‫مقياس‬٥‫بدال‬‫من‬١٠
double weScoreR = weScore *
100;
weScoreR =
Math.round(weScoreR);
weScoreR = weScoreR / 10 / 2;
RatedItem singleRest = new
RatedItem(name,id,
voteConutt, weScoreR);
sRest.add(singleRest);
}
}
else
{
RatedItem singleRest = new
RatedItem("Empty List",0, 0, 0);
sRest.add(singleRest);
}
//‫المطاعم‬ ‫قائمة‬ ‫بتمرير‬ ‫نقوم‬ ‫أننا‬ ‫الحظوا‬‫إلى‬‫متغير‬
‫في‬ ‫موجود‬RestDroidApplication.java‫وقراءة‬ ‫معه‬ ‫التعامل‬ ‫من‬ ‫لنتمكن‬
‫وأنشطة‬ ‫مجموعات‬ ‫في‬ ‫محتواه‬Activities‫أخرى‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
170
accessApplicationMethods().setGlobalAdapterData(sRest);
goToBest50Act();
}
catch (JSONException e)
{
}
}
//‫المجموعة‬ ‫دوال‬ ‫يستخدم‬ ‫نشاط‬ ‫أي‬ ‫في‬ ‫تعريفھا‬ ‫يتم‬ ‫دالة‬
RestDroidApplication.java‫والمتغيرات‬ ‫الدوال‬ ‫دخول‬ ‫من‬ ‫لنتمكن‬
‫الموج‬‫األعلى‬ ‫في‬ ‫ھو‬ ‫كما‬ ‫بھا‬ ‫ودة‬
protected RestDroidApplication
accessApplicationMethods()
{
return (RestDroidApplication)getApplication();
}
}
‫نالحظ‬‫البيانات‬ ‫بعض‬ ‫بتمرير‬ ‫قمنا‬ ‫أننا‬ ‫األعلى‬ ‫في‬ ‫الكود‬ ‫من‬‫إلى‬‫موجودة‬ ‫متغيرات‬
‫مجموعة‬ ‫في‬
RestDroidApplications
‫والس‬‫ھذه‬ ‫دخول‬ ‫من‬ ‫األخرى‬ ‫واألنشطة‬ ‫المجموعات‬ ‫لتمكين‬ ‫ھو‬ ‫قلنا‬ ‫كما‬ ‫بب‬
‫المتغيرات‬.‫أستخدمھا‬ ‫أنني‬ ‫على‬ ‫الشرح‬ ‫ھذا‬ ‫في‬ ‫بھا‬ ‫أقوم‬ ‫ال‬ ‫أخرى‬ ‫طريقة‬ ‫ھناك‬
‫ويمكن‬ ‫أساسي‬ ‫بشكل‬ ‫حاليا‬‫للقارئ‬‫إتباعھا‬‫إذا‬‫من‬ ‫كائن‬ ‫إنشاء‬ ‫وھي‬ ‫أفضل‬ ‫وجدھا‬
‫مجموعة‬Intent (‫فعل‬ ‫بـ‬ ‫خاصة‬ ‫مجموعة‬ ‫بأنھا‬ ‫تعرف‬ ‫والتي‬action‫عمله‬ ‫نود‬(
‫الحالي‬ ‫النشاط‬ ‫من‬ ‫معينة‬ ‫بيانات‬ ‫بتمرير‬ ‫يقوم‬ ‫بحيث‬ ‫وبرمجته‬‫إلى‬‫آخر‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
171
‫لم‬ ‫كوننا‬ ‫خطأ‬ ‫رسالة‬ ‫لنا‬ ‫ستظھر‬ ‫بالطبع‬‫ننشئ‬‫سننتقل‬ ‫التي‬ ‫المجموعة‬ ‫ملف‬‫إليھا‬
‫سنسميھا‬ ‫والتي‬Best50.java.‫المجموعة‬ ‫إنشاء‬ ‫علينا‬ ‫يتوجب‬ ،‫إنشائھا‬ ‫قبل‬ ‫ولكن‬
‫وھي‬ ‫لھا‬ ‫المساعدة‬:
RatedRestaurantListItem.java
‫بھا‬ ‫ويقترن‬rest_list_item.xml‫تقوم‬ ‫المجموعة‬ ‫ھذه‬ ‫فإن‬ ‫قبل‬ ‫من‬ ‫ذكرنا‬ ‫وكما‬
‫عنصر‬ ‫بكل‬ ‫الخاصة‬ ‫الواجھة‬ ‫بتشكيل‬)‫مطعم‬(-‫الشكل‬١-‫مرتبطة‬ ‫أنھا‬ ‫وبما‬
‫قالب‬ ‫بوراثة‬ ‫المجموعة‬ ‫ھذه‬ ‫فستقوم‬ ،‫بالواجھات‬ ‫ومتعلقة‬‫مجموعة‬
RelativeLayout‫نريده‬ ‫الذي‬ ‫بالشكل‬ ‫عليه‬ ‫للتعديل‬.‫ھذ‬‫نقوم‬ ‫لن‬ ‫أننا‬ ‫يعني‬ ‫األمر‬ ‫ا‬
‫وسم‬ ‫بوضع‬RelativeLayout‫الـ‬ ‫ملف‬ ‫في‬xml‫مجموعتنا‬ ‫اسم‬ ‫وإنما‬ ،‫المقترن‬
‫الجديدة‬-‫قليل‬ ‫بعد‬ ‫ذلك‬ ‫سأوضح‬-.
‫ننشئ‬‫مجموعة‬RatedRestaurantListItem.java‫محتواھا‬ ‫ويكون‬:
package android.prog.easily;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
public class RatedRestaurantListItem extends RelativeLayout
{
public RatedRestaurantListItem(Context context,
AttributeSet attr)
{
super(context, attr);
}
}
‫بإنشاء‬ ‫ونقوم‬ ‫قليال‬ ‫ندعھا‬ ‫واآلن‬‫الـ‬ ‫ملف‬rest_list_item.xml‫المجلد‬ ‫داخل‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
172
res>layout (‫أنشئ‬‫مجلد‬ ‫على‬ ‫بالضغط‬ ‫جديد‬ ‫ملف‬layout‫ثم‬ ‫ومن‬ ‫باليمين‬
new>file).‫يلي‬ ‫ما‬ ‫ھو‬ ‫الملف‬ ‫بھذا‬ ‫الخاص‬ ‫المحتوى‬)‫والحظ‬)‫ـي‬(‫القالب‬ ‫وسم‬):
<?xml version="1.0" encoding="utf-8"?>
<android.prog.easily.RatedRestaurantListItem
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- ‫يمك‬ ‫عنصر‬‫المقابل‬ ‫في‬ ‫شيء‬ ‫وعمل‬ ‫الواجھة‬ ‫على‬ ‫الضغط‬ ‫من‬ ‫المستخدم‬ ‫ن‬ --
>
<CheckedTextView
android:layout_width="wrap_content"
android:id="@+id/ctext"
android:layout_height="wrap_content"
android:textSize="30sp"
>
</CheckedTextView>
<!-- ‫واستخدمنا‬ ،‫عليه‬ ‫التقييم‬ ‫لعرض‬ ‫عنصر‬‫األندرويد‬ ‫في‬ ‫مسبقا‬ ‫معرف‬ ‫ستايل‬
‫لتكون‬ ‫وحددناھا‬ ‫النجوم‬ ‫من‬ ‫سطر‬ ‫وھو‬٥‫نجوم‬ -->
<RatingBar
android:id="@+id/rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ctext"
android:numStars="5"
style="?android:attr/ratingBarStyleIndicator"
/>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
173
<!--‫المطعم‬ ‫عليھا‬ ‫حصل‬ ‫التي‬ ‫العالمات‬ ‫لعرض‬ ‫نصية‬ ‫واجھات‬ -->
<TextView
android:id="@+id/ratedlabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ctext"
android:textSize="20sp"
android:layout_toRightOf="@id/rate"
android:paddingLeft="30px"
/>
<TextView
android:id="@+id/scorelabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/rate"
android:textSize="20sp"
android:paddingTop="10px"
android:paddingRight="10px"
/>
</android.prog.easily.RatedRestaurantListItem>
‫لملف‬ ‫نعود‬ ‫واآلن‬RatedRestaurantListItem.java‫باستخدام‬ ‫ونقوم‬
‫عرضه‬ ‫نريدھا‬ ‫التي‬ ‫بالقيم‬ ‫ونربطھا‬ ‫لحظات‬ ‫منذ‬ ‫عرفناھا‬ ‫التي‬ ‫الواجھة‬ ‫عناصر‬
)‫المطعم‬ ‫معلومات‬ ‫وھي‬.(‫الك‬‫يصبح‬ ‫ود‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
174
package android.prog.easily;
import android.prog.easily.R;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.CheckedTextView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class RatedRestaurantListItem extends RelativeLayout
{
private CheckedTextView ratedButton;
private RatedItem ratedItem1;
private TextView texty;
private TextView texty2;
public RatedRestaurantListItem(Context context,
AttributeSet attr)
{
super(context, attr);
}
//‫ال‬ ‫ملف‬ ‫في‬ ‫عرفناھا‬ ‫التي‬ ‫العناصر‬ ‫قراءة‬ ‫بعد‬ ‫تلقائيا‬ ‫استدعاؤھا‬ ‫يتم‬ ‫دالة‬
xml‫العناصر‬ ‫ھذه‬ ‫مع‬ ‫التعامل‬ ‫يمكننا‬ ‫وعندھا‬
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
ratedButton =
(CheckedTextView)findViewById(R.id.ctext);
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
175
texty =
(TextView)findViewById(R.id.ratedlabel);
texty2 =
(TextView)findViewById(R.id.scorelabel);
}
//‫داخل‬ ‫لھا‬ ‫تمريره‬ ‫تم‬ ‫الذي‬ ‫العنصر‬ ‫وقيم‬ ‫معلومات‬ ‫بتعيين‬ ‫تقوم‬ ‫دالة‬
‫الواجھة‬ ‫عناصر‬
public void setRatedItem(RatedItem ratedItem1)
{
this.ratedItem1 = ratedItem1;
ratedButton.setText(ratedItem1.getName());
texty.setText("‫األصوات‬ ‫عدد‬:
"+ratedItem1.getVoteCount());
texty2.setText("‫العالمة‬: "+ratedItem1.getwScore()
+ "/5");
}
public RatedItem getRatedItem()
{
return ratedItem1;
}
}
‫لـ‬ ‫بالنسبة‬Best50.java،‫تعودنا‬ ‫وكما‬ ،‫سننشئ‬‫وھي‬ ‫أوال‬ ‫بھا‬ ‫الخاصة‬ ‫الواجھة‬:
rated_rest_list.xml
‫التالي‬ ‫بالشكل‬ ‫وستكون‬:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
176
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/RRselect"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@id/android:list"
android:layout_below="@id/RRselect"/>
</RelativeLayout>
‫المجموعة‬ ‫دور‬ ‫جاء‬ ‫اآلن‬Best50.java.‫بيانا‬ ‫بعرض‬ ‫ستقوم‬ ‫المجموعة‬ ‫ھذه‬‫ت‬
‫أفضل‬٥٠‫الرياض‬ ‫في‬ ‫مطعما‬.‫األفضل‬ ‫فمن‬ ،‫قائمة‬ ‫شكل‬ ‫على‬ ‫ستكون‬ ‫أنھا‬ ‫وبما‬
‫جزئية‬ ‫مجموعة‬ ‫استخدام‬‫مجموعة‬ ‫من‬ ‫خاصة‬Activity‫في‬ ‫استخدمناھا‬ ‫التي‬
intro.java.‫ھذه‬‫المجموعة‬‫ھي‬ListActivity‫القائمة‬ ‫أن‬ ‫يميزھا‬ ‫ما‬ ‫وأھم‬
List‫لد‬ ‫المعروفة‬ ‫المفاھيم‬ ‫أحد‬ ‫استخدام‬ ‫تتطلب‬ ‫تتبناھا‬ ‫التي‬‫البرمجيات‬ ‫مھندسي‬ ‫ى‬
‫الوسيط‬ ‫مفھوم‬ ‫وھو‬Adapter‫التصميم‬ ‫أنماط‬ ‫أنواع‬ ‫أحد‬Design Patterns .
‫البيانات‬ ‫مع‬ ‫التعامل‬ ‫ھو‬ ‫الوسيط‬ ‫مھمة‬)‫المطاعم‬(،‫بھا‬ ‫الخاصة‬ ‫الواجھات‬ ‫وإنشاء‬
‫المعلومات‬ ‫ھذه‬ ‫ستحتضن‬ ‫التي‬ ‫الرئيسية‬ ‫الواجھة‬ ‫لقائمة‬ ‫تمريرھا‬ ‫ثم‬ ‫ومن‬)‫أي‬
‫بمجموعة‬ ‫المقترنة‬ ‫الواجھة‬Best50).‫مجموعة‬ ‫تداخل‬ ‫تقليل‬ ‫ھو‬ ‫األھداف‬ ‫أحد‬
Best50‫إضافة‬ ‫أو‬ ‫البيانات‬ ‫تغيير‬ ‫أردنا‬ ‫فلو‬ ،‫نفسھا‬ ‫البيانات‬ ‫مع‬ ‫وواجھتھا‬
‫نضطر‬ ‫ولن‬ ،‫فقط‬ ‫الوسيط‬ ‫على‬ ‫بالتعديل‬ ‫حينھا‬ ‫سنقوم‬ ،‫عليھا‬ ‫جديدة‬ ‫خصائص‬‫إلى‬
‫مجموعة‬ ‫كود‬ ‫تغيير‬Best50.java.‫تستخدمھا‬ ‫البيانات‬ ‫ھذه‬ ‫أن‬ ‫لو‬ ‫تخيل‬١٠
‫وبش‬ ،‫مجموعات‬‫على‬ ‫التعديل‬ ‫األسھل‬ ‫من‬ ‫حينھا‬ ‫سيكون‬ ‫ھل‬ ،‫مختلفة‬ ‫وطلبات‬ ‫كل‬
‫فقط‬ ‫الوسيط‬)‫كلھا‬ ‫العشر‬ ‫المجموعات‬ ‫معه‬ ‫تتخاطب‬ ‫والذي‬(‫المجموعات‬ ‫تعديل‬ ‫أم‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
177
‫الوسيط‬ ‫استخدام‬ ‫عدم‬ ‫حال‬ ‫في‬ ‫كلھا‬!
‫داخلية‬ ‫مجموعة‬ ‫شكل‬ ‫على‬ ‫سيكون‬ ‫بالوسيط‬ ‫الخاص‬ ‫الكود‬inner class‫ولكن‬
‫منفصلة‬ ‫مجموعة‬ ‫في‬ ‫عمله‬ ‫يمكنكم‬.
‫كو‬‫التالي‬ ‫الشكل‬ ‫على‬ ‫المجموعة‬ ‫ھذه‬ ‫د‬:
package android.prog.easily;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
public class Best50 extends ListActivity
{
private TextView selectAttr;
private RatedRestaurantListAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
178
super.onCreate(savedInstanceState);
setContentView(R.layout.rated_rest_list);
setUpViews();
}
//‫ال‬ ‫بالفعل‬ ‫تقوم‬ ‫دالة‬‫المعروضة‬ ‫القيم‬ ‫أحد‬ ‫على‬ ‫الضغط‬ ‫تم‬ ‫حال‬ ‫في‬ ‫مناسب‬
‫الشاشة‬ ‫على‬
@Override
protected void onListItemClick(ListView l, View v, int
position, long id)
{
super.onListItemClick(l, v, position, id);
RatedItem ite =
accessApplicationMethods().getGlobalAdapterDataItem(posi
tion);
accessApplicationMethods().setItemOnMap(ite);
goToViewOnMapActivity();
}
private void goToViewOnMapActivity()
{
,thisIntent(newIntent goToMapActivity =
startActivity(goToMapActivity);
}
private void setUpViews()
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
179
{
selectAttr =
(TextView)findViewById(R.id.RRselect);
selectAttr.setText("‫المطاعم‬ ‫أحد‬ ‫على‬ ‫اضغط‬");
//‫إنشاء‬‫القائمة‬ ‫مع‬ ‫اتصال‬ ‫على‬ ‫ليكون‬ ‫واستخدامه‬ ‫جديد‬ ‫وسيط‬
‫النشاط‬ ‫ھذا‬ ‫أنشأھا‬ ‫التي‬
adapter = new RatedRestaurantListAdapter
setListAdapter(adapter);
}
//‫داخلية‬ ‫مجموعة‬InnerClass‫الوسيط‬ ‫تعرف‬Adapter‫الذي‬
‫منھا‬ ‫واحد‬ ‫بكل‬ ‫خاصة‬ ‫واجھة‬ ‫بإنشاء‬ ‫ويقوم‬ ‫المطاعم‬ ‫بيانات‬ ‫مع‬ ‫سيتعامل‬.
//‫مخصصة‬ ‫بمجموعة‬ ‫سنستعين‬‫وھذه‬ ‫قوائم‬ ‫مع‬ ‫يتعامل‬ ‫وسيط‬ ‫لعمل‬
‫ھي‬ ‫المجموعة‬ArrayAdapter
class RatedRestaurantListAdapter extends
ArrayAdapter<RatedItem>
{
Activity context;
private ArrayList<RatedItem> myRatedItems;
RatedRestaurantListAdapter(Activity context,
{
super(context, R.layout.rest_list_item,
items);
this.context=context;
this.myRatedItems = items;
}
//‫عنصر‬ ‫كل‬ ‫بعرض‬ ‫الخاصة‬ ‫الواجھة‬ ‫بإنشاء‬ ‫تقوم‬ ‫دالة‬-‫الشكل‬ ‫في‬ ‫كما‬
١-
public View getView(int position, View
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
180
convertView, ViewGroupparent)
{
RatedRestaurantListItem row =
(RatedRestaurantListItem)convertView;
if (null == row)
{
//‫المجموعة‬ ‫ھذه‬ ‫مھمة‬LayoutInflator‫حيث‬ ،‫وسرعته‬ ‫التطبيق‬ ‫بأداء‬ ‫تتعلق‬
‫البيانات‬ ‫من‬ ‫جزء‬ ‫تقتطع‬ ‫أنھا‬‫وتنشئ‬‫واجھاتھا‬
//‫مسا‬ ‫مع‬ ‫يتناسب‬ ‫بشكل‬‫أي‬ ،‫الشاشة‬ ‫عرض‬ ‫حة‬
‫بشكل‬ ‫بعملھا‬ ‫تقوم‬ ‫وإنما‬ ‫البيانات‬ ‫لكل‬ ‫واجھة‬ ‫بعمل‬ ‫الجھاز‬ ‫ذاكرة‬ ‫تمأل‬ ‫ال‬ ‫أنھا‬
‫تفاعلي‬
//‫بتمرير‬ ‫المستخدم‬ ‫قام‬ ‫كلما‬ ‫أي‬‫إصبعه‬‫ألسفل‬
‫يتم‬ ،‫البيانات‬ ‫من‬ ‫المزيد‬ ‫لرؤية‬‫إنشاء‬‫الواجھات‬
LayoutInflater
inflater=context.getLayoutInflater();
row =
(RatedRestaurantListItem)inflater.inflate(R.layout.rest_list_it
em, null);
}
row.setRatedItem(myRatedItems.get(position));
RatingBar rateBar =
(RatingBar)row.findViewById(R.id.rate);
rateBar.setStepSize((float) 0.1);
rateBar.setRating((float)myRatedItems.get(position).getwSco
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
181
re());
return row;
}
public RatedItem getItem(int position)
{
return myRatedItems.get(position);
}
public void reload()
{
//‫بأن‬ ‫الوسيط‬ ‫تحتضن‬ ‫التي‬ ‫القائمة‬ ‫إلعالم‬ ‫مھمة‬ ‫دالة‬
‫ال‬ ‫بعض‬‫عليھا‬ ‫ويتوجب‬ ‫تغيرت‬ ‫معلومات‬‫إذا‬‫نفسھا‬ ‫تحديث‬
notifyDataSetChanged();
}
}
protected RestDroidApplication
accessApplicationMethods()
{
return (RestDroidApplication)getApplication();
}
}
‫إذا‬‫فإن‬ ،‫واضح‬ ‫ھو‬ ‫كما‬OnListItemClick‫ال‬ ‫مھمتھا‬ ‫دالة‬ ‫ھي‬‫معين‬ ‫بعمل‬ ‫قيام‬
‫القائمة‬ ‫في‬ ‫عنصر‬ ‫أي‬ ‫على‬ ‫الضغط‬ ‫عند‬.‫أوال‬ ‫ھو‬ ‫به‬ ‫القيام‬ ‫منھا‬ ‫نريد‬ ‫الذي‬ ‫العمل‬
‫عليه‬ ‫الضغط‬ ‫تم‬ ‫الذي‬ ‫المطعم‬ ‫معلومات‬ ‫جلب‬)‫عنصر‬ ‫رقم‬ ‫معرفة‬ ‫عبر‬ ‫ذلك‬ ‫يتم‬
‫عليه‬ ‫الضغط‬ ‫تم‬ ‫الذي‬ ‫القائمة‬position‫وھو‬‫يكافئ‬‫موجود‬ ‫ھو‬ ‫كما‬ ‫المطعم‬ ‫رقم‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
182
‫المط‬ ‫بيانات‬ ‫يحمل‬ ‫الذي‬ ‫المتغير‬ ‫في‬‫اعم‬.‫ونضعه‬ ‫المختار‬ ‫المطعم‬ ‫بجلب‬ ‫نقوم‬ ‫لذلك‬
‫الخريطة‬ ‫لتستخدمه‬ ‫آخر‬ ‫متغير‬ ‫في‬(‫االنتقال‬ ‫وثانيا‬‫إلى‬‫تحوي‬ ‫أخرى‬ ‫واجھة‬
‫عليھا‬ ‫المطعم‬ ‫ومكان‬ ‫الخريطة‬.
‫مجموعة‬ ‫دور‬ ‫جاء‬ViewOnMapActivity.java‫فروع‬ ‫بعرض‬ ‫تقوم‬ ‫والتي‬
‫الخريطة‬ ‫على‬ ‫المختار‬ ‫المطعم‬.‫سننشئ‬‫الـ‬ ‫ملف‬ ‫بداية‬xml (‫الواجھ‬‫المرئية‬ ‫ة‬(
‫وھو‬ ‫بھا‬ ‫المقترن‬: view_map.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/restaurantNameMap"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
/>
<com.google.android.maps.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/restaurantNameMap"
android:clickable="true"
android:apiKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
183
xx" />
</RelativeLayout>
‫وجود‬ ‫تالحظون‬android:apikey‫رقم‬ ‫وھو‬‫يجب‬‫عن‬ ‫عليه‬ ‫الحصول‬ ‫عليكم‬
‫غوغل‬ ‫موقع‬ ‫طريق‬.‫بھا‬ ‫يتم‬ ‫التي‬ ‫االلكترونية‬ ‫الوثيقة‬ ‫باستخدام‬ ‫الرقم‬ ‫توليد‬ ‫يتم‬
‫التطبيقات‬ ‫توقيع‬)‫بشكل‬ ‫تأتي‬ ‫الكترونية‬ ‫بوثيقة‬ ‫توقيعھا‬ ‫يتم‬ ‫أندرويد‬ ‫تطبيقات‬
‫الـ‬ ‫مع‬ ‫افتراضي‬SDK-‫الوث‬ ‫وھذه‬‫التجربة‬ ‫لدواعي‬ ‫ھي‬ ‫يقة‬debugging
‫عليكم‬ ‫ويتوجب‬‫إنشاء‬‫على‬ ‫التطبيق‬ ‫بنشر‬ ‫رغبتم‬ ‫حال‬ ‫في‬ ‫بكم‬ ‫خاصة‬ ‫جديدة‬ ‫وثيقة‬
‫الماركت‬.(‫األمر‬ ‫عبر‬ ‫االلكترونية‬ ‫الوثيقة‬ ‫بصمة‬ ‫باستخراج‬ ‫نقوم‬)‫الوحدة‬ ‫في‬
‫الطرفية‬cmd‫أو‬trminal shell):
$ keytool -list -alias androiddebugkey 
-keystore xxx 
-storepass android -keypass android
‫الـ‬ ‫نستبدل‬xxx‫التشغيل‬ ‫نظام‬ ‫بحسب‬ ‫يلي‬ ‫ما‬ ‫بأحد‬:
Windows Vista: C:Users<user>.androiddebug.keystore
Windows XP: C:Documents and
Settings<user>.androiddebug.keystore
OS X and Linux: ~/.android/debug.keystore
‫يلي‬ ‫بما‬ ‫شبيھة‬ ‫ستكون‬ ‫النتيجة‬:
Certificate fingerprint (MD5):
94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98
‫والتوجه‬ ‫الرقم‬ ‫ھذا‬ ‫بنسخ‬ ‫نقوم‬‫إلى‬‫الموقع‬:
signup.html-api-http://code.google.com/android/maps
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
184
‫المطلوبة‬ ‫الخطوات‬ ‫وإكمال‬.‫الـ‬ ‫برقم‬ ‫تزويدنا‬ ‫سيتم‬ ‫وعندھا‬API‫نقوم‬ ‫الذي‬
‫الـ‬ ‫من‬ ‫بدال‬ ‫األعلى‬ ‫في‬ ‫بوضعه‬xxxxxxxxxx.
‫الصفحة‬ ‫ھذه‬ ‫زوروا‬ ،‫المعلومات‬ ‫من‬ ‫لمزيد‬:
-ons/google-com/android/addhttp://code.google.
apis/mapkey.html
‫ملف‬ ‫محتوى‬ ‫كتابة‬ ‫قبل‬ ‫واآلن‬ViewOnMapActivity.java‫بكتابة‬ ‫سنقوم‬ ،
‫المساعدة‬ ‫المجموعة‬ ‫كود‬: AddressOverlay.java:
package android.prog.easily;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Address;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;
public class AddressOverlay extends Overlay
{
private static final int CONTAINER_RADIUS
private static final int
CONTAINER_SHADOW_OFFSET= 1;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
185
private Address address;
private GeoPoint geopoint;
Bitmap bb;
public AddressOverlay(Address address)
{
super();
assert(null != address);
//‫تمريره‬ ‫يتم‬ ‫الذي‬ ‫العنوان‬ ‫معلومات‬ ‫استخالص‬
this.setAddress(address);
Double convertedLongitude =
address.getLongitude() * 1E6;
Double convertedLatitude = address.getLatitude()
* 1E6;
setGeopoint(new GeoPoint(
convertedLatitude.intValue(),
convertedLongitude.intValue()));
}
//‫المحدد‬ ‫العنوان‬ ‫عند‬ ‫الخريطة‬ ‫فوق‬ ‫خضراء‬ ‫نقطة‬ ‫برسم‬ ‫تقوم‬ ‫دالة‬
@Override
public void draw(Canvas canvas, MapView mapView,
boolean shadow)
{
super.draw(canvas, mapView, shadow);
Point locationPoint = new Point();
Projection projection = mapView.getProjection();
projection.toPixels(getGeopoint(), locationPoint);
Paint containerPaint = new Paint();
containerPaint.setAntiAlias(true);
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
186
int containerX = locationPoint.x;
int containerY = locationPoint.y;
if (shadow)
{
containerX +=
CONTAINER_SHADOW_OFFSET;
containerY +=
CONTAINER_SHADOW_OFFSET;
containerPaint.setARGB(90, 0, 0, 0);
canvas.drawCircle(containerX, containerY,
CONTAINER_RADIUS, containerPaint);
}
else
{
containerPaint.setColor(Color.GREEN);
canvas.drawCircle(containerX, containerY,
CONTAINER_RADIUS, containerPaint);
}
}
public void setAddress(Address address)
{
this.address = address;
}
public Address getAddress()
{
return address;
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
187
public void setGeopoint(GeoPoint geopoint)
{
this.geopoint = geopoint;
}
public GeoPoint getGeopoint()
{
return geopoint;
}
}
‫كود‬ ‫بكتابة‬ ‫سنقوم‬ ،‫وأخيرا‬ ‫واآلن‬‫األخيرة‬ ‫المجموعة‬
ViewOnMapActivity.java:
package android.prog.easily;
import java.io.IOException;
import java.util.List;
import org.json.JSONException;
import org.json.JSONObject;
import android.graphics.Bitmap;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.TextView;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
188
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
public class ViewOnMapActivity extends MapActivity
{
public static final String ADDRESS_RESULT =
"address";
private MapView mapView;
private Address address;
private TextView restName;
private JSONObject[] restaurantsLocObjects;
private String[] restaurantsBranchesNames;
private double [][] longLat;
private int maxLat = 0;
private int minLat = 0;
private int maxLon = 0;
private int minLon = 0;
Bitmap bmp;
@Override
protected void onCreate(Bundle bundle)
{
super.onCreate(bundle);
setContentView(R.layout.view_map);
setUpViews();
bringRestLocations();
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
189
mapCurrentAddress();
}
//‫وفروعه‬ ‫المختار‬ ‫المطعم‬ ‫موقع‬ ‫لجلب‬ ‫دالة‬
private void bringRestLocations()
{
try
{
//‫رقم‬ ‫جلب‬‫معرف‬ID‫في‬ ‫اختياره‬ ‫تم‬ ‫الذي‬ ‫المطعم‬
‫السابقة‬ ‫المجموعة‬Best50.java‫مجموعة‬ ‫في‬ ‫متغير‬ ‫في‬ ‫تخزينه‬ ‫وتم‬
RestDroidApplication
int restNum =
accessApplicationMethods().getItemOnMap().getId();
//‫الـ‬ ‫أمر‬ ‫نص‬ ‫تشكيل‬API‫الذي‬ ‫المطعم‬ ‫رقم‬ ‫متضمنا‬
‫معلوماته‬ ‫نريد‬
String command = "items/" + restNum +
"/locations";
String restaurantsCommand =
accessApplicationMethods().getUrlStringCommand(comman
d);
restaurantsLocObjects =
accessApplicationMethods().retrieveJSONs(restaurantsCom
mand);
restaurantsBranchesNames = new
String[restaurantsLocObjects.length];
longLat = new double[restaurantsLocObjects.length][2];
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
190
for (int i = 0; i <
restaurantsBranchesNames.length; i++)
{
restaurantsBranchesNames[i] = (i+1)
+ "n" +" :‫البلد‬" +
restaurantsLocObjects[i].getString("country") + "n"
+ "‫المدينة‬: "
+
restaurantsLocObjects[i].getString("city") + "n"
+ "‫الفرع‬ ‫رقم‬: "
+
restaurantsLocObjects[i].getString("location_id") + "n"
+ "‫العنوان‬: "
+
restaurantsLocObjects[i].getString("address") + "n"
+ "‫التلفون‬ ‫رقم‬: "
+
restaurantsLocObjects[i].getString("phone") + "n"
+ "‫الفرع‬ ‫اسم‬: "
+
restaurantsLocObjects[i].getString("title") + "n";
longLat[i][0] =
Double.parseDouble(restaurantsLocObjects[i].getString("latit
ude"));
longLat[i][1] =
Double.parseDouble(restaurantsLocObjects[i].getString("lon
gitude"));
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
191
}
catch (JSONException e)
{
}
}
//‫الخريطة‬ ‫على‬ ‫المطعم‬ ‫فروع‬ ‫بوضع‬ ‫تقوم‬ ‫دالة‬
protected void mapCurrentAddress()
{
Geocoder g = new Geocoder(this);
List<Address> addresses;
boolean firstTime = true;
for (int i = 0; i <
restaurantsBranchesNames.length; i++)
{
try
{
addresses =
g.getFromLocation(longLat[i][0], longLat[i][1], 1);
if (addresses.size() > 0)
{
address = addresses.get(0);
List<Overlay> mapOverlays =
mapView.getOverlays();
AddressOverlay addressOverlay
= new AddressOverlay(address);
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
192
mapOverlays.add(addressOverlay);
//‫األربعة‬ ‫واألسطر‬ ‫الشرطية‬ ‫الجملة‬ ‫ھذه‬
‫الزوم‬ ‫نسبة‬ ‫تحديد‬ ‫ھو‬ ‫منھا‬ ‫الھدف‬ ‫تليھا‬ ‫التي‬zoom‫نرى‬ ‫بحيث‬ ‫عمله‬ ‫المراد‬
‫الخريطة‬ ‫عرض‬ ‫عند‬ ‫كلھا‬ ‫النقاط‬
//‫في‬ ‫األول‬ ‫فرعين‬ ‫لدينا‬ ‫كان‬ ‫لو‬ ‫أي‬
‫الخضر‬ ‫النقطتان‬ ‫تظھر‬ ‫بحيث‬ ‫بعيدا‬ ‫سيكون‬ ‫فالزوم‬ ،‫الدمام‬ ‫في‬ ‫والثاني‬ ‫الرياض‬
‫معا‬ ‫الخريطة‬ ‫على‬
if (firstTime)
{
minLat =
addressOverlay.getGeopoint().getLatitudeE6();
maxLat =
addressOverlay.getGeopoint().getLatitudeE6();
minLon =
addressOverlay.getGeopoint().getLongitudeE6();
maxLon =
addressOverlay.getGeopoint().getLongitudeE6();
firstTime = false;
}
minLat = (minLat >
addressOverlay.getGeopoint().getLatitudeE6()) ?
addressOverlay.getGeopoint().getLatitudeE6() : minLat;
maxLat = (maxLat <
addressOverlay.getGeopoint().getLatitudeE6()) ?
addressOverlay.getGeopoint().getLatitudeE6() : maxLat;
minLon = (minLon >
addressOverlay.getGeopoint().getLongitudeE6()) ?
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
193
addressOverlay.getGeopoint().getLongitudeE6() : minLon;
maxLon = (maxLon <
addressOverlay.getGeopoint().getLongitudeE6()) ?
addressOverlay.getGeopoint().getLongitudeE6() : maxLon;
mapView.invalidate();
}
else
{
}
}
catch (IOException e)
{
}
}
final MapController mapController =
mapView.getController();
GeoPoint center = new GeoPoint((maxLat +
minLat)/2,(maxLon + minLon)/2);
mapController.animateTo(center, new Runnable()
{
public void run()
{
mapController.zoomToSpan(maxLat -
minLat,maxLon - minLon);
}
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
194
});
}
private void setUpViews()
{
restName =
(TextView)findViewById(R.id.restaurantNameMap);
restName.setText(accessApplicationMethods().getItemOnMa
p().getName());
mapView = (MapView)findViewById(R.id.map);
//‫التصغير‬ ‫و‬ ‫التكبير‬ ‫أزرار‬ ‫تفعيل‬Zoomin/out
mapView.setBuiltInZoomControls(true);
}
@Override
protected boolean isLocationDisplayed()
{
return true;
}
@Override
protected boolean isRouteDisplayed()
{
return false;
}
protected RestDroidApplication
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
195
accessApplicationMethods()
{
return (RestDroidApplication)getApplication();
}
}
‫المشروع‬ ‫ملفات‬ ‫على‬ ‫نظرة‬ ‫نلقي‬ ‫واآلن‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
196
‫شيئا؟‬ ‫نسينا‬ ‫ھل‬!‫الجواب‬‫نعم‬..‫الـ‬ ‫ملف‬ ‫تعديل‬ ‫نسينا‬AndroidManifest.xml
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
197
‫الطريق‬ ‫خارطة‬ ‫أو‬ ‫بالمايسترو‬ ‫أسميه‬ ‫الذي‬ ‫الملف‬ ‫وھو‬.‫الملف‬ ‫ھذا‬‫مسئول‬‫عن‬
‫البداية‬ ‫في‬ ‫يشغلھا‬ ‫ونشاط‬ ‫واجھة‬ ‫وأي‬ ‫التطبيق‬ ‫تشغيل‬ ‫بكيفية‬ ‫التشغيل‬ ‫نظام‬ ‫إعالم‬
‫ذ‬ ‫وغير‬‫لك‬.
‫التالي‬ ‫بالشكل‬ ‫بتعديله‬ ‫نقوم‬:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="android.prog.easily"
android:versionCode="1"
android:versionName="1.0">
<!-- ‫الخاصة‬ ‫األيقونة‬ ‫صورة‬ ‫ومصدر‬ ‫اسمه‬ ‫تتضمن‬ ‫التطبيق‬ ‫عن‬ ‫معلومات‬
‫به‬ -->
<application android:name=".RestDroidApplication"
android:icon="@drawable/icon"
android:label="@string/app_name">
<!-- ‫نق‬‫واجھة‬ ‫كل‬ ‫بتعريف‬ ‫وم‬"‫وعددھا‬٣"‫بدون‬ ‫خاصتھا‬ ‫المجموعة‬ ‫اسم‬ ‫بكتابة‬
.java -->
<activity android:name=".intro"
android:label="@string/app_name">
<!-- ‫إطالقھا‬ ‫نريد‬ ‫التي‬ ‫األولى‬ ‫الواجھة‬ ‫ھي‬ ‫الواجھة‬ ‫ھذه‬ ‫أن‬ ‫يعني‬ ‫الجزء‬ ‫ھذا‬
‫ع‬‫التطبيق‬ ‫تشغيل‬ ‫ن‬ -->
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
198
</intent-filter>
</activity>
<activity android:name=".Best50"
android:label="Best 50 rest">
</activity>
<activity android:name=".ViewOnMapActivity"
android:label="view on Map">
</activity>
<!-- ‫الخرائط‬ ‫مكتبة‬ ‫استدعاء‬ ‫عليه‬ ‫يتوجب‬ ‫أنه‬ ‫التشغيل‬ ‫نظام‬ ‫نخبر‬ -->
<uses-library android:name="com.google.android.maps"
/>
</application>
<!-- ‫االنترنت‬ ‫استخدام‬ ‫بھا‬ ‫يمكننا‬ ‫التي‬ ‫والتصاريح‬ ‫األذونات‬ -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCAT
ION" />
<!-- ‫نسخة‬ ‫يستخدم‬ ‫التطبيق‬ ‫ھذا‬٢٫١‫األندرويد‬ ‫من‬ ‫وأعلى‬-‫ورقمھا‬٧‫لدي‬
‫عند‬ ‫معرفته‬ ‫ويمكن‬ ،‫لديكم‬ ‫يختلف‬ ‫قد‬ ‫الرقم‬ ‫وھذا‬‫إنشاء‬،‫المشروع‬‫رقما‬ ‫ستجدون‬
‫النسخة‬ ‫-بجانب‬ -->
<uses-sdk android:minSdkVersion="7" />
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
199
</manifest>
‫التطبيق‬ ‫من‬ ‫صور‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
200
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
201
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
202
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
203
‫متفرقات‬:
-‫افتراضية‬ ‫أو‬ ‫فعلية‬ ‫أجھزة‬ ‫وجود‬ ‫من‬ ‫التأكد‬)‫محاكي‬(‫عبر‬ ‫معھا‬ ‫التواصل‬ ‫ليتم‬
‫الطرفية‬ ‫الوحدة‬:
$ cd /Developer/android-sdk-mac_86/tools/
$ ./adb devices
‫النتيجة‬:
List of devices attached
emulator-5554 device
-‫أو‬ ‫للتطبيق‬ ‫كافية‬ ‫غير‬ ‫تكون‬ ‫قد‬ ‫االفتراضي‬ ‫للجھاز‬ ‫الداخلية‬ ‫الذاكرة‬ ‫مساحة‬
‫برفعھا‬ ‫نرغب‬ ‫لملفات‬‫إليه‬)‫العربية‬ ‫الخطوط‬ ‫كملفات‬(‫يمكننا‬ ‫لذلك‬ ،‫إطالق‬‫محاكي‬
‫األمر‬ ‫عبر‬ ‫بتخصيصھا‬ ‫نقوم‬ ‫بمساحة‬:
$ cd /Developer/android-sdk-mac_86/tools/
$ ./emulator -avd GPSenables -partition-size 500
‫بعد‬ ‫تحديده‬ ‫يتم‬ ‫المحاكي‬ ‫اسم‬-avd‫تشغيله‬ ‫أريد‬ ‫الذي‬ ‫المحاكي‬ ‫أن‬ ‫أي‬
GPSenables‫قم‬ ‫لذلك‬ ،‫ترغب‬ ‫الذي‬ ‫المحاكي‬ ‫وضع‬ ‫االسم‬ ‫ھذا‬ ‫بتغيير‬ ‫قومي‬
‫بإطالقه‬.
‫المحا‬ ‫من‬ ‫نسخة‬ ‫ستنطلق‬،‫مدخالت‬ ‫تقبل‬ ‫ال‬ ‫أصبحت‬ ‫الطرفية‬ ‫الوحدة‬ ‫أن‬ ‫وتجد‬ ‫كي‬
‫أخرى‬ ‫طرفية‬ ‫وحدة‬ ‫نافذة‬ ‫وافتح‬ ‫النافذة‬ ‫ھذه‬ ‫دع‬ ‫لذلك‬.
-‫عربية‬ ‫خطوط‬ ‫برفع‬ ‫للقيام‬‫إلى‬‫المحاكي‬)‫الذي‬ ‫الموقع‬ ‫في‬ ‫موجودة‬ ‫الخطوط‬
‫البرنامج‬ ‫ملفات‬ ‫عليه‬ ‫وضعنا‬(‫علينا‬ ،‫النظام‬ ‫ملفات‬ ‫على‬ ‫بالكتابة‬ ‫سنقوم‬ ‫أننا‬ ‫وبما‬
‫األم‬ ‫كتابة‬ ‫أوال‬‫ر‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
204
$ ./adb remount
‫النتيجة‬
remount succeeded
‫ثم‬ ‫ومن‬)‫المسار‬ ‫تغيير‬ ‫مع‬):
$ ./adb push /Users/wa2el/Desktop/fontss/DroidSans-Bold.ttf
/system/fonts/
$ ./adb push /Users/wa2el/Desktop/fontss/DroidSans.ttf
/system/fonts/
$ ./adb push
/Users/wa2el/Desktop/fontss/DroidSansFallback.ttf
/system/fonts/
-‫الكود‬ ‫تحت‬ ‫صفراء‬ ‫خطوط‬ ‫أحيانا‬ ‫لك‬ ‫تظھر‬ ‫قد‬ ،‫المنسوخ‬ ‫الكود‬ ‫لصق‬ ‫أثناء‬
)‫الـ‬ ‫ملفات‬ ‫في‬ ‫كثيرا‬ ‫تحصل‬xml)‫تحته‬ ‫الذي‬ ‫الكود‬ ‫أعلى‬ ‫اللصق‬ ‫إعادة‬ ‫ھو‬ ‫الحل‬
‫األخير‬ ‫إزالة‬ ‫ثم‬ ‫ومن‬ ‫صفراء‬ ‫خطوط‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
205
‫الملحق‬“‫أ‬”:
‫إن‬ ‫كيفية‬ ‫و‬ ‫وظيفة‬‫يلي‬ ‫ما‬ ‫شاء‬:
١-‫وعاء‬<LinearLayout>
٢-‫وعاء‬<TableLayout>
٣-‫وعاء‬<ScrollView>
١-‫وعاء‬<LinearLayout>
‫الخصائص‬ ‫عادة‬ ‫لدينا‬‫التالية‬ ‫العناصر‬:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
‫التوجه‬ ‫لخاصية‬ ‫بالنسبة‬Orientation‫األزرار‬ ‫رصف‬ ‫طريقة‬ ‫تحديد‬ ‫عبرھا‬ ‫يتم‬
‫وال‬Widgets‫الصفحة‬ ‫في‬.‫الرأسي‬ ‫الوضع‬Vertical‫العنا‬ ‫وضع‬ ‫يعني‬‫صر‬
‫أما‬ ،‫عمودي‬ ‫بشكل‬Horizontal‫أفقي‬ ‫بشكل‬ ‫صفھا‬ ‫فيعني‬.
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
206
‫خاصية‬layout_width‫مسئولة‬‫الحالة‬ ‫ھذه‬ ‫في‬ ‫ونحن‬ ،‫الوعاء‬ ‫عرض‬ ‫تحديد‬ ‫عن‬
‫نختار‬ ‫لذلك‬ ،‫المساحات‬ ‫جميع‬ ‫واحتالل‬ ‫الشاشة‬ ‫مأل‬ ‫الوعاء‬ ‫من‬ ‫نريد‬
fill_parent.
‫خاصية‬layout_height‫نريده‬ ‫وأيضا‬ ،‫الوعاء‬ ‫ارتفاع‬ ‫تحديد‬ ‫عبرھا‬ ‫يتم‬‫مأل‬
‫كاملة‬ ‫المساحات‬.
‫التطبيق‬ ‫واجھة‬ ‫في‬ ‫ظھوره‬ ‫بطريقة‬ ‫التحكم‬ ‫كيفية‬ ‫لنرى‬ ‫زر‬ ‫بإنشاء‬ ‫اآلن‬ ‫نقوم‬.
<Button
android:text="@+id/Button01"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
‫بالنسبة‬،‫األولى‬ ‫للخاصية‬android:text‫فھي‬‫المسئولة‬‫المراد‬ ‫النص‬ ‫تحديد‬ ‫عن‬
‫الزر‬ ‫على‬ ‫ظھوره‬. android:id‫عن‬ ‫يميزه‬ ‫للعنصر‬ ‫خاص‬ ‫رقم‬ ‫بإعطاء‬ ‫تقوم‬
‫غيره‬.‫سأتعرض‬ ‫ولكني‬ ،‫األعلى‬ ‫في‬ ‫شرحھما‬ ‫تم‬ ‫فقد‬ ‫األخيرتين‬ ‫للخاصيتين‬ ‫بالنسبة‬
‫لھما‬ ‫إعطاءھا‬ ‫الممكن‬ ‫من‬ ‫التي‬ ‫للقيم‬.‫ھناك‬٣‫احتماالت‬.‫األول‬fill_parent
‫يقوم‬ ‫الذي‬‫بمليء‬‫لھا‬ ‫أعطي‬ ‫التي‬ ‫الخاصية‬ ‫بحسب‬ ‫بالزر‬ ‫الخالية‬ ‫المساحة‬
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
207
(layout_width‫أو‬layout_height).‫ھو‬ ‫الثاني‬wrap_content‫والذي‬
‫النصي‬ ‫محتواه‬ ‫بحسب‬ ‫الزر‬ ‫حجم‬ ‫بضغط‬ ‫يقوم‬.‫تحديد‬ ‫يتم‬ ‫أن‬ ‫ھو‬ ‫الثالث‬ ‫االحتمال‬
‫البيكسل‬ ‫بمقياس‬ ‫والعرض‬ ‫االرتفاع‬.
‫ا‬ ‫للحالة‬ ‫مثال‬‫والثانية‬ ‫ألولى‬)‫ولكن‬ ،‫بالعرض‬ ‫له‬ ‫المجاورة‬ ‫المساحات‬ ‫الزر‬ ‫سيمأل‬
‫مضغوطا‬ ‫سيكون‬ ‫ارتفاعه‬):
<Button
android:text="Ardroid"
android:id="@+id/Button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
208
(‫بتبويب‬ ‫االستعانة‬ ‫ويمكنك‬ ،‫األخرى‬ ‫االحتماالت‬ ‫بتجربة‬ ‫قم‬Layout‫الستعراض‬
‫مرة‬ ‫كل‬ ‫في‬ ‫التطبيق‬ ‫تشغيل‬ ‫من‬ ‫بدال‬ ‫التصميم‬ ‫نتيجة‬..‫ھذه‬ ‫استخدام‬ ‫يمكنك‬ ‫كما‬
‫في‬ ‫النشاط‬ ‫صفحة‬ ‫لتصميم‬ ‫الواجھة‬‫ال‬ ‫كود‬ ‫كتابة‬ ‫دون‬ ‫التطبيق‬XML‫كل‬ ‫في‬
‫مرة‬)
‫الثالثة‬ ‫للحالة‬ ‫مثال‬:
<Button
android:text="Ardroid"
android:id="@+id/Button01"
android:layout_width="300px"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
209
android:layout_height="100px">
</Button>
‫بجا‬ ‫اآلن‬ ‫وضعه‬ ‫نريد‬ ‫ولكننا‬ ،ٍ‫ثان‬ ‫زر‬ ‫بإضافة‬ ‫سنقوم‬‫األول‬ ‫الزر‬ ‫نب‬.‫نقوم‬ ‫كيف‬
‫بوعاء‬ ‫الخاصة‬ ‫األولى‬ ‫الخاصية‬ ‫ننس‬ ‫ال‬ ‫بذلك؟‬LinearLayout‫وھي‬
Orientation.‫ال‬ ‫عرض‬ ‫ليتم‬ ‫بتعديلھا‬ ‫نقوم‬Widgets‫أفقي‬ ‫بشكل‬:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
‫الثاني‬ ‫والزر‬)‫السابق‬ ‫الزر‬ ‫اسم‬ ‫بنفس‬ ‫بتسميته‬ ‫قم‬):
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
210
<Button
android:text="Ardroid"
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
‫الوزن‬ ‫خاصية‬ ‫على‬ ‫بالتعرف‬ ‫اآلن‬ ‫سنقوم‬android:layout_weight‫والتي‬
‫أكبر‬ ‫كمية‬ ‫أولوية‬ ‫أعالھما‬ ‫ليحتل‬ ‫الزرين‬ ‫ألحد‬ ‫بتحديدھا‬ ‫نقوم‬ ‫أولوية‬ ‫بإعطاء‬ ‫تقوم‬
‫الفارغة‬ ‫المساحات‬ ‫من‬.‫فمثال‬:
<Button
android:text="Ardroid"
android:id="@+id/Button01"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
211
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
>
</Button>
<Button
android:text="Ardroid"
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
>
</Button>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
212
‫ال‬ ‫وضع‬ ‫بطريقة‬ ‫التحكم‬ ‫عبرھا‬ ‫يتم‬ ‫والتي‬ ‫األخرى‬ ‫الخصائص‬ ‫من‬ ‫عدد‬ ‫ھناك‬
Widgets‫مثال‬ ‫فلدينا‬android:layout_agravity‫حالة‬ ‫في‬ ‫أكثر‬ ‫مناسبة‬ ‫وھي‬
‫ال‬ ‫مع‬ ‫التعامل‬Widgets‫بخاصية‬ ‫بالتحكم‬ ‫عبرھا‬ ‫ونقوم‬ ‫رأسيا‬ ‫رصفھم‬ ‫عند‬
‫المحاذاة‬alignment‫مثال‬ ‫الزر‬ ‫عليھا‬ ‫سيكون‬ ‫التي‬.‫التحكم‬ ‫أردنا‬ ‫حال‬ ‫وفي‬
‫استخدام‬ ‫األفضل‬ ‫فمن‬ ،‫األفقية‬ ‫الرصف‬ ‫طريقة‬ ‫في‬ ‫بالمحاذاة‬
android:layout_marginLeft‫النقاط‬ ‫عدد‬ ‫وتحديد‬Pixels‫بين‬ ‫تفصل‬ ‫التي‬
‫واآلخر‬ ‫الزر‬.
‫على‬ ‫مثال‬android:layout_marginLeft‫األفقية‬ ‫الرصف‬ ‫حالة‬ ‫في‬
android:orientation=”horizontal” :
<Button
android:text="Ardroid"
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
213
android:layout_marginLeft="180px"
>
</Button>
‫على‬ ‫ومثال‬android:layout_gravity‫الرأسي‬ ‫بالوضع‬
android:orientation=”vertical”:
<Button
android:text="Ardroid"
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
214
</Button>
‫تجربتھا‬ ‫يمكنكم‬ ‫التي‬ ‫القيم‬ ‫من‬ ‫عددا‬ ‫تحوي‬ ‫والتي‬ ‫المنسدلة‬ ‫القائمة‬ ‫نالحظ‬ ‫طبعا‬
‫تأثيرھا‬ ‫ورؤية‬.
‫كال‬ ‫أخرى‬ ‫خصائص‬ ‫بتجربة‬ ‫قوموا‬android:gravity‫و‬
android:paddingLeft‫تأثيراتھا‬ ‫والحظوا‬ ‫وغيرھا‬.
‫اإلشارة‬ ‫تجدر‬ ،‫القسم‬ ‫ھذا‬ ‫نھاية‬ ‫في‬‫إلى‬‫توجه‬ ‫خاصية‬ ‫تغيير‬ ‫يمكننا‬ ‫أنه‬‫وضع‬
‫الوعاء‬Orientation‫التطبيق‬ ‫عمل‬ ‫أثناء‬.‫يقوم‬ ‫بأن‬ ‫التطبيق‬ ‫برمجة‬ ‫يمكننا‬ ‫فمثال‬
‫زر‬ ‫ضغط‬ ‫عند‬ ‫األفقي‬ ‫بالوضع‬ ‫ليصبح‬ ‫التوجه‬ ‫بتغيير‬.‫باستدعاء‬ ‫العملية‬ ‫ھذه‬ ‫تتم‬
‫دالة‬
x.setOrientation(LinearLayout.HORIZONTAL);
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
215
‫حيث‬x‫ال‬ ‫اسم‬ ‫ھي‬Widget‫ز‬ ،‫مثال‬ ‫ر‬.
٢-‫وعاء‬<TableLayout>
‫الجدول‬ ‫شكل‬ ‫الوعاء‬ ‫ھذا‬ ‫يأخذ‬.‫وسم‬ ‫نستخدم‬ ‫فإننا‬ ،‫لذا‬>TableRow<‫كلما‬
‫جديد‬ ‫صف‬ ‫إنشاء‬ ‫أردنا‬.‫الخصائص‬ ‫من‬ ‫بعدد‬ ‫الوعاء‬ ‫ھذا‬ ‫يتميز‬:
‫أ‬- android:layout_span :‫يحتله‬ ‫أن‬ ‫نود‬ ‫الذي‬ ‫المدى‬ ‫تحدد‬ ‫خاصية‬ ‫وھي‬
‫عددية‬ ‫قيمة‬ ‫وتأخذ‬ ،‫العنصر‬.‫العددي‬ ‫القيمة‬‫األعمدة‬ ‫عدد‬ ‫مباشر‬ ‫غير‬ ‫بشكل‬ ‫تحدد‬ ‫ة‬
Columns‫الصف‬ ‫داخل‬.
‫ب‬- android:layout_column :‫الذي‬ ‫العمود‬ ‫رقم‬ ‫تحدد‬ ‫خاصية‬ ‫وھي‬
‫العنصر‬ ‫عنده‬ ‫سيتوضع‬Widget.‫أول‬ ‫أن‬ ‫بمعنى‬ ،‫الصفر‬ ‫من‬ ‫يبدأ‬ ‫األعمدة‬ ‫وترقيم‬
‫وھكذا‬ ،‫صفر‬ ‫رقمه‬ ‫عمود‬.
‫ج‬- android:stretchColumns :‫بالوعاء‬ ‫محصورة‬ ‫خاصية‬ ‫وھي‬‫نفسه‬)‫أي‬
‫العناصر‬ ‫على‬ ‫تطبيقھا‬ ‫يمكن‬ ‫ال‬Widgets )‫ليغطي‬ ‫العمود‬ ‫شد‬ ‫على‬ ‫تعمل‬ ‫وھي‬
‫المساحة‬‫العمود‬ ‫رقم‬ ‫تحدد‬ ‫عددية‬ ‫قيمة‬ ‫وتأخذ‬ ،‫الفارغة‬.
‫د‬- android:shrinkColumns :‫السابقة‬ ‫الخاصية‬ ‫عكس‬ ‫وھي‬.
‫توضيحي‬ ‫مثال‬:
‫التالي‬ ‫التصميم‬ ‫على‬ ‫للحصول‬:
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
216
‫الكود‬ ‫نستعمل‬:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
217
android:stretchColumns="2"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello!"
android:layout_column="2"
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<SeekBar
android:id="@+id/SeekBar01"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
218
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:layout_column="1">
</SeekBar>
</TableRow>
<TableRow>
<Button
android:text="Ardroid"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
219
</Button>
<CheckBox
android:text="checkBox"
android:id="@+id/CheckBox01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
>
</CheckBox>
</TableRow>
<TableRow>
<RadioButton
android:text="Radio Button"
android:id="@+id/RadioButton01"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
220
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
</TableRow>
</TableLayout>
٣-‫وعاء‬<ScrollView>
‫كبيرا‬ ‫الصفحة‬ ‫في‬ ‫عرضه‬ ‫نود‬ ‫الذي‬ ‫المحتوى‬ ‫كان‬ ‫حالة‬ ‫في‬ ‫الوعاء‬ ‫ھذا‬ ‫نستعمل‬
‫واحدة‬ ‫صفحة‬ ‫في‬ ‫وضعه‬ ‫يمكن‬ ‫ال‬ ‫أنه‬ ‫بحيث‬.‫تضمين‬ ‫وھي‬ ‫سھلة‬ ‫عمله‬ ‫طريقة‬
‫بداخله‬ ‫نرغبه‬ ‫الذي‬ ‫التصميم‬.‫وض‬ ‫يمكننا‬ ،‫فمثال‬‫األعلى‬ ‫في‬ ‫كتبناه‬ ‫الذي‬ ‫الكود‬ ‫ع‬
‫بداخله‬)‫العناصر‬ ‫من‬ ‫عدد‬ ‫إضافة‬ ‫بعد‬Widgets‫المحتوى‬ ‫عرض‬ ‫يتطلب‬ ‫حتى‬
‫صفحة‬ ‫من‬ ‫أكثر‬).
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
221
android:layout_height="wrap_content">
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="2"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello!"
android:layout_column="2"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
222
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<SeekBar
android:id="@+id/SeekBar01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:layout_column="1">
</SeekBar>
</TableRow>
<TableRow>
<Button
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
223
android:text="Ardroid"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
>
</Button>
<CheckBox
android:text="checkBox"
android:id="@+id/CheckBox01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
224
</CheckBox>
</TableRow>
<TableRow>
<RadioButton
android:text="Radio Button"
android:id="@+id/RadioButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
</TableRow>
<TableRow>
<RadioButton
android:text="Radio Button"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
225
android:id="@+id/RadioButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
</TableRow>
<TableRow>
<RadioButton
android:text="Radio Button"
android:id="@+id/RadioButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</RadioButton>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
226
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello!"
android:layout_column="2"
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
227
android:text="Hello!"
android:layout_column="2"
android:layout_gravity="center"
/>
</TableRow>
<TableRow>
<SeekBar
android:id="@+id/SeekBar01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:layout_column="1">
</SeekBar>
</TableRow>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
228
<TableRow>
<SeekBar
android:id="@+id/SeekBar01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_span="2"
android:layout_column="1">
</SeekBar>
</TableRow>
<TableRow>
<SeekBar
android:id="@+id/SeekBar01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
229
android:layout_span="2"
android:layout_column="1">
</SeekBar>
</TableRow>
</TableLayout>
</ScrollView>
‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1
230
‫ﷲ‬ ‫بحمد‬ ‫انتھى‬
‫و‬ ‫أفادكم‬ ‫قد‬ ‫الكتاب‬ ‫يكون‬ ‫أن‬ ‫أتمنى‬ ‫كما‬ ‫العمل‬ ‫ھذا‬ ‫ﷲ‬ ‫يتقبل‬ ‫أن‬ ‫أرجوا‬
‫الغيب‬ ‫بظھر‬ ‫دعوة‬ ‫منكم‬ ‫أرجوا‬
‫بدوي‬ ‫محمد‬،‫علواني‬ ‫وائل‬
‫بود‬ ‫دمتم‬،،،

More Related Content

PDF
مقدمة عن أندرويد
PPTX
iOS vs. Android
PPTX
مقدمة الى الأندرويد
PDF
Introduction to android and development environment
PDF
انظمة تشغيل الاجهزة الذكية
PDF
34d7 android
PPTX
تحليل ماركوف
PDF
Android Security Overview and Safe Practices for Web-Based Android Applications
مقدمة عن أندرويد
iOS vs. Android
مقدمة الى الأندرويد
Introduction to android and development environment
انظمة تشغيل الاجهزة الذكية
34d7 android
تحليل ماركوف
Android Security Overview and Safe Practices for Web-Based Android Applications

Viewers also liked (10)

ODP
Android security in depth
PDF
Testing Android Security
PPT
أساسيات إستخدام تطبيقات أندرويد في تغطية الأحداث المحلية
PDF
2015.04.24 Updated > Android Security Development - Part 1: App Development
PPT
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
PDF
Android version history
PPTX
Slideshare android
PDF
Android Secure Coding
PDF
Introduction to Android Development and Security
PPTX
Presentation on Android operating system
Android security in depth
Testing Android Security
أساسيات إستخدام تطبيقات أندرويد في تغطية الأحداث المحلية
2015.04.24 Updated > Android Security Development - Part 1: App Development
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
Android version history
Slideshare android
Android Secure Coding
Introduction to Android Development and Security
Presentation on Android operating system
Ad

Similar to Android verysimplebook... أندرويد ببساطة (20)

PDF
استخدام الأجهزة الذكية في التعليم /عدنان الأحمدي
PDF
البرمجة | أقوي مجالات العمل والربح من الانترنت..دليلك نحو الاحتراف
PPTX
Android 1
PPT
نظام التشغيل
PDF
الدليل العلمي لنظام الدي سبيس
PPTX
Introducation To Robotics
PPTX
اعداد معلم الروبوت
PDF
Scratch
PDF
أنت حر ، رؤية مبسطة للبرمجيات مفتوحة المصدر!
PDF
Visual basic.net احترف فيجوال بيسك
PPTX
Introduction to building apps for windows phone 8 & 10
PPTX
One note in education
PDF
سابع1
PDF
Raspberrypi احترف راسبيري باي القرية الهندسية
PDF
Using mobiles and tablets in education -2015
PDF
كورس تطوير تطبيقات الاندرويد بدون برمجة Android Apps Development
DOCX
تقرير التقن الحوسبة السحابية
PDF
Phone gap vs ionic vs intel xdk
PDF
مشروع كلمات Template
PPTX
Dropbox
استخدام الأجهزة الذكية في التعليم /عدنان الأحمدي
البرمجة | أقوي مجالات العمل والربح من الانترنت..دليلك نحو الاحتراف
Android 1
نظام التشغيل
الدليل العلمي لنظام الدي سبيس
Introducation To Robotics
اعداد معلم الروبوت
Scratch
أنت حر ، رؤية مبسطة للبرمجيات مفتوحة المصدر!
Visual basic.net احترف فيجوال بيسك
Introduction to building apps for windows phone 8 & 10
One note in education
سابع1
Raspberrypi احترف راسبيري باي القرية الهندسية
Using mobiles and tablets in education -2015
كورس تطوير تطبيقات الاندرويد بدون برمجة Android Apps Development
تقرير التقن الحوسبة السحابية
Phone gap vs ionic vs intel xdk
مشروع كلمات Template
Dropbox
Ad

Recently uploaded (14)

PDF
‎⁨نظريات ونماذج لتبني التقنية في التعليم.
PDF
خطة دورة طريقة الاستعداد لاختبار الرخصة المهنية التربوي(العام)
PDF
كتاب "فكّر خارج الصندوق" هو رحلة من الاسئلة
PPTX
حقيبة دمج مهارات التفكير في التدريس - عرض بوربوينت.pptx
PDF
ادارة الصحة و السلامة المهنية osha30.pdf
PDF
رواية "مؤامرة النبلاء" هي قصة مليئة بالإثارة والمغامرات
PPTX
Arduino Programming language Chapter number - 2
PDF
Maysra Catalogue Version #1 (important Business Tips in your Pocket).pdf
PDF
ادارة علاقات الموردين-الشهادة الدولية في المشتريات والامداد
PPTX
المحاضره الثامنه الهضم والامتصاص داخل جسم الانسان .pptx
PDF
مراتب الدين - مادة التربية الإسلامية ppt
PPTX
Arduino Programming Chapter number - 1 1.pptx
PDF
كتاب ادارة المخازن.pdf - الشهادة الدولية
PPTX
jgiiiiiijoj yojjyojdbbojybojojyjdobjjjyh
‎⁨نظريات ونماذج لتبني التقنية في التعليم.
خطة دورة طريقة الاستعداد لاختبار الرخصة المهنية التربوي(العام)
كتاب "فكّر خارج الصندوق" هو رحلة من الاسئلة
حقيبة دمج مهارات التفكير في التدريس - عرض بوربوينت.pptx
ادارة الصحة و السلامة المهنية osha30.pdf
رواية "مؤامرة النبلاء" هي قصة مليئة بالإثارة والمغامرات
Arduino Programming language Chapter number - 2
Maysra Catalogue Version #1 (important Business Tips in your Pocket).pdf
ادارة علاقات الموردين-الشهادة الدولية في المشتريات والامداد
المحاضره الثامنه الهضم والامتصاص داخل جسم الانسان .pptx
مراتب الدين - مادة التربية الإسلامية ppt
Arduino Programming Chapter number - 1 1.pptx
كتاب ادارة المخازن.pdf - الشهادة الدولية
jgiiiiiijoj yojjyojdbbojybojojyjdobjjjyh

Android verysimplebook... أندرويد ببساطة

  • 2. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 2 ‫ببساطة‬ ‫أندرويد‬ ‫المصدر‬ ‫المفتوح‬ ‫أندرويد‬ ‫تشغيل‬ ‫نظام‬ ‫على‬ ‫تطبيقات‬ ‫تطوير‬ ‫تعلم‬ ‫في‬ ‫انتھى‬)‫أبريل‬/2010( ‫في‬ ‫نشر‬)‫مارس‬/2011( ‫بواسطة‬ ‫بدوي‬ ‫محمد‬ ‫علواني‬ ‫وائل‬
  • 3. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 3 ‫المحتويات‬ ‫فھرس‬ ‫الموضوع‬ ‫أندرويد‬ ‫على‬ ‫لنتعرف‬ ‫المصطلحات‬ ‫قاموس‬ ‫أندر‬ ‫تشغيل‬ ‫لنظام‬ ‫موجه‬ ‫تطبيق‬ ‫تبني‬ ‫كيف‬‫ويد‬ ‫التطبيق‬ ‫لحياة‬ ‫الداخلية‬ ‫البنية‬ ‫على‬ ‫التعرف‬ ‫يد‬ ‫الندرو‬ ‫الموجھة‬ ‫المطورين‬ ‫حزمة‬ ‫و‬ ‫التطوير‬ ‫أدوات‬ ‫تركيب‬ ‫الخطوة‬‫األولى‬)Java SE( ‫الثانية‬ ‫الخطوة‬)Android SDK( ‫الثالثة‬ ‫الخطوة‬)Eclipse( ‫الرابعة‬ ‫الخطوة‬)ADT( ‫التطوير‬ ‫بيئة‬ ‫مع‬ ‫التعامل‬)Eclipse( ‫ل‬ ‫تطبيق‬ ‫أول‬ ‫بناء‬‫بواسطة‬ ‫يد‬ ‫الندرو‬ ‫موجه‬ ‫ك‬)Android( ‫األوامر‬ ‫سطر‬ ‫خالل‬ ‫من‬ ‫المشروع‬ ‫بناء‬ ‫المحاكي‬ ‫على‬ ‫تطبيقك‬ ‫تشغيل‬ ‫المحاكي‬ ‫إعداد‬ ‫المحاكي‬ ‫تشغيل‬ ‫المحاكي‬ ‫مع‬ ‫التعامل‬ ‫األوامر‬ ‫سطر‬ ‫خالل‬ ‫من‬ ‫المحاكي‬ ‫مع‬ ‫التعامل‬ ‫الخارجي‬ ‫العالم‬ ‫و‬ ‫المحاكي‬ ‫تطبيقك‬ ‫بناء‬‫األول‬‫كود‬ ‫بدون‬)‫بالعالم‬ ‫أھال‬( ‫ب‬‫مشروعك‬ ‫ناء‬‫األول‬)‫المھام‬ ‫قائمة‬( ‫للجمھور‬ ‫تطبيقك‬ ‫إتاحة‬ ‫و‬ ‫بتسويق‬ ‫تقوم‬ ‫كيف‬ ‫احترافي‬ ‫تطبيق‬ ‫بناء‬)Mash up(‫خارجي‬ ‫محتوى‬ ‫مع‬ ‫بالتكامل‬)‫درويد‬ ‫ريست‬(
  • 4. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 4 ‫الكتاب‬ ‫حول‬ ‫معرف‬ ‫الجيد‬ ‫من‬‫ته‬‫العام‬ ‫نھاية‬ ‫في‬ ‫الكتاب‬ ‫بكتابة‬ ‫قمنا‬ ‫أننا‬)2009( ‫لطب‬ ‫راعي‬ ‫عن‬ ‫البحث‬ ‫حاولنا‬ ‫ثم‬ ‫من‬ ‫و‬ ‫ميالدية‬‫توزيعه‬ ‫أو‬ ‫الكتاب‬ ‫اعة‬ ‫شركة‬ ‫ومنھا‬ ‫الكثيرة‬ ‫الوعود‬ ‫بإطالق‬ ‫الجھات‬ ‫بعض‬ ‫قامت‬ ‫قد‬ ‫و‬ ‫أشھر‬ ‫بضعة‬ ‫االنتظار‬ ‫جعلنا‬ ‫مما‬ ‫السعودية‬ ‫في‬ ‫بوكيلھا‬ ‫ممثلة‬ ‫جوجل‬ ‫للناس‬ ‫لتوفيره‬ ‫جودته‬ ‫مدى‬ ‫و‬ ‫بالكتاب‬ ‫الراعي‬ ‫رأي‬ ‫لنعرف‬،‫و‬ ‫لكن‬ ‫و‬ ‫منھم‬ ‫نسمع‬ ‫نعد‬ ‫لم‬ ‫الوقت‬ ‫مرور‬ ‫مع‬،‫الكتاب‬ ‫نشر‬ ‫في‬ ‫تقاعسنا‬ ‫لذا‬ ‫و‬ ‫شھر‬ ‫منذ‬ ‫نھائيا‬ ‫عليه‬ ‫العمل‬ ‫توقف‬ ‫و‬ ‫نكمله‬ ‫لم‬ ‫و‬)4(‫للعام‬)2010( ‫قد‬ ‫ھا‬ ‫و‬‫قمنا‬‫إن‬ ‫و‬ ‫ھو‬ ‫و‬ ‫للناس‬ ‫إلصداره‬ ‫عجل‬ ‫على‬ ‫و‬ ‫بتنقيحه‬ ‫أخيرا‬ ‫حتى‬ ‫فيه‬ ‫بما‬ ‫للعمل‬ ‫صالحا‬ ‫مازال‬ ‫أنه‬ ‫إال‬ ‫قديمة‬ ‫البيانات‬ ‫بعض‬ ‫كانت‬ ‫ھذا‬ ‫يومنا‬،‫فلقد‬ ‫تعذرنا‬ ‫أن‬ ‫فأرجوا‬ ‫األخطاء‬ ‫بعض‬ ‫وجود‬ ‫حال‬ ‫في‬ ‫لذا‬ ‫بأفضل‬ ‫قمنا‬‫يمكن‬ ‫ما‬ ‫بأبسط‬ ‫و‬ ‫شكل‬ ‫بأفضل‬ ‫بالكتاب‬ ‫للخروج‬ ‫يمكن‬ ‫ما‬ ‫و‬ ‫المجال‬ ‫ھذا‬ ‫في‬ ‫مھتمة‬ ‫اآلن‬ ‫حتى‬ ‫عربية‬ ‫كتب‬ ‫أي‬ ‫يوجد‬ ‫ال‬ ‫حيث‬ ‫التعقيد‬ ‫من‬ ‫تعاني‬ ‫طالعناھا‬ ‫التي‬ ‫األجنبية‬ ‫الكتب‬ ‫أغلب‬ ‫الحال‬ ‫كذلك‬، ‫مازلنا‬ ‫لذا‬ ‫و‬ ‫األمور‬ ‫من‬ ‫بالكثير‬ ‫ملم‬ ‫الكتاب‬ ‫يقرأ‬ ‫من‬ ‫بأن‬ ‫تعتبر‬ ‫و‬ ‫بل‬ ‫سيكون‬ ‫الكتاب‬ ‫بأن‬ ‫نجد‬‫ھذا‬ ‫في‬ ‫ھذا‬ ‫يومنا‬ ‫حتى‬ ‫كتب‬ ‫ما‬ ‫أفضل‬ ‫من‬ ‫العالم‬. ‫مجاني‬ ‫الكتاب‬‫لألفراد‬‫يمكن‬ ‫و‬‫إعادة‬‫توزيعه‬‫بدون‬ ‫ھو‬ ‫كما‬ ‫نشره‬ ‫و‬ ‫لنا‬ ‫الرجوع‬ ‫دون‬ ‫الكتروني‬ ‫بشكل‬ ‫و‬ ‫تعديل‬ ‫أي‬،‫ال‬ ‫أن‬ ‫أرجوا‬ ‫ولذا‬ ‫دائما‬ ‫لھا‬ ‫الحاجة‬ ‫بأشد‬ ‫فنحن‬ ‫الغيب‬ ‫بظھر‬ ‫دعوة‬ ‫من‬ ‫تنسونا‬. ‫استخدامه‬ ‫أو‬ ‫الطبع‬ ‫حال‬ ‫في‬ ‫أما‬‫ألغراض‬‫ت‬‫لغير‬ ‫أو‬ ‫جارية‬‫األفراد‬ ‫لنا‬ ‫الرجوع‬ ‫فيرجى‬‫ألخذ‬‫بذلك‬ ‫خاص‬ ‫إذن‬.
  • 5. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 5 ‫المؤلفين‬ ‫حول‬ ‫بدوي‬ ‫محمد‬)‫مدون‬،‫مبرمج‬،‫أعمال‬ ‫رائد‬( ‫على‬ ‫للتطبيقات‬ ‫مطور‬‫األجھزة‬‫مثل‬ ‫الذكية‬)iPhone/iPad(‫و‬)Android( ‫و‬)Windows Mobile(‫و‬)Blackberry( ‫االنترنت‬ ‫على‬ ‫الموقع‬:www.badwi.com ‫االل‬ ‫البريد‬‫كتروني‬:badwisoft@gmail.com ‫الھاتف‬:00966503415343 ‫تويتر‬ ‫على‬ ‫حساب‬:http://twitter.com/badwi ‫بوك‬ ‫فيس‬ ‫حساب‬:http://www.facebook.com/badwi ‫وائل‬‫علواني‬)‫أندرويد‬ ‫تطبيقات‬ ‫ومطور‬ ‫مدون‬( ‫ومواضيع‬ ‫األندرويد‬ ‫مجال‬ ‫وخصوصا‬ ‫وتطوراتھا‬ ‫بالتقنية‬ ‫مھتم‬ ‫البيانات‬ ‫تعدين‬Data Mining..‫الحاسب‬ ‫علوم‬ ‫في‬ ‫ماجستير‬ ‫يحمل‬ -‫والتقنية‬ ‫للعلوم‬ ‫عبدﷲ‬ ‫الملك‬ ‫جامعة‬ ‫من‬ ‫صنعي‬ ‫ذكاء‬ ‫تخصص‬ )‫كاوست‬.( ‫االل‬ ‫البريد‬‫كتروني‬:wael.alalwani@gmail.com ‫تويتر‬ ‫على‬ ‫حساب‬:http://twitter.com/waelalwani
  • 6. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 6 ‫أندرويد‬ ‫على‬ ‫بالبداية‬ ‫لنتعرف‬ ‫المحمولة‬ ‫لألجھزة‬ ‫موجھة‬ ‫المصدر‬ ‫مفتوح‬ ‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫أندرويد‬ ‫جوج‬ ‫شركة‬ ‫اشترته‬‫العام‬ ‫في‬ ‫الشركات‬ ‫أحد‬ ‫من‬ ‫ل‬)2005(‫و‬ ‫ميالدية‬ ‫العام‬ ‫في‬)2007(.‫لألجھزة‬ ‫المفتوحة‬ ‫المصادر‬ ‫اتحاد‬ ‫تحت‬ ‫تبنيه‬ ‫تم‬ ‫المحمولة‬)OHA) (Open Handset Alliance(‫ضم‬ ‫الذي‬ ‫و‬ ‫من‬ ‫أكثر‬)48(‫شركات‬ ‫و‬ ‫مصنعين‬ ‫منھم‬ ‫و‬ ‫الشركات‬ ‫كبار‬ ‫من‬ ‫شركة‬ ‫ش‬ ‫و‬ ‫الكترونية‬ ‫شرائح‬ ‫تزود‬ ‫شركات‬ ‫و‬ ‫برمجية‬ ‫تطبيقات‬‫تھتم‬ ‫ركات‬ ‫االتصاالت‬ ‫خدمة‬ ‫مزودي‬ ‫و‬ ‫بالمحتوى‬.‫العام‬ ‫في‬ ‫و‬)2008(‫قامت‬ ‫شركة‬)HTC(‫ھاتف‬ ‫أول‬ ‫بإصدار‬ ‫المحمولة‬ ‫لألجھزة‬ ‫المصنعة‬ ‫و‬ ‫تشغيل‬ ‫بنظام‬ ‫متنقل‬)Android(‫العام‬ ‫في‬ ‫و‬)2009(‫شركة‬ ‫قامت‬ )T-Mobile(‫أجھزة‬ ‫مع‬ ‫سنوي‬ ‫عقد‬ ‫ضمن‬ ‫ھاتف‬ ‫خطوط‬ ‫أول‬ ‫ببيع‬ )HTC(‫تشغيل‬ ‫لنظام‬ ‫المتضمنة‬ ‫و‬)‫أندرويد‬(. ‫لينكس‬ ‫نواة‬ ‫على‬ ‫ومبني‬ ‫يعتمد‬ ‫أندرويد‬ ‫نظام‬)Linux 2.6 kernel(‫تشغيل‬ ‫نظام‬ ‫يعد‬ ‫ال‬ ‫لكنه‬ ‫و‬)GNU/Linux(‫ال‬ ‫أنه‬ ‫حيث‬ ‫من‬ ‫كل‬ ‫يدعم‬)native windowing system(‫و‬)glibc support(‫أدوات‬ ‫حتى‬ ‫ال‬ ‫و‬)GNU/Linux(‫من‬ ‫يستفيد‬ ‫لكنه‬ ‫و‬ ‫األمان‬ ‫في‬ ‫بقواتھا‬ ‫النواة‬)security(‫الذاكرة‬ ‫إدارة‬ ‫و‬)memory management(‫الخلفية‬ ‫العمليات‬ ‫إدارة‬ ‫و‬)process management(‫الشبكة‬ ‫إدارة‬ ‫في‬ ‫الحال‬ ‫كذلك‬ ‫و‬)network stack(‫السواقات‬ ‫نموذج‬ ‫و‬)driver model(‫التجريد‬ ‫طبقة‬ ‫و‬ )abstraction layer(. ‫ت‬ ‫لنظام‬ ‫الموجھة‬ ‫التطبيقات‬ ‫تطوير‬ ‫و‬ ‫التطبيقات‬ ‫بناء‬ ‫يمكن‬‫شغيل‬ )‫أندرويد‬(‫من‬ ‫كل‬ ‫بواسطة‬)Java(‫و‬)Managed Code(‫لكن‬ ‫و‬
  • 7. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 7 ‫نسخة‬ ‫تعبر‬ ‫ال‬)Java(‫من‬ ‫لجزء‬ ‫مطورة‬ ‫ھي‬ ‫بل‬ ‫القياسية‬)Java5 SE(‫على‬ ‫تعمل‬ ‫و‬)JDV(‫لـ‬ ‫اختصارا‬)Java Dalvik Virtual(‫من‬ ‫بدال‬)JVM(‫لـ‬ ‫اختصارا‬)Java Virtual Machine(. ‫مفتوح‬ ‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫ببساطة‬ ‫و‬ ‫أندرويد‬‫تعدد‬ ‫ويدعم‬ ‫المصدر‬ ‫التطبيقات‬.‫أي‬‫الممكن‬ ‫من‬‫أن‬‫به‬ ‫يعمل‬‫نفس‬ ‫في‬ ‫تطبيق‬ ‫من‬ ‫أكثر‬ ‫الخلفية‬ ‫في‬ ‫الخدمات‬ ‫أو‬ ‫الوقت‬.‫بشكل‬ ‫فيه‬ ‫التطبيقات‬ ‫كل‬ ‫تعمل‬ ‫و‬ ‫يعمل‬ ‫تطبيق‬ ‫كل‬ ‫كان‬ ‫وان‬ ‫الجھاز‬ ‫موارد‬ ‫مشاركة‬ ‫ناحية‬ ‫من‬ ‫متساوي‬ ‫منفصلة‬ ‫بطبقة‬ ‫مستقل‬ ‫بشكل‬.‫استخدام‬ ‫إعادة‬ ‫من‬ ‫منصته‬ ‫تمكنك‬ ‫و‬ ‫ك‬ ‫كائناته‬‫محرك‬ ‫يستخدم‬ ‫و‬ ‫ما‬)Web Kit OSS(‫انترنت‬ ‫كمتصف‬ ‫متصفح‬ ‫في‬ ‫يستخدم‬ ‫الذي‬ ‫و‬)Google chrome(.‫يدعم‬ ‫كما‬ ‫مكتبة‬)OpenGL ES(‫قواعد‬ ‫يعتمد‬ ‫و‬ ‫الثالثية‬ ‫الصور‬ ‫إلدارة‬ ‫بيانات‬)SQLite(‫تخزين‬ ‫في‬‫ال‬‫بيانات‬.‫كم‬‫ا‬‫الصيغ‬ ‫كل‬ ‫يدعم‬ ‫و‬ ‫الج‬ ‫و‬ ‫فيديو‬ ‫و‬ ‫أصوات‬ ‫و‬ ‫صور‬ ‫من‬ ‫الميديا‬ ‫لوسائط‬ ‫القياسية‬‫فيه‬ ‫ميل‬ ‫التوضع‬ ‫نظام‬ ‫و‬ ‫الرقمية‬ ‫الكاميرا‬ ‫من‬ ‫متنوع‬ ‫عتاد‬ ‫يتضمن‬ ‫أنه‬ ‫العالمي‬)GPS(‫اإلحساس‬ ‫خاصية‬ ‫دعم‬ ‫إلى‬ ‫باإلضافة‬ ‫البوصلة‬ ‫و‬ ‫بالمكان‬)accelerometer(. ‫الداخلية‬ ‫أندرويد‬ ‫بنية‬ ‫على‬ ‫أكثر‬ ‫لنتعرف‬. . ‫لينوك‬ ‫نواة‬ ‫تقع‬ ‫األساس‬ ‫في‬‫س‬)Linux Kernel(‫ھي‬ ‫التي‬ ‫و‬ ‫عن‬ ‫مسئولة‬: • Display Driver • Bluetooth Driver • Camera Driver
  • 8. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 8 • Flash Memory Driver • Binder (IPC) Driver • Keypad Driver • USB Driver • Wi-Fi Driver • Audio Driver • Power Management ‫عن‬ ‫عبارة‬ ‫ھي‬ ‫التي‬ ‫و‬ ‫التشغيل‬ ‫طبقة‬ ‫تليھا‬ ‫ثم‬: • Dalvik Virtual Machine • Core Libraries ‫ھي‬ ‫المكتبات‬ ‫ھذه‬ ‫و‬: • Surface Manager • Media Framework • SQLite • OpenGL ES • Free Type • Web Kit • SGL • SSL • Libbc
  • 9. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 9 ‫كل‬ ‫قبل‬ ‫من‬ ‫تستخدم‬ ‫التي‬ ‫و‬ ‫التطبيقات‬ ‫منصة‬ ‫طبقة‬ ‫الطبقة‬ ‫ھذه‬ ‫تلي‬ ‫ثم‬ ‫التطبيقات‬: • Activity Manager • Window Manager • Content Provider • View System • Notification Manager • Package Manager • Telephony Manager • Resource • Location Manager • Sensor Manager ‫من‬ ‫المشحونة‬ ‫الرئيسية‬ ‫التطبيقات‬ ‫تأتي‬ ‫األخيرة‬ ‫الطبقة‬ ‫في‬ ‫ثم‬ ‫مثل‬ ‫الشركة‬: • Home • Contacts • Phone • Browser ‫تطبيقك‬ ‫منھا‬ ‫سيكون‬ ‫التي‬ ‫و‬ ‫األخرى‬ ‫التطبيقات‬ ‫بعض‬ ‫و‬‫الذي‬ ‫الخاص‬ ‫ببنائه‬ ‫ستقوم‬ ‫كيف‬ ‫سوية‬ ‫نتعلم‬ ‫سوف‬.
  • 10. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 10 ‫ال‬ ‫مصدر‬‫صورة‬:‫أندرويد‬ ‫صفحة‬-‫ويكيبيديا‬
  • 11. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 11 ‫الوحدات‬‫األساس‬‫معه‬ ‫سنتعامل‬ ‫الذي‬‫ھو‬ ‫أندرويد‬ ‫تطبيق‬ ‫ألي‬: • Activity • Intent • Service • Content Provider ‫أن‬ ‫لتطبيقك‬ ‫يمكن‬ ‫التي‬ ‫و‬ ‫األسس‬ ‫ھذه‬ ‫على‬ ‫نتعرف‬ ‫دعنا‬ ‫اإلبحار‬ ‫قبل‬ ‫مجتمعة‬ ‫كلھا‬ ‫أو‬ ‫أكثر‬ ‫أو‬ ‫فقط‬ ‫أحدھا‬ ‫يستخدم‬: ‫الجلس‬ ‫أو‬ ‫النشاط‬‫ة‬)Activity( ‫عن‬ ‫عبارة‬ ‫تكون‬ ‫و‬ ‫وحيدة‬ ‫شاشة‬ ‫لتوصيف‬ ‫تستخدم‬)Class(‫التي‬ ‫و‬ ‫استدعا‬ ‫يتم‬‫ؤ‬‫الزناد‬ ‫طريق‬ ‫عن‬ ‫ھا‬)Intent(‫الجز‬ ‫بالعادة‬ ‫تكون‬ ‫و‬‫ء‬ ‫في‬ ‫تكون‬ ‫أن‬ ‫يمكن‬ ‫إذ‬ ‫الظاھر‬‫أعلى‬‫استدعائھا‬ ‫يمكن‬ ‫و‬ ‫التطبيقات‬ ‫كل‬ ‫نھائيا‬ ‫إغالقھا‬ ‫أو‬ ‫استدعائه‬ ‫إعادة‬ ‫و‬ ‫الخلفية‬ ‫في‬ ‫جعلھا‬ ‫أو‬. ‫حياة‬ ‫دورة‬)Activity( ‫بداية‬)Start(‫النشاط‬)Activity(‫األحداث‬ ‫مع‬ ‫تتعامل‬ ‫التي‬ ‫و‬ • On Create • On Start • Om Restore Instance State • On Resume
  • 12. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 12 ‫التشغيل‬ ‫وضع‬ ‫في‬ ‫النشاط‬ ‫يكون‬ ‫عندما‬ ‫ھي‬ ‫و‬ ‫الثانية‬ ‫المرحلة‬ ‫في‬ ‫أما‬ )Running(‫التالية‬ ‫األحداث‬ ‫مع‬ ‫يتعامل‬ ‫فإنه‬: • On Start • On Restart • On Resume • On Push • On Save Instance State ‫وضعية‬ ‫في‬ ‫يكون‬ ‫فإنه‬ ‫أخر‬ ‫نشاط‬ ‫إلى‬ ‫االنتقال‬ ‫و‬ ‫يعمل‬ ‫النشاط‬ ‫بينما‬ ‫و‬ ‫المؤقت‬ ‫اإليقاف‬)Paused(‫األحداث‬ ‫مع‬ ‫معه‬ ‫التعامل‬ ‫يمكن‬ ‫الذي‬ ‫و‬: • On Save Instance State • On Resume • On Stop ‫تعت‬ ‫التي‬ ‫و‬ ‫األخيرة‬ ‫المرحلة‬ ‫أما‬‫إلغاؤ‬ ‫يتم‬ ‫التي‬ ‫و‬ ‫النشاط‬ ‫نھاية‬ ‫بر‬‫م‬ ‫ه‬‫ن‬ ‫الذاكرة‬)Destroyed(‫الوحيد‬ ‫الحدث‬ ‫تنفيذ‬ ‫يتم‬ ‫و‬: • On Destroy ‫الزناد‬/‫الحدث‬)Intent( ‫ترجمة‬ ‫أقرب‬ ‫زناد‬ ‫أن‬ ‫أرى‬ ‫لكن‬ ‫و‬ ‫غرض‬ ‫أو‬ ‫قصد‬ ‫إلى‬ ‫يترجم‬ ‫الذي‬ ‫و‬ ‫ما‬ ‫عمل‬ ‫إلتمام‬ ‫يستخدم‬ ‫التي‬ ‫و‬ ‫العربية‬ ‫باللغة‬ ‫للفھم‬،‫في‬ ‫مثال‬ ‫أ‬ ‫انترنت‬ ‫صفحة‬ ‫استدعاء‬ ‫عند‬ ‫أو‬ ‫شاشة‬ ‫مثل‬ ‫جديد‬ ‫نشاط‬ ‫استدعاء‬‫و‬ ‫التي‬ ‫األمور‬ ‫من‬ ‫غيرھا‬ ‫و‬ ‫االتصاالت‬ ‫قائمة‬ ‫في‬ ‫عنصر‬ ‫عن‬ ‫البحث‬ ‫المستخدم‬ ‫طلب‬ ‫على‬ ‫بناء‬ ‫تستخدم‬.
  • 13. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 13 ‫الخدمة‬)Service( ‫على‬ ‫تحتوي‬ ‫ال‬ ‫بالعادة‬ ‫و‬ ‫مثال‬ ‫الخلفية‬ ‫في‬ ‫كذلك‬ ‫وتبقى‬ ‫لتعمل‬ ‫تستخدم‬ ‫مشغل‬ ‫بتشغيل‬ ‫قمت‬ ‫و‬ ‫جربت‬ ‫لو‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬ ‫مستخدم‬ ‫واجھة‬ ‫الموسيقى‬)Media Player(‫فيمكنك‬‫بريدك‬ ‫تصفح‬ ‫و‬ ‫منه‬ ‫الخروج‬ ‫في‬ ‫و‬ ‫الموسيقى‬ ‫تسمع‬ ‫مازلت‬ ‫الوقت‬ ‫نفس‬ ‫في‬ ‫و‬ ‫مالحظاتك‬ ‫كتابة‬ ‫أو‬ ‫كـ‬ ‫بالخلفية‬ ‫كخدمة‬ ‫تعمل‬ ‫الموسيقية‬ ‫فإن‬ ‫الحالة‬ ‫ھذه‬)Service(. ‫المحتوى‬ ‫تبادل‬ ‫و‬ ‫تزويد‬)Content Provider( ‫أو‬ ‫ويب‬ ‫تطبيق‬ ‫عبر‬ ‫مثال‬ ‫خارجي‬ ‫محتوى‬ ‫أي‬ ‫مناداة‬ ‫ذلك‬ ‫عبر‬ ‫يمكنك‬ ‫مبادلة‬ ‫في‬ ‫حتى‬‫أن‬ ‫يمكنك‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬ ‫التطبيقات‬ ‫بين‬ ‫المحتوى‬ ‫تطبيق‬ ‫في‬ ‫االتصال‬ ‫عناوين‬ ‫لقائمة‬ ‫تصل‬)Contacts(. ‫النشاط‬ ‫أشكال‬)Activity( ‫نافذة‬ ‫عن‬ ‫عبارة‬ ‫يكون‬)Window(‫أو‬ ‫صغيرة‬ ‫فتكون‬ ‫فقد‬ ‫متعددة‬ ‫وضعيات‬ ‫بأربع‬ ‫تتعامل‬ ‫فإنھا‬ ‫عليھا‬ ‫الكائنات‬ ‫لتوضع‬ ‫و‬ ‫الشاشة‬ ‫مليء‬ ‫مختلفة‬ ‫س‬ ‫بشكل‬ ‫عرض‬‫طري‬)Linear Layout( ‫بأسف‬ ‫يقع‬ ‫عنصر‬ ‫كل‬ ‫أي‬ ‫سطري‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬‫ل‬‫العنصر‬ ‫يليه‬ ‫الذي‬،‫المختار‬ ‫الوضع‬ ‫بحسب‬ ‫بمحاذاته‬ ‫أو‬)vertical or horizontal.(
  • 14. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 14 ‫نموذج‬ ‫بشكل‬)Frame Layout( ‫باليسار‬ ‫العليا‬ ‫الجھة‬ ‫من‬ ‫ابتداء‬ ‫متتالي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬. ‫عالئقي‬ ‫بشكل‬)Relative Layout( ‫بعد‬ ‫زر‬ ‫تضع‬ ‫أن‬ ‫مثال‬ ‫أي‬ ‫بينھا‬ ‫فيما‬ ‫عالئقي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬ ‫بين‬ ‫ما‬ ‫مساحة‬ ‫لتملئ‬ ‫أو‬ ‫الفالني‬ ‫العنصر‬ ‫قبل‬ ‫و‬ ‫الفالني‬ ‫العنصر‬ ‫عنصر‬)A(‫عنصر‬ ‫و‬)B(. ‫جدولي‬ ‫بشكل‬)Table Layout( ‫خلية‬ ‫داخل‬ ‫كائن‬ ‫كل‬ ‫وضع‬ ‫يمكن‬ ‫حيث‬ ‫جدولي‬ ‫بشكل‬ ‫الكائنات‬ ‫تعرض‬ ‫في‬ ‫الجداول‬ ‫تصميم‬ ‫في‬ ‫الحال‬ ‫كما‬)HTML(.
  • 15. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 15 ‫قاموس‬‫المصطلحات‬ ‫و‬ ‫االختصارات‬ ‫و‬ ‫المسميات‬ ‫بعض‬ ‫على‬ ‫نتعرف‬ ‫سوف‬ ‫القسم‬ ‫ھذا‬ ‫في‬ ‫لكي‬ ‫ھنا‬ ‫بتعريفھا‬ ‫لنقوم‬ ‫و‬ ‫الكتاب‬ ‫في‬ ‫علينا‬ ‫ستمر‬ ‫التي‬ ‫المصطلحات‬ ‫نحتاج‬ ‫ال‬ ‫لكي‬ ‫الكتاب‬ ‫أقسام‬ ‫باقي‬ ‫شرح‬ ‫أثناء‬ ‫قدما‬ ‫المضي‬ ‫نستطيع‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫تعريفھا‬ ‫إلى‬‫بذكرھا‬ ‫نقوم‬ SDK (Software Development Kit) ‫المجموعات‬ ‫تحوي‬ ‫والتي‬ ‫البرمجية‬ ‫التطويرية‬ ‫الحزمة‬‫كالسات‬ ‫األندرويد‬ ‫تطبيقات‬ ‫تطوير‬ ‫في‬ ‫استخدامھا‬ ‫يمكن‬ ‫التي‬ ‫والدوال‬. NDA (Native Development Kit) ‫األصلي‬ ‫بالكود‬ ‫التطوير‬ ‫حزمة‬ ADT (Android Development Tools) ‫أندرويد‬ ‫تطوير‬ ‫أدوات‬ JDK (Java Development Kit) ‫جافا‬ ‫تطوير‬ ‫أدوات‬ JRE (Java Runtime Environment) ‫جافا‬ ‫تشغيل‬ ‫بيئة‬ JVM (Java Virtual Machine) ‫آلة‬‫االفتراضية‬ ‫جافا‬ AVD (Android Virtual Device) ‫جھاز‬ ‫محاكي‬‫أندرويد‬ AVDM (Android Virtual Device Manager) ‫أندرويد‬ ‫أجھزة‬ ‫محاكي‬ ‫مدير‬ APK (Android Package) ‫للتطبيق‬ ‫النھائي‬ ‫التنفيذي‬ ‫الملف‬ ‫ھو‬ ‫و‬ ‫أندرويد‬ ‫حزمة‬
  • 16. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 16 DDMS (Dalvik Debug Monitor Server) ‫الجھاز‬ ‫محاكي‬ ‫مراقبة‬ ‫أداة‬ GPS (Global Position System) ‫عبر‬ ‫العالمي‬ ‫التوضع‬ ‫نظام‬‫األقمار‬‫الصناعية‬ CMD (Command Line) ‫سطر‬‫األوامر‬ ADB (Android Debug Bridge) ‫ج‬‫لمراقبة‬ ‫أندرويد‬ ‫أجھزة‬ ‫مع‬ ‫التواصل‬ ‫سر‬‫األداء‬‫معالجة‬ ‫و‬‫األخطاء‬
  • 17. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 17 ‫تر‬‫التطوير‬ ‫بيئة‬ ‫كيب‬ ‫مھما‬ ‫نقطة‬ ‫أي‬ ‫إغفال‬ ‫عدم‬ ‫اإلمكان‬ ‫قدر‬ ‫سأحاول‬ ‫التركيب‬ ‫عملية‬ ‫في‬ ‫البساطة‬ ‫حول‬ ‫يدور‬ ‫فكتابنا‬ ‫بالصور‬ ‫بتوثيقھا‬ ‫سأقوم‬ ‫و‬ ‫صغيرة‬ ‫كانت‬ ‫حج‬ ‫صغيرة‬ ‫خطوة‬ ‫تقف‬ ‫ال‬ ‫لكي‬ ‫اإلمكان‬ ‫قد‬ ‫شيء‬ ‫كل‬ ‫تبسيط‬ ‫ھي‬ ‫و‬‫ر‬ ‫التطبيقات‬ ‫تطوير‬ ‫لتعلم‬ ‫طريقنا‬ ‫في‬ ‫عثرة‬.
  • 18. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 18 ‫الخطوة‬‫األولى‬)Java SE( ‫حزمة‬ ‫إلى‬ ‫نحتاج‬ ‫البداية‬ ‫في‬)Java SE(‫إلى‬ ‫اختصارا‬)Java Standard Edition(‫تحديدا‬ ‫و‬)JDK 6(‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫من‬ ‫كل‬)JDK(‫إلى‬ ‫اختصارا‬(Java Development Kit(‫و‬ )JRE(‫إلى‬ ‫اختصارا‬)Java Runtime Environment(‫ال‬ ‫و‬ ‫بوجود‬ ‫يكتفي‬)JRE(‫بتحميل‬ ‫قم‬ ‫ولذا‬ ‫فقط‬)JDK(‫التي‬ ‫و‬ ‫كاملة‬ ‫معا‬ ‫االثنين‬ ‫على‬ ‫تحتوي‬‫االنترنت‬ ‫موقع‬ ‫من‬ ‫تحميلھا‬ ‫يمكن‬ ‫التي‬ ‫و‬: http://java.sun.com/javase/downloads/index.jsp ‫الص‬ ‫فتح‬ ‫بعد‬‫ضمن‬ ‫مبين‬ ‫ھو‬ ‫كما‬ ‫اختر‬ ‫خيارات‬ ‫عدة‬ ‫لك‬ ‫ستظھر‬ ‫فحة‬ ‫اإلطار‬: ‫حالتنا‬ ‫في‬ ‫كما‬ ‫بك‬ ‫الخاص‬ ‫التشغيل‬ ‫نظام‬ ‫بتحديد‬ ‫قم‬ ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫تشغيل‬ ‫نظام‬ ‫ھو‬ ‫ھذه‬)Windows(
  • 19. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 19 ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫بتجاھل‬ ‫قم‬ ‫التسجيل‬ ‫منك‬ ‫تطلب‬ ‫شاشة‬ ‫ظھور‬ ‫عند‬ ‫على‬ ‫الضغط‬)Skip(‫التالي‬ ‫القوس‬ ‫في‬ ‫موضح‬ ‫ھو‬ ‫كما‬ ‫ب‬‫استخدام‬ ‫في‬ ‫الموقع‬ ‫سيخيرك‬ ‫ذلك‬ ‫عد‬)Sun Download Manager(‫حدث‬ ‫حال‬ ‫في‬ ‫التحميل‬ ‫إكمال‬ ‫في‬ ‫يساعدك‬ ‫الذي‬ ‫و‬
  • 20. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 20 ‫ھو‬ ‫كما‬ ‫الوصلة‬ ‫من‬ ‫مباشرة‬ ‫الملف‬ ‫تحميل‬ ‫يمكنك‬ ‫كما‬ ‫و‬ ‫انقطاع‬ ‫التالية‬ ‫الصورة‬ ‫في‬ ‫موضح‬ ‫الملف‬ ‫تحميل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬ ‫ذلك‬ ‫بعد‬ ‫حفظ‬ ‫زر‬ ‫على‬ ‫اضغط‬)Save(‫لك‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬‫و‬ ‫التالية‬ ‫الشاشة‬ ‫جھازك‬ ‫على‬ ‫محدد‬ ‫مكان‬ ‫في‬ ‫الملف‬ ‫حفظ‬ ‫من‬ ‫تمكنك‬ ‫التي‬
  • 21. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 21 ‫يمكنك‬ ‫الحقا‬ ‫و‬ ‫الحال‬ ‫الوقت‬ ‫في‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫الملف‬ ‫بحفظ‬ ‫قم‬ ‫عملية‬ ‫ستبدأ‬ ‫الملف‬ ‫حفظ‬ ‫بعد‬ ‫و‬ ‫أمن‬ ‫مكان‬ ‫في‬ ‫منه‬ ‫بنسخة‬ ‫االحتفاظ‬ ‫االنترنت‬ ‫سرعة‬ ‫على‬ ‫بناء‬ ‫الوقت‬ ‫بعد‬ ‫تستغرق‬ ‫قد‬ ‫التي‬ ‫و‬ ‫التحميل‬ ‫لديك‬ ‫حجم‬‫تقريبا‬ ‫الملف‬)70(‫بايت‬ ‫ميجا‬،‫سطح‬ ‫على‬ ‫أيقونته‬ ‫ستجد‬ ‫التالي‬ ‫بالشكل‬ ‫المكتب‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫اإلعداد‬ ‫برنامج‬ ‫لتشغيل‬ ‫الملف‬ ‫على‬ ‫مرتين‬ ‫بالنقر‬ ‫قم‬ ‫قبول‬ ‫على‬ ‫اضغط‬ ‫بھذه‬ ‫شبيھة‬)Accept(
  • 22. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 22 ‫تود‬ ‫التي‬ ‫المكونات‬ ‫عن‬ ‫اإلعداد‬ ‫برنامج‬ ‫سيسألك‬ ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫بتغيير‬ ‫تقم‬ ‫ال‬ ‫تحميلھا‬‫التالي‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫و‬ ‫شيء‬)Next( ‫اإلعداد‬ ‫لعملية‬ ‫تمھيدا‬ ‫الجھاز‬ ‫على‬ ‫نفسه‬ ‫بفك‬ ‫البرنامج‬ ‫سيبدأ‬
  • 23. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 23 ‫الھدف‬ ‫المجلد‬ ‫بتغيير‬ ‫فيھا‬ ‫تخيرك‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫قليلة‬ ‫دقائق‬ ‫بعد‬ ‫التالي‬ ‫زر‬ ‫اختر‬ ‫و‬ ‫شيء‬ ‫بتغيير‬ ‫تقم‬ ‫ال‬ ‫للبرنامج‬)Next( ‫نفسه‬ ‫إعداد‬ ‫في‬ ‫البرنامج‬ ‫يبدأ‬ ‫الخطوة‬ ‫ھذه‬ ‫في‬‫الجھاز‬ ‫على‬
  • 24. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 24 ‫و‬ ‫اإلعداد‬ ‫عملية‬ ‫في‬ ‫بنجاحه‬ ‫اإلعداد‬ ‫برنامج‬ ‫سيخبرك‬ ‫االنتھاء‬ ‫بعد‬ ‫إنھاء‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬)Finish(‫اإلعداد‬ ‫برنامج‬ ‫منك‬ ‫يطلب‬ ‫قد‬ ‫الجھاز‬ ‫تشغيل‬ ‫أعد‬ ‫و‬ ‫بذلك‬ ‫فقم‬ ‫الجھاز‬ ‫تشغيل‬ ‫إعادة‬ ‫ضرورة‬ ‫لبريمجات‬ ‫النظام‬ ‫دعم‬ ‫ھي‬ ‫و‬ ‫أال‬ ‫األولى‬ ‫بالخطوة‬ ‫قمنا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬ ‫جافا‬
  • 25. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 25 ‫الثانية‬ ‫الخطوة‬)Android SDK( ‫بأندرويد‬ ‫الخاصة‬ ‫التطبيقات‬ ‫مطوري‬ ‫حزمة‬ ‫تحميل‬)Android SDK( ‫االنترنت‬ ‫على‬ ‫التالي‬ ‫العنوان‬ ‫إلى‬ ‫اذھب‬ http://developer.android.com/sdk/index.html ‫المخ‬ ‫الموقع‬ ‫ھو‬ ‫و‬‫اآلن‬ ‫قم‬ ‫جوجل‬ ‫من‬ ‫أندرويد‬ ‫لمطوري‬ ‫صص‬ ‫نظام‬ ‫نوع‬ ‫على‬ ‫بناء‬ ‫أمامك‬ ‫مبين‬ ‫ھو‬ ‫كما‬ ‫المطورين‬ ‫حزمة‬ ‫بتحميل‬ ‫سنختار‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫بك‬ ‫الخاص‬ ‫التشغيل‬)Windows(،‫بعد‬ ‫و‬ ‫االستخدام‬ ‫اتفاقية‬ ‫صفحة‬ ‫إلى‬ ‫بتحويلنا‬ ‫سيقوم‬ ‫ذلك‬
  • 26. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 26 ‫المستخدم‬ ‫اتفاقية‬ ‫على‬ ‫الموافقة‬ ‫اختر‬ ‫و‬ ‫الصفحة‬ ‫أخر‬ ‫إلى‬ ‫انزل‬‫إن‬ ‫أردت‬-( :–‫تحميل‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫و‬)Download(‫عندھا‬ ‫و‬ ‫فيھا‬ ‫اضغط‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫البرنامج‬ ‫تحميل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬ ‫حفظ‬ ‫زر‬ ‫على‬)Save( ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫الملف‬ ‫حفظ‬ ‫اختيار‬ ‫شاشة‬ ‫ذلك‬ ‫بعد‬ ‫لك‬ ‫لتظھر‬
  • 27. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 27 ‫حفظ‬ ‫زر‬ ‫على‬ ‫انقر‬ ‫ثم‬ ‫المكتب‬ ‫سطح‬ ‫لتكن‬ ‫و‬ ‫الحفظ‬ ‫وجھة‬ ‫بتحديد‬ ‫قم‬ )Save(‫جھازك‬ ‫على‬ ‫البرنامج‬ ‫تحميل‬ ‫عملية‬ ‫ستبدأ‬ ‫عندھا‬ ‫و‬ ‫تقريبا‬ ‫البرنامج‬ ‫حجم‬)22(‫ملف‬ ‫لك‬ ‫سيظھر‬ ‫االنتھاء‬ ‫بعد‬ ‫و‬ ‫ميجابايت‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫مضغوط‬ ‫مثل‬ ‫الضغط‬ ‫فك‬ ‫برامج‬ ‫باستخدام‬ ‫الملف‬ ‫ضغط‬ ‫فك‬ ‫يمكنك‬ )WinZip(‫ا‬ ‫فمجرد‬ ‫تملكه‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫و‬ ‫تملكه‬ ‫كنت‬ ‫إن‬‫لضغط‬ ‫التشغيل‬ ‫نظام‬ ‫فإن‬ ‫عليه‬)Windows(‫سيفتح‬ ‫و‬ ‫الخاصية‬ ‫ھذه‬ ‫يدعم‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المضغوط‬ ‫الملف‬ ‫محتويات‬ ‫به‬ ‫مجلد‬
  • 28. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 28 ‫و‬ ‫السحب‬ ‫طريق‬ ‫عن‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫المجلد‬ ‫بسحب‬ ‫قم‬ ‫اآلن‬ ‫اختيار‬ ‫و‬ ‫عليه‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫الفأرة‬ ‫بزر‬ ‫اإلفالت‬ ‫نسخ‬)Copy(‫ا‬ ‫سطح‬ ‫إلى‬ ‫أذھب‬ ‫ثم‬‫زر‬ ‫قائمة‬ ‫من‬ ‫اختر‬ ‫و‬ ‫لمكتب‬ ‫لصق‬ ‫األيمن‬ ‫الفأرة‬)Paste(‫كما‬ ‫الضغط‬ ‫فك‬ ‫عملية‬ ‫ستبدأ‬ ‫عندھا‬ ‫و‬ ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫سطح‬ ‫على‬ ‫جديد‬ ‫مجلد‬ ‫ستجد‬ ‫الضغط‬ ‫فك‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬ ‫الملف‬ ‫باسم‬ ‫المكتب‬)android-sdk-windows(‫بالضغط‬ ‫قم‬ ‫محتوياته‬ ‫لك‬ ‫ليظھر‬ ‫لفتحه‬ ‫المجلد‬ ‫على‬ ‫المضاعف‬
  • 29. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 29 ‫التنفيذي‬ ‫الملف‬ ‫بتشغيل‬ ‫قم‬)SDK Setup(‫تحميل‬ ‫عملية‬ ‫في‬ ‫لتبدأ‬ ‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫ستظھر‬ ‫و‬ ‫أندرويد‬ ‫موقع‬ ‫من‬ ‫اإلعداد‬ ‫ملفات‬ ‫أخر‬ ‫أثناء‬ ‫خطاء‬ ‫عملية‬ ‫وجود‬ ‫الشاشة‬ ‫تظھر‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫ترى‬ ‫كما‬ ‫عبر‬ ‫التخاطب‬ ‫من‬ ‫اإلعداد‬ ‫برنامج‬ ‫تمكن‬ ‫لعدم‬ ‫ذلك‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫بروتوكول‬)https(‫على‬ ‫يكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫الشاشة‬ ‫لك‬ ‫تظھر‬ ‫ال‬ ‫قد‬ ‫و‬
  • 30. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 30 ‫في‬ ‫حاولوا‬ ‫ممن‬ ‫الكثيرين‬ ‫لكن‬ ‫و‬ ‫مخصصة‬ ‫أمان‬ ‫إعدادات‬ ‫أي‬ ‫جھازك‬ ‫طريقة‬ ‫بشرح‬ ‫سنقوم‬ ‫لذا‬ ‫و‬ ‫المشكلة‬ ‫ھذه‬ ‫واجھوا‬ ‫التحميل‬ ‫عملية‬ ‫تواجھك‬ ‫لم‬ ‫حال‬ ‫في‬ ‫التي‬ ‫و‬ ‫تليھا‬ ‫التي‬ ‫للخطوة‬ ‫ننتقل‬ ‫ثم‬ ‫من‬ ‫و‬ ‫حلھا‬ ‫ل‬ ‫تظھر‬ ‫أن‬ ‫المفروض‬ ‫من‬ ‫البداية‬ ‫منذ‬ ‫مشاكل‬ ‫أي‬‫ك‬ ‫إغالق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫اآلن‬)Close(‫مثل‬ ‫أخرى‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫ھذه‬ ‫إلغاء‬ ‫زر‬ ‫علة‬ ‫بالضغط‬ ‫قم‬)Cancel(‫الرئيسية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬ ‫االختيار‬ ‫إلى‬ ‫اذھب‬ ‫عندھا‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫اإلعداد‬ ‫لبرنامج‬ ‫إعدادات‬)Settings(‫بالتالية‬ ‫شبيه‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
  • 31. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 31 ‫الخيار‬ ‫زر‬ ‫باختيار‬ ‫قم‬ ‫اآلن‬)Force Https(‫العمل‬ ‫عن‬ ‫ليتغاضى‬ ‫بروتوكول‬ ‫ضمن‬)Https(‫إعدادات‬ ‫تستخدم‬ ‫كنت‬ ‫حال‬ ‫في‬ ‫و‬ ‫في‬ ‫الفارغة‬ ‫المربعات‬ ‫في‬ ‫بكتابتھا‬ ‫قم‬ ‫جھازك‬ ‫على‬ ‫خاصة‬ ‫بروكسي‬ ‫يعلوه‬ ‫الذي‬ ‫الخيار‬ ‫اذھب‬ ‫الشاشة‬ ‫نفس‬ ‫من‬ ‫و‬ ‫ثم‬ ‫األعلى‬ )Available Packages(‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫الشجر‬ ‫فرد‬ ‫عند‬ ‫و‬‫أندرويد‬ ‫حول‬ ‫المتوفرة‬ ‫و‬ ‫األنظمة‬ ‫كل‬ ‫لك‬ ‫ستظھر‬ ‫ة‬ ‫فقط‬ ‫تقوم‬ ‫أو‬ ‫معلمة‬ ‫جميعا‬ ‫عليھا‬ ‫اإلبقاء‬ ‫يمكنك‬ ‫لحالتنا‬ ‫بالنسبة‬ ‫و‬ ‫بتحديد‬)1.6(‫الكتاب‬ ‫ھذا‬ ‫في‬ ‫أمثلتنا‬ ‫حوله‬ ‫ستكون‬ ‫يوف‬ ‫الذي‬ ‫و‬
  • 32. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 32 ‫اخترنا‬ ‫لماذا‬ ‫البعض‬ ‫يتساءل‬ ‫قد‬)1.6(‫نظام‬ ‫أحدث‬ ‫نختر‬ ‫لم‬ ‫و‬)2.1(‫؟‬ ‫قرابة‬ ‫أن‬ ‫ھو‬ ‫ببساطة‬ ‫السبب‬ ‫و‬)50(%‫في‬ ‫المتوفرة‬ ‫األجھزة‬ ‫من‬ ‫بنظام‬ ‫تعمل‬ ‫األسواق‬)1.6(.‫في‬ ‫تتوفر‬ ‫لم‬ ‫األحدث‬ ‫النسخ‬ ‫أن‬ ‫كما‬ ‫تلقائي‬ ‫بشكل‬ ‫يدعم‬ ‫أندرويد‬ ‫فإن‬ ‫ذلك‬ ‫من‬ ‫األھم‬ ‫و‬ ‫بعد‬ ‫العربية‬ ‫أسواقنا‬ ‫سابق‬ ‫نظام‬ ‫على‬ ‫صممت‬ ‫التي‬ ‫التطبيقات‬ ‫األحدث‬ ‫تشغيله‬ ‫نظم‬ ‫في‬.‫كما‬ ‫موجھة‬ ‫األسواق‬ ‫في‬ ‫المتوفرة‬ ‫التطبيقات‬ ‫أكثر‬ ‫أن‬‫في‬ ‫و‬ ‫النظام‬ ‫لھذا‬ ‫نظام‬ ‫على‬ ‫جھاز‬ ‫تملك‬ ‫و‬ ‫مثلي‬ ‫كنت‬ ‫حال‬)1.5(‫في‬ ‫المتوفر‬ ‫ھو‬ ‫و‬ ‫و‬ ‫مشاكل‬ ‫أي‬ ‫بدون‬ ‫أيضا‬ ‫عليه‬ ‫سيعمل‬ ‫تطبيقك‬ ‫فإن‬ ‫العربية‬ ‫األسواق‬ ‫كل‬ ‫أن‬ ‫حيث‬ ‫بھذا‬ ‫االكتفاء‬ ‫أو‬ ‫جميعا‬ ‫تحميلھا‬ ‫في‬ ‫الخيار‬ ‫لك‬ ‫بالنھاية‬ ‫يمكنك‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫في‬ ‫طويل‬ ‫وقت‬ ‫إلى‬ ‫تحتاج‬ ‫ھذه‬ ‫من‬ ‫عنصر‬ ‫أي‬ ‫في‬‫السابقة‬ ‫الخطوات‬ ‫نفس‬ ‫بإتباع‬ ‫تحميلھا‬ ‫و‬ ‫العودة‬ ‫وقت‬. ‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫التحميل‬ ‫ھدف‬ ‫العناصر‬ ‫اختيار‬ ‫بعد‬ ‫و‬ ‫اآلن‬ )Install Selected(‫لك‬ ‫لتظھر‬ ‫الشاشة‬ ‫يمين‬ ‫أسفل‬ ‫في‬ ‫الموجود‬ ‫و‬ ‫االستخدام‬ ‫اتفاقية‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫بالتالية‬ ‫شبيھة‬ ‫جديدة‬ ‫شاشة‬
  • 33. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 33 ‫اختيار‬ ‫عبر‬ ‫بالموافقة‬ ‫قم‬)Accept All(‫مرة‬ ‫الجميع‬ ‫على‬ ‫للموافقة‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫واحدة‬)Install(‫شبيه‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫بالتالية‬ ‫قم‬ ‫الوقت‬ ‫بعض‬ ‫تأخذ‬ ‫قد‬ ‫التي‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬ ‫و‬ ‫التطوير‬ ‫حزمة‬ ‫تحميل‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬ ‫النافذة‬ ‫بإغالق‬ ‫الثالثة‬ ‫الخطوة‬ ‫إلى‬ ‫لننتقل‬..
  • 34. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 34 ‫ا‬ ‫الخطوة‬‫لثالثة‬)Eclipse( ‫التطوير‬ ‫بيئة‬)Eclipse(‫كانت‬ ‫االستخدام‬ ‫متعددة‬ ‫تطوير‬ ‫بيئة‬ ‫ھي‬ ‫شركة‬ ‫ملك‬)IBM(‫بشكل‬ ‫بتوفيرھا‬ ‫سنوات‬ ‫بضع‬ ‫منذ‬ ‫قامت‬ ‫ثم‬ ‫من‬ ‫و‬ ‫يعملون‬ ‫المبرمجين‬ ‫أشھر‬ ‫أن‬ ‫تجد‬ ‫لذا‬ ‫و‬ ‫المصدر‬ ‫مفتوح‬ ‫و‬ ‫مجاني‬ ‫اإلضافات‬ ‫تركيب‬ ‫عبر‬ ‫منصات‬ ‫عدة‬ ‫تدعم‬ ‫إذ‬ ‫تطبيقاتھم‬ ‫لتطوير‬ ‫عليھا‬ ‫الخاصة‬‫التطوير‬ ‫بيئة‬ ‫نفس‬ ‫طريق‬ ‫عن‬ ‫منصة‬ ‫بكل‬. ‫التالية‬ ‫الوصلة‬ ‫على‬ ‫البرنامج‬ ‫موقع‬ ‫بزيارة‬ ‫قم‬ ‫البداية‬ ‫في‬: e.org/downloadsEclipsehttp://www. ‫ال‬ ‫التطبيق‬ ‫من‬ ‫إصدارات‬ ‫عدة‬ ‫ستجد‬ ‫أمامك‬ ‫الظاھرة‬ ‫الصفحة‬ ‫في‬ ‫أ‬ ‫إلى‬ ‫اذھب‬ ‫و‬ ‫باالرتباك‬ ‫تشعر‬‫النسخة‬ ‫بتحميل‬ ‫لنقوم‬ ‫الصفحة‬ ‫خر‬ ‫نحتاج‬ ‫ما‬ ‫كل‬ ‫ھي‬ ‫و‬ ‫فقط‬ ‫األساسية‬)Eclipse Classic 3.5.2( ‫التالية‬ ‫الصفحة‬ ‫إلى‬ ‫لتأخذك‬ ‫عليھا‬ ‫بالضغط‬ ‫قم‬
  • 35. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 35 ‫طريق‬ ‫عن‬ ‫إما‬ ‫التحميل‬ ‫طريقة‬ ‫اختيار‬ ‫يمكن‬ ‫الصفحة‬ ‫ھذه‬ ‫طريق‬ ‫عن‬ ‫بروتوكول‬)Torrent(‫الخوادم‬ ‫أحد‬ ‫طريق‬ ‫عن‬ ‫مباشر‬ ‫بشكل‬ ‫أو‬ ‫ال‬ ‫توفر‬ ‫التي‬‫تطبيق‬،‫استخدام‬ ‫دائما‬ ‫أفضل‬ ‫لكني‬ ‫و‬ ‫ذلك‬ ‫في‬ ‫الخيار‬ ‫لك‬ ‫ھو‬ ‫كما‬ ‫أخرى‬ ‫تطبيقات‬ ‫أي‬ ‫إلى‬ ‫حاجتھا‬ ‫لعدم‬ ‫المباشرة‬ ‫الوصالت‬ ‫الصورة‬ ‫في‬ ‫المربع‬ ‫في‬ ‫موضح‬. ‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬ ‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫اختياره‬ ‫بعد‬ ‫حفظ‬ ‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬)Save(‫قم‬ ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫ثم‬ ‫من‬ ‫و‬ ‫ب‬‫المكتب‬ ‫سطح‬ ‫ليكن‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫الحفظ‬ ‫ھدف‬ ‫تحديد‬
  • 36. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 36 ‫الحفظ‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫بعد‬)Save(‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬ ‫و‬ ‫لديھم‬ ‫االنترنت‬ ‫سرعة‬ ‫على‬ ‫بناء‬ ‫الوقت‬ ‫بعض‬ ‫العملية‬ ‫منك‬ ‫تأخذ‬ ‫قد‬ ‫باسم‬ ‫مضغوط‬ ‫ملف‬ ‫ستجد‬ ‫انتھائھا‬ ‫عند‬)Eclipsee-SDK-3.5.2- win32(‫سط‬ ‫على‬‫التالية‬ ‫الصورة‬ ‫في‬ ‫كما‬ ‫المكتب‬ ‫ح‬
  • 37. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 37 ‫قرابة‬ ‫البرنامج‬ ‫حجم‬)163(‫برنامج‬ ‫تملك‬ ‫كنت‬ ‫حال‬ ‫في‬ ‫و‬ ‫ميجابايت‬ ‫مثل‬ ‫الضغط‬ ‫لفك‬)Win Zip(‫سطح‬ ‫على‬ ‫البرنامج‬ ‫فك‬ ‫فيمكنك‬ ‫التشغيل‬ ‫نظام‬ ‫ليقوم‬ ‫عليه‬ ‫المضاعف‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫مباشرة‬ ‫المكتب‬ )Windows(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫بفتحه‬: ‫بسح‬ ‫اآلن‬ ‫قم‬‫و‬ ‫السحب‬ ‫خاصية‬ ‫عبر‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫المجلد‬ ‫ب‬ ‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫قم‬ ‫أو‬ ‫بالفأرة‬ ‫اإلفالت‬ ‫نسخ‬ ‫خيار‬)Copy(‫بزر‬ ‫قم‬ ‫و‬ ‫المكتب‬ ‫سطح‬ ‫إلى‬ ‫اذھب‬ ‫ثم‬ ‫ومن‬ ‫خيار‬ ‫باختيار‬ ‫األيمن‬ ‫الفأرة‬)Paste(‫الملف‬ ‫ضغط‬ ‫فك‬ ‫عملية‬ ‫لتبدأ‬: ‫ال‬ ‫سطح‬ ‫على‬ ‫مجلد‬ ‫ستجد‬ ‫الخطوة‬ ‫ھذه‬ ‫بعد‬‫باسم‬ ‫لديك‬ ‫مكتب‬ )Eclipse(‫محتوياته‬ ‫لديك‬ ‫ليفتح‬ ‫عليه‬ ‫المضاعف‬ ‫بالضغط‬ ‫قم‬
  • 38. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 38 ‫من‬ ‫أنھا‬ ‫إذ‬ ‫التطوير‬ ‫بيئة‬ ‫تنصيب‬ ‫عملية‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫وبھذا‬ ‫على‬ ‫إعداد‬ ‫عملية‬ ‫إلى‬ ‫تحتاج‬ ‫ال‬ ‫التي‬ ‫و‬ ‫المحمولة‬ ‫التطبيقات‬ ‫نوعية‬ ‫مباشرة‬ ‫التنفيذي‬ ‫البرنامج‬ ‫تشغيل‬ ‫طريق‬ ‫عن‬ ‫مباشرة‬ ‫تعمل‬ ‫و‬ ‫الجھاز‬ ‫بھذ‬‫تليھا‬ ‫التي‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫الثالثة‬ ‫الخطوة‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫ا‬
  • 39. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 39 ‫الرابعة‬ ‫الخطوة‬)ADT( ‫إضافة‬ ‫تحميل‬)ADT(‫أندرويد‬ ‫لتطبيقات‬ ‫الموجھة‬ ‫التطوير‬ ‫لدعم‬ ‫على‬)Eclipse( ‫برنامج‬ ‫بتشغيل‬ ‫قم‬ ‫السابقة‬ ‫الخطوة‬ ‫انتھاء‬ ‫بعد‬)Eclipse(‫لك‬ ‫لتظھر‬ ‫مرة‬ ‫ألول‬ ‫التالية‬ ‫الشاشة‬ ‫ا‬ ‫وھذه‬‫يتم‬ ‫التي‬ ‫و‬ ‫بك‬ ‫الخاصة‬ ‫العمل‬ ‫مساحة‬ ‫فيھا‬ ‫تحدد‬ ‫التي‬ ‫لشاشة‬ ‫اختيار‬ ‫أو‬ ‫لحقا‬ ‫مكانھا‬ ‫تغيير‬ ‫يمكنك‬ ‫و‬ ‫فيھا‬ ‫مشاريعك‬ ‫ملفات‬ ‫تخزين‬ ‫خيار‬)Use this as default and do not ask again(‫و‬ ‫بتشغيل‬ ‫فيھا‬ ‫تقوم‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫لك‬ ‫تظھر‬ ‫ال‬ ‫لكي‬ ‫اختيارك‬ ‫تحفظ‬ ‫التي‬ ‫التطوير‬ ‫بيئة‬ ‫زر‬ ‫على‬ ‫اآلن‬ ‫اضغط‬‫موافق‬)OK(‫من‬ ‫األولى‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬ ‫بالتالية‬ ‫والشبيھة‬ ‫التطوير‬ ‫برنامج‬
  • 40. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 40 ‫الترحيب‬ ‫تبويب‬ ‫لسان‬ ‫تجد‬ ‫الشاشة‬ ‫يسار‬ ‫أعلى‬ ‫في‬)welcome(‫قم‬ ‫زر‬ ‫بضغط‬)X(‫الشكل‬ ‫كما‬ ‫التطوير‬ ‫بيئة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫إلغالقه‬ ‫التالي‬
  • 41. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 41 ‫إضافة‬ ‫بتحميل‬ ‫لنقوم‬ ‫اآلن‬)ADT(‫القائمة‬ ‫بالذھاب‬ ‫قم‬)Help(‫و‬ ‫خيار‬ ‫باختيار‬ ‫قم‬ ‫منھا‬)Install New Software(‫موضح‬ ‫ھو‬ ‫كما‬ ‫التالية‬ ‫بالصورة‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫تظھر‬ ‫سوف‬ ‫الخيار‬ ‫لھذا‬ ‫اختيارك‬ ‫بعد‬ ‫التالية‬
  • 42. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 42 ‫زر‬ ‫علة‬ ‫بالضغط‬ ‫قم‬)Add(‫لك‬ ‫لتظھر‬ ‫التطبيق‬ ‫عنوان‬ ‫إلضافة‬ ‫التالية‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫بكتابة‬ ‫قم‬)Android(‫اال‬ ‫مربع‬ ‫في‬‫سم‬)Name(‫بكتابة‬ ‫قم‬ ‫و‬ ‫مربع‬ ‫في‬ ‫التالي‬ ‫العنوان‬)Location( eEclipsessl.google.com/android/-https://dl/ ‫موافق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫ومن‬)OK(‫سيقوم‬ ‫معدودة‬ ‫دقائق‬ ‫بعد‬ ‫و‬ ‫المل‬ ‫عن‬ ‫للبحث‬ ‫باالنترنت‬ ‫باالتصال‬ ‫البرنامج‬‫بالتطبيق‬ ‫الخاصة‬ ‫فات‬ ‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
  • 43. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 43 ‫حرف‬ ‫بإزالة‬ ‫قم‬ ‫الشاشة‬ ‫ھذه‬ ‫لك‬ ‫تظھر‬ ‫لم‬ ‫حال‬ ‫في‬)S(‫عنوان‬ ‫من‬ ‫من‬ ‫لتصبح‬ ‫الوصلة‬)https(‫إلى‬)http(‫ھي‬ ‫كما‬ ‫الوصلة‬ ‫باقي‬ ‫ثم‬ ‫السابقة‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫بالتأكيد‬ ‫عندھا‬ ‫و‬
  • 44. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 44 ‫ع‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫العناصر‬ ‫كل‬ ‫بتعليم‬ ‫قم‬‫التالي‬ ‫زر‬ ‫لى‬)Next(‫لتظھر‬ ‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫الصورة‬ ‫كما‬ ‫المستخدم‬ ‫اتفاقية‬ ‫شاشة‬ ‫لتظھر‬ ‫التالي‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫التالية‬
  • 45. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 45 ‫خيار‬ ‫اختيار‬ ‫عبر‬ ‫المستخدم‬ ‫اتفاقية‬ ‫على‬ ‫بالموافقة‬ ‫قم‬)I accept(‫و‬ ‫إنھاء‬ ‫زر‬ ‫اختر‬ ‫ثم‬ ‫من‬)Finish(‫كما‬ ‫التحميل‬ ‫بدء‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫التالية‬ ‫الصورة‬ ‫تحذير‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫االنترنت‬ ‫عبر‬ ‫التحميل‬ ‫من‬ ‫انتھائه‬ ‫بعد‬ ‫و‬ ‫قم‬ ‫جھازك‬ ‫على‬ ‫التنصيب‬ ‫تود‬ ‫التي‬ ‫التطبيقات‬ ‫من‬ ‫المزيد‬ ‫ھناك‬ ‫بأن‬ ‫موافق‬ ‫زر‬ ‫على‬ ‫بالضغط‬ ‫تخبرك‬ ‫أخرى‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫التنصيب‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬ ‫ثم‬ ‫التطوير‬ ‫بيئة‬ ‫تطبيق‬ ‫تشغيل‬ ‫إعادة‬ ‫إلى‬ ‫بحاجة‬ ‫بأنك‬)Eclipse( ‫موافق‬ ‫زر‬ ‫على‬ ‫فاضغط‬ ‫نافذة‬ ‫الجديدة‬ ‫اإلعدادات‬ ‫لتصبح‬
  • 46. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 46 ‫التشغيل‬ ‫ستعاود‬ ‫ثم‬ ‫من‬ ‫و‬ ‫ألي‬ ‫بشكل‬ ‫باإلغالق‬ ‫التطوير‬ ‫بيئة‬ ‫ستقوم‬ ‫لديك‬ ‫التطوير‬ ‫بيئة‬ ‫تصبح‬ ‫بھذا‬ ‫و‬ ‫أخرى‬ ‫مرة‬‫البرمجة‬ ‫إمكانية‬ ‫الندرو‬ ‫الموجھة‬‫يد‬. ‫الخامسة‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫الرابعة‬ ‫الخطوة‬ ‫من‬ ‫انتھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬‫البرمجة‬ ‫في‬ ‫نبدأ‬ ‫بعدھا‬ ‫و‬ ‫األخيرة‬. ‫القائمة‬ ‫من‬window‫خيار‬ ‫باختيار‬ ‫قم‬)Preferences(‫ھو‬ ‫كما‬ ‫التالية‬ ‫بالصورة‬ ‫موضح‬:
  • 48. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 48 ‫باختيار‬ ‫قم‬ ‫اليسرى‬ ‫الجھة‬ ‫في‬ ‫الشاشة‬ ‫أعلى‬ ‫من‬)Android(‫قد‬ ‫و‬ ‫موافق‬ ‫على‬ ‫اضغط‬ ‫ظھورھا‬ ‫حال‬ ‫في‬ ‫و‬ ‫خطاء‬ ‫شاشة‬ ‫لك‬ ‫تظھر‬ ‫وت‬‫التالي‬ ‫بالشكل‬ ‫الشاشة‬ ‫لك‬ ‫لتصبح‬ ‫جاھلھا‬: ‫استعراض‬ ‫زر‬ ‫من‬ ‫اآلن‬)Browse(‫ملفات‬ ‫مكان‬ ‫عن‬ ‫بالبحث‬ ‫قم‬ ‫التي‬ ‫و‬ ‫جھازنا‬ ‫على‬ ‫تحميلھا‬ ‫في‬ ‫سابقا‬ ‫قمنا‬ ‫التي‬ ‫و‬ ‫التطوير‬ ‫حزمة‬ ‫الصورة‬ ‫كما‬ ‫الرئيسي‬ ‫المجلد‬ ‫نختار‬ ‫و‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫كانت‬ ‫التالية‬:
  • 49. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 49 ‫موافق‬ ‫زر‬ ‫على‬ ‫نضغط‬ ‫ثم‬)OK(‫الشا‬ ‫لتصبح‬‫في‬ ‫كما‬ ‫لدينا‬ ‫شة‬ ‫التالي‬ ‫الشكل‬:
  • 50. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 50 ‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫اآلن‬)Apply(‫يمين‬ ‫أسفل‬ ‫في‬ ‫الموجود‬ ‫و‬ ‫بالشاشة‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫الجديدة‬ ‫اإلعدادات‬ ‫لتطبيق‬ ‫الشاشة‬ ‫التالية‬: ‫عملية‬ ‫أثناء‬ ‫سابقا‬ ‫بتحميلھا‬ ‫قمنا‬ ‫التي‬ ‫المنصات‬ ‫بعرض‬ ‫تقوم‬ ‫التي‬ ‫و‬ ‫التطوير‬ ‫حزمة‬ ‫تنصيب‬. ‫على‬ ‫بالضغط‬ ‫قم‬‫عملية‬ ‫من‬ ‫انتھينا‬ ‫اآلن‬ ‫و‬ ‫النافذة‬ ‫إلغالق‬ ‫موافق‬ ‫زر‬ ‫التالية‬ ‫للخطوة‬ ‫لننتقل‬ ‫و‬ ‫كامل‬ ‫بشكل‬ ‫توابعھا‬ ‫كل‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫إعداد‬ ‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫على‬ ‫أكثر‬ ‫للتعرف‬.
  • 51. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 51 ‫األول‬ ‫برنامجك‬ ‫و‬ ‫األول‬ ‫بالتطبيق‬ ‫أعيننا‬ ‫نمتع‬ ‫دعنا‬ ‫البرمجة‬ ‫في‬ ‫اإلبحار‬ ‫قبل‬ ‫و‬ ‫لربما‬ ‫مدى‬ ‫نشاھد‬‫و‬ ‫األول‬ ‫تطبيقان‬ ‫ببناء‬ ‫سنقوم‬ ‫أننا‬ ‫حيث‬ ‫العمل‬ ‫سھولة‬ ‫باسم‬ ‫البرمجة‬ ‫لغات‬ ‫كل‬ ‫لدى‬ ‫عليه‬ ‫تعارف‬ ‫الذي‬)Hell World( )‫بالعالم‬ ‫أھال‬(‫خرج‬ ‫التي‬ ‫و‬ ‫األولى‬ ‫التطبيق‬ ‫والدة‬ ‫لحظة‬ ‫يعني‬ ‫الذي‬ ‫و‬ ‫التحية‬ ‫يبدأھم‬ ‫و‬ ‫العالم‬ ‫إلى‬ ‫بھا‬. ‫إال‬‫أن‬ ‫أرى‬ ‫أني‬)‫ببساطة‬ ‫أندرويد‬(‫أ‬ ‫تطبيق‬ ‫سنبني‬ ‫لذا‬ ‫و‬ ‫أسھل‬‫ندرويد‬ ‫نقوم‬ ‫أن‬ ‫بعد‬ ‫و‬ ‫واحد‬ ‫برمجي‬ ‫سطر‬ ‫بدون‬ ‫و‬ ‫بساطة‬ ‫بكل‬ ‫و‬ ‫ببساطة‬ ‫سنقوم‬ ‫جديد‬ ‫مشروع‬ ‫بدء‬ ‫خطوات‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫التطبيق‬ ‫ببناء‬ ‫عليه‬ ‫برنامجك‬ ‫تشغيل‬ ‫لتستطيع‬ ‫أندرويد‬ ‫جھاز‬ ‫محاكي‬ ‫بإعداد‬. ‫التطوير‬ ‫بيئة‬ ‫بإغالق‬ ‫قمت‬ ‫قد‬ ‫كنت‬ ‫إن‬)Eclipse(‫بإعادة‬ ‫فقم‬ ‫ا‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬ ‫اآلن‬ ‫تشغيلھا‬‫لرئيسية‬
  • 52. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 52 ‫ملف‬ ‫العليا‬ ‫القائمة‬ ‫من‬)File(‫باختيار‬ ‫قم‬)New(‫ثم‬)New Project(‫التالية‬ ‫بالصورة‬ ‫موضح‬ ‫ھو‬ ‫كما‬ ‫جديد‬ ‫مشروع‬ ‫أي‬ ‫توصيف‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫جديد‬ ‫مشروع‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫عن‬ ‫التالي‬ ‫بالشكل‬ ‫شبيھة‬ ‫ھي‬ ‫و‬ ‫المشروع‬
  • 53. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 53 ‫التالية‬ ‫الصورة‬ ‫كما‬ ‫أندرويد‬ ‫مشروع‬ ‫منھا‬ ‫اختر‬ ‫اض‬ ‫ثم‬‫التالية‬ ‫زر‬ ‫على‬ ‫غط‬)Next(‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
  • 54. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 54 ‫اسم‬ ‫و‬ ‫التطبيق‬ ‫اسم‬ ‫و‬ ‫المشروع‬ ‫اسم‬ ‫بكتابة‬ ‫فيھا‬ ‫سنقوم‬ ‫حيث‬ ‫ھي‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫التي‬ ‫و‬ ‫الھدف‬ ‫المنصة‬ ‫تحديد‬ ‫و‬ ‫النشاط‬ ‫و‬ ‫الحزمة‬ ‫الوحيدة‬)1.6(‫لتصبح‬ ‫التالية‬ ‫بالمعلومات‬ ‫الفراغات‬ ‫بمليء‬ ‫قم‬ ‫اآلن‬ ‫بھذه‬ ‫شبيھة‬ ‫شاشة‬ ‫لديك‬: Project Nam: AndroidVerySimple Build Target: 1.6 Application Name:VerySimple Package name:com.book.VerySimple Create Activity:Activity_VerySimple
  • 55. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 55 ‫إنھاء‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬)Finish(‫بالشكل‬ ‫جديد‬ ‫مشروع‬ ‫فتح‬ ‫ليتم‬ ‫التالي‬ ‫ببن‬ ‫المعالج‬ ‫قام‬ ‫ماذا‬ ‫على‬ ‫نتعرف‬ ‫دعنا‬ ‫اآلن‬‫أبناء‬ ‫بسرد‬ ‫ذلك‬ ‫و‬ ‫لنا‬ ‫ائه‬ ‫التالي‬ ‫بالشكل‬ ‫لتكون‬ ‫العنصر‬ ‫العنصر‬ ‫فتح‬ ‫قم‬ ‫اآلن‬)Res(‫تحته‬ ‫ليظھر‬)Layout(‫قم‬ ‫ثم‬ ‫ومن‬ ‫الملف‬ ‫على‬ ‫مرتين‬ ‫بالنقر‬)main.xml(‫تطبيقك‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
  • 56. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 56 ‫بوضع‬ ‫بالعالم‬ ‫نرحب‬ ‫أن‬ ‫يجبرنا‬ ‫أندرويد‬ ‫أن‬ ‫نرى‬ ‫و‬ ‫األولى‬)Hello World(‫الشاش‬ ‫على‬ ‫سيظھر‬ ‫ما‬ ‫ھذا‬ ‫و‬‫البرنامج‬ ‫تشغيل‬ ‫عند‬ ‫ة‬ ‫و‬ ‫األول‬ ‫تطبيقنا‬ ‫بتشغيل‬ ‫لنقم‬ ‫و‬ ‫ذلك‬ ‫من‬ ‫أكثر‬ ‫لتعرف‬ ‫داعي‬ ‫ال‬ ‫اآلن‬ ‫للخطوة‬ ‫فلننتقل‬ ‫لذا‬ ‫و‬ ‫المحاكي‬ ‫تطبيق‬ ‫إعداد‬ ‫علينا‬ ‫البداية‬ ‫في‬ ‫لكن‬ ‫التالية‬
  • 57. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 57 ‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬ ‫بناء‬‫األوامر‬ ‫تملك‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬)Eclipse(‫عملية‬ ‫أثناء‬ ‫مشكلة‬ ‫واجھت‬ ‫أو‬ ‫بناء‬‫طريق‬ ‫عن‬ ‫المشروع‬ ‫بناء‬ ‫دائما‬ ‫فيمكنك‬ ‫جديد‬ ‫مشروع‬ ‫معالج‬ ‫سطر‬‫األوامر‬ ‫عليھا‬ ‫ليتعرف‬ ‫النظام‬ ‫في‬ ‫األوامر‬ ‫سطر‬ ‫مسار‬ ‫تعريف‬ ‫علينا‬ ‫البداية‬ ‫في‬ ‫جھاز‬ ‫إلى‬ ‫الذھاب‬ ‫طريق‬ ‫عن‬ ‫ذلك‬ ‫و‬ ‫مسار‬ ‫أي‬ ‫في‬ ‫طلبھا‬ ‫عند‬ ‫على‬ ‫بالضغط‬ ‫و‬ ‫إبداء‬ ‫القائمة‬ ‫من‬ ‫أو‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫من‬ ‫الكمبيوتر‬ ‫الك‬ ‫جھاز‬ ‫أيقونة‬‫إلى‬ ‫الذھاب‬ ‫ثم‬ ‫من‬ ‫و‬ ‫األيمن‬ ‫الفأرة‬ ‫بزر‬ ‫مبيوتر‬ ‫خصائص‬)Properties(‫خيارات‬ ‫تبويب‬ ‫لسان‬ ‫إلى‬ ‫الذھاب‬ ‫ثم‬ ‫ومن‬ ‫متقدمة‬)Advanced(‫التالي‬ ‫بالشكر‬ ‫لنا‬ ‫لتظھر‬
  • 58. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 58 ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬)Environment Variables(‫وعندھا‬ ‫التالي‬ ‫الشكل‬ ‫كما‬ ‫المسارات‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬
  • 59. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 59 ‫تحت‬ ‫و‬ ‫العلوي‬ ‫القسم‬ ‫في‬‫بند‬)User Environment(‫زر‬ ‫اختر‬ ‫جديد‬)New(‫بالشكل‬ ‫جديدة‬ ‫شاشة‬ ‫لتظھر‬ ‫جديد‬ ‫مسار‬ ‫لتعريف‬ ‫التالي‬ ‫التالية‬ ‫بالمعلومات‬ ‫الشاشة‬ ‫بملء‬ ‫سنقوم‬ ‫االسم‬ ‫مربع‬ ‫في‬)Name(‫كلمة‬ ‫نكتب‬)Path(‫القيمة‬ ‫مربع‬ ‫في‬ ‫و‬ )Variable Value(‫داخل‬ ‫الموجود‬ ‫األدوات‬ ‫مجلد‬ ‫مسار‬ ‫نضع‬ ‫التطوي‬ ‫حزمة‬ ‫مجلد‬‫سطح‬ ‫على‬ ‫سابقا‬ ‫ضغطه‬ ‫بفك‬ ‫قمنا‬ ‫الذي‬ ‫و‬ ‫ر‬ ‫التالي‬ ‫بالشكل‬ ‫لتكن‬ ‫و‬ ‫المكتب‬ C:Documents and SettingsUserNameDesktopandroid-sdk-windowstools ‫أن‬ ‫حيث‬)UserName(‫في‬ ‫أو‬ ‫للنظام‬ ‫الحالي‬ ‫المستخدم‬ ‫اسم‬ ‫ھو‬ ‫انسخ‬ ‫و‬ ‫إليه‬ ‫فاذھب‬ ‫أخر‬ ‫مكان‬ ‫أي‬ ‫في‬ ‫الملف‬ ‫ضغط‬ ‫بفك‬ ‫قمت‬ ‫حال‬ ‫المسا‬ ‫عنوان‬‫مجلد‬ ‫مع‬ ‫كامال‬ ‫ر‬)tools(‫القيمة‬ ‫في‬ ‫ضعه‬ ‫و‬
  • 60. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 60 ‫موافق‬ ‫اضغط‬ ‫ثم‬)OK(‫بالشكل‬ ‫ليكون‬ ‫الجديد‬ ‫المسار‬ ‫إضافة‬ ‫ليتم‬ ‫التالي‬
  • 61. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 61 ‫موافق‬ ‫زر‬ ‫على‬ ‫اضغط‬ ‫ذلك‬ ‫بعد‬ ‫ثم‬)OK(‫للشاشة‬ ‫أخرى‬ ‫مرة‬ ‫ثم‬ ‫موافق‬ ‫اضغط‬ ‫الرئيسية‬)OK( ‫إلى‬ ‫بالذھاب‬ ‫قم‬ ‫األوامر‬ ‫سطر‬ ‫من‬ ‫األوامر‬ ‫استخدام‬ ‫لتجرب‬ ‫اآلن‬ ‫م‬ ‫تشغيل‬‫ابدأ‬ ‫قائمة‬ ‫ن‬)Start >> Run(‫األمر‬ ‫اكتب‬ ‫و‬)CMD( ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫موافق‬ ‫على‬ ‫اضغط‬ ‫ثم‬
  • 62. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 62 ‫موافق‬ ‫زر‬ ‫على‬ ‫تضغط‬ ‫عندما‬)OK(‫و‬ ‫سوداء‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫التالي‬ ‫بالشكل‬ ‫الشبيھة‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫شاشة‬ ‫ھي‬ ‫ترقيمھا‬ ‫و‬ ‫جھازنا‬ ‫في‬ ‫المتواجدة‬ ‫المنصات‬ ‫على‬ ‫لنتعرف‬ ‫البداية‬ ‫في‬ ‫الجھاز‬ ‫في‬‫كتابة‬ ‫عبر‬ ‫ذلك‬ ‫و‬‫األمر‬‫التالي‬ android list target ‫زر‬ ‫اضغط‬ ‫ثم‬‫اإلدخال‬)Enter( ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫لديك‬ ‫المنصات‬ ‫قائمة‬ ‫ستجد‬
  • 63. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 63 ‫رقمھا‬ ‫واحدة‬ ‫منصة‬ ‫سوى‬ ‫لدينا‬ ‫يتوفر‬ ‫ال‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬)1(‫التي‬ ‫و‬ ‫سطر‬ ‫عبر‬ ‫بنا‬ ‫الخاص‬ ‫المشروع‬ ‫لبناء‬ ‫سنستخدمھا‬‫األوامر‬ ‫بناء‬ ‫لنجرب‬ ‫االن‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬‫األو‬‫ا‬‫مر‬‫علينا‬ ‫فلذا‬ ‫كتابة‬‫األمر‬‫التالي‬ android create project -n AndroidVerySimple -p c:1 -k com.book.VerySimple -a Activity_VerySimple -t 1 ‫مالحظة‬)‫سطر‬‫األوامر‬‫النص‬ ‫لكن‬ ‫و‬ ‫واحد‬ ‫سطر‬ ‫على‬ ‫يكتب‬ ‫السابق‬ ‫ا‬ ‫لدواعي‬ ‫سطرين‬ ‫على‬ ‫تقسيمه‬ ‫تم‬ ‫ھنا‬‫لكتاب‬( ‫أن‬ ‫حيث‬: )AndroidVerySimple(‫المشروع‬ ‫اسم‬)Project Name( ‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-n(
  • 64. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 64 )com.book.VerySimple(‫الحزمة‬ ‫اسم‬)Package Name(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-k( )Activity_VerySimple(‫النشاط‬ ‫اسم‬)Activity Name(‫و‬ ‫البارمت‬ ‫نستخدم‬‫لتعريفھا‬ ‫التالي‬ ‫ر‬)-a( )c:1(‫جھاز‬ ‫على‬ ‫تخزينه‬ ‫يتم‬ ‫سوف‬ ‫الذي‬ ‫المشروع‬ ‫مسار‬ ‫ھو‬ )Path(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-p( )1(‫الخطوة‬ ‫في‬ ‫رقمھا‬ ‫استعرضنا‬ ‫التي‬ ‫و‬ ‫نستھدفھا‬ ‫التي‬ ‫المنصة‬ ‫السابقة‬)Target(‫لتعريفھا‬ ‫التالي‬ ‫البارمتر‬ ‫نستخدم‬ ‫و‬)-t( ‫كت‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬‫سطر‬ ‫ابة‬‫األمر‬‫زر‬ ‫على‬ ‫الضغط‬ ‫و‬ ‫بالكامل‬ ‫ھو‬ ‫كما‬ ‫اإلدخال‬)Enter(‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫ستظھر‬ ‫يمكنك‬‫اآلن‬‫بتحديده‬ ‫قمنا‬ ‫الذي‬ ‫المجلد‬ ‫داخل‬ ‫المشروع‬ ‫ملفات‬ ‫تصفح‬ ‫سابقا‬)c:1(‫المشاريع‬ ‫مساحة‬ ‫نفس‬ ‫اختيار‬ ‫أيضا‬ ‫يمكنك‬ ‫الذي‬ ‫و‬
  • 65. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 65 ‫يستخدمھا‬ ‫التي‬)Eclipse(‫تك‬ ‫التي‬ ‫و‬ ‫المشاريع‬ ‫بناء‬ ‫في‬‫بالعادة‬ ‫ون‬ ‫التالي‬ ‫المسار‬ ‫على‬ C:Documents and SettingsUserNameworkspace ‫سطر‬ ‫عبر‬ ‫المعالج‬ ‫قام‬ ‫التي‬ ‫الملفات‬ ‫لتستعرض‬‫األوامر‬‫بإنشائھا‬ ‫التالي‬ ‫بالشكل‬ ‫المشروع‬ ‫ملفات‬ ‫لتجد‬ ‫للمسار‬ ‫فلتذھب‬
  • 66. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 66 ‫محاكي‬ ‫إعداد‬)Android( ‫القا‬ ‫إلى‬ ‫اذھب‬ ‫التطوير‬ ‫لبيئة‬ ‫الرئيسية‬ ‫الشاشة‬ ‫من‬‫ئمة‬)Window( ‫العنصر‬ ‫اختر‬ ‫ثم‬ ‫من‬ ‫و‬)Android SDK and AVD Manager(‫التالية‬ ‫بالشاشة‬ ‫موضح‬ ‫ھو‬ ‫كما‬ ‫التالية‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬
  • 67. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 67 ‫فيمكنك‬ ‫تقلق‬ ‫فال‬ ‫الشاشة‬ ‫ھذه‬ ‫تفتح‬ ‫ولم‬ ‫مشكلة‬ ‫واجھتك‬ ‫حال‬ ‫في‬ ‫بفرد‬ ‫به‬ ‫قمنا‬ ‫الذي‬ ‫المجلد‬ ‫إلى‬ ‫الذھاب‬ ‫عبر‬ ‫يدوي‬ ‫بشكل‬ ‫تشغيلھا‬ ‫دائما‬ ‫التطوير‬ ‫حزمة‬‫باسم‬ ‫المكتب‬ ‫سطح‬ ‫على‬ ‫يتواجد‬ ‫الذي‬ ‫و‬)android- sdk-windows(‫البرنامج‬ ‫بتشغيل‬ ‫قم‬ ‫و‬)SDK Setup(‫في‬ ‫و‬ ‫أن‬ ‫فيھا‬ ‫يمكن‬ ‫أخرى‬ ‫طريقة‬ ‫فھناك‬ ‫تقلق‬ ‫فال‬ ‫أيضا‬ ‫معك‬ ‫يعمل‬ ‫لم‬ ‫حال‬ ‫في‬ ‫عنھا‬ ‫سنتحدث‬ ‫التي‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫نبني‬ ‫الجزء‬ ‫ھذا‬ ‫أخر‬. ‫بشكل‬ ‫يعمل‬ ‫لديك‬ ‫ما‬ ‫كل‬ ‫بأن‬ ‫لنفترض‬‫السابقة‬ ‫الشاشة‬ ‫ظھرت‬ ‫و‬ ‫سليم‬ ‫الخيار‬ ‫إلى‬ ‫فلتذھب‬)Virtual Devices(‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬ )New(‫جھاز‬ ‫إعداد‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫الشاشة‬ ‫يمين‬ ‫أعلم‬ ‫في‬ ‫جديد‬ ‫افتراضي‬.
  • 68. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 68 ‫ذلك‬ ‫و‬ ‫االفتراضي‬ ‫الجھاز‬ ‫بيانات‬ ‫بتعريف‬ ‫سنقوم‬ ‫السابقة‬ ‫الشاشة‬ ‫في‬ ‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬ ‫بنا‬ ‫خاص‬ ‫اسم‬ ‫بتحديد‬‫إصدارة‬‫نظ‬‫قمنا‬ ‫مما‬ ‫التشغيل‬ ‫ام‬ ‫عملية‬ ‫أثناء‬ ‫سابقا‬ ‫بتحميلھا‬‫إعداد‬‫لن‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬ ‫التطوير‬ ‫حزمة‬ ‫سوى‬ ‫لدينا‬ ‫يتواجد‬‫اإلصدارة‬)1.6(‫التي‬ ‫الملحقات‬ ‫نعرف‬ ‫ثم‬ ‫من‬ ‫و‬ ‫داخلي‬ ‫ذاكرة‬ ‫كرت‬ ‫منھا‬ ‫و‬ ‫الجھاز‬ ‫يدعمھا‬)SD(‫الملحقات‬ ‫بعض‬ ‫و‬ ‫اإلضافية‬‫الحقا‬ ‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫على‬ ‫سنتعرف‬ ‫التي‬ ‫و‬. ‫اآل‬‫ن‬‫المحاكي‬ ‫اسم‬ ‫بكتابة‬ ‫قم‬)VM_Android1.6(‫اختر‬ ‫و‬ ‫إصدارة‬‫التشغيل‬ ‫نظام‬)1.6(‫بـ‬ ‫الذاكرة‬ ‫كرت‬ ‫حجم‬ ‫بتحديد‬ ‫قم‬ ‫ثم‬ ‫من‬ ‫و‬ )500(‫نقوم‬ ‫لكي‬ ‫الحقا‬ ‫سنحتاجھا‬ ‫التي‬ ‫و‬ ‫ميجا‬‫ب‬‫و‬ ‫التطبيقات‬ ‫تحميل‬ ‫التطبيقات‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫التطبيقات‬ ‫سوق‬ ‫من‬ ‫عليھا‬ ‫الملفات‬ ‫بنا‬ ‫لنستطيع‬ ‫نوعيتھا‬ ‫و‬ ‫الموجودة‬‫ذلك‬ ‫بعد‬ ‫و‬ ‫مشابھة‬ ‫تطبيقات‬ ‫ء‬
  • 69. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 69 ‫سنقوم‬‫بإضافة‬‫القسم‬ ‫طريق‬ ‫عن‬ ‫العتاد‬)Hardware(‫زر‬ ‫اختيار‬ ‫و‬ )New(‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫فتظھر‬ ‫و‬ ‫الذاكرة‬ ‫كرت‬ ‫خاصية‬ ‫دعم‬ ‫فعلينا‬ ‫الذاكرة‬ ‫كرت‬ ‫حجم‬ ‫اخترنا‬ ‫أننا‬ ‫بما‬ ‫سنضيف‬ ‫لذا‬)SD Card Support(‫زر‬ ‫على‬ ‫سنضغط‬ ‫ثم‬ ‫من‬ ‫و‬ )OK(‫ب‬ ‫العملية‬ ‫نفس‬ ‫نكرر‬ ‫و‬‫زر‬ ‫على‬ ‫الضغط‬)New(‫إلضافة‬‫عتاد‬ ‫من‬ ‫كل‬ ‫لنختر‬ ‫و‬ ‫جديد‬ GPS Support Accelerometer ‫التالي‬ ‫بالشكل‬ ‫النھائية‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬
  • 70. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 70 ‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫ذلك‬ ‫بعد‬)Create AVD(‫ليتم‬ ‫قليال‬ ‫انتظر‬ ‫و‬ ‫لمحاكي‬ ‫بناء‬ ‫تم‬ ‫بأنه‬ ‫مفادھا‬ ‫رسالة‬ ‫لنا‬ ‫ستظھر‬ ‫بعدھا‬ ‫و‬ ‫المحاكي‬ ‫بناء‬ ‫ا‬ ‫في‬ ‫كما‬ ‫بنجاح‬‫التالي‬ ‫لشكل‬ ‫موافق‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫بعد‬ ‫و‬)OK(‫قائمة‬ ‫ضمن‬ ‫الجھاز‬ ‫سيظھر‬ ‫األجھزة‬‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬
  • 71. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 71 ‫زر‬ ‫على‬ ‫الضغط‬ ‫ثم‬ ‫من‬ ‫و‬ ‫تحديده‬ ‫سوى‬ ‫عليك‬ ‫ما‬ ‫الجھاز‬ ‫لتشغيل‬ ‫االن‬ )Start(‫للوقت‬ ‫تجاھلھا‬ ‫التالي‬ ‫بالشكل‬ ‫شاشة‬ ‫لنا‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬ ‫اضغط‬ ‫و‬ ‫الحالي‬)Launch( ‫سيبدأ‬ ‫االن‬‫التالي‬ ‫بالشكل‬ ‫لنا‬ ‫ليظھر‬ ‫بالعمل‬ ‫المحاكي‬
  • 72. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 72 ‫الوقت‬ ‫بعض‬ ‫يحاج‬ ‫الذي‬ ‫و‬ ‫المحاكي‬ ‫شغلنا‬ ‫أن‬ ‫بعد‬‫إلقالع‬‫نظام‬ ‫بعد‬ ‫لكن‬ ‫و‬ ‫ذلك‬ ‫فلك‬ ‫الجھاز‬ ‫في‬ ‫تتجول‬ ‫أن‬ ‫أردت‬ ‫إذا‬ ‫الداخلي‬ ‫التشغيل‬ ‫برنامجنا‬ ‫بتشغيل‬ ‫لنقوم‬ ‫التطوير‬ ‫بيئة‬ ‫إلى‬ ‫فلنعود‬ ‫ذلك‬‫األول‬‫ذلك‬ ‫و‬ ‫رأ‬ ‫في‬ ‫المشروع‬ ‫اسم‬ ‫إلى‬ ‫الذھاب‬ ‫عبر‬‫بزر‬ ‫الضغط‬ ‫و‬ ‫الشجرة‬ ‫س‬ ‫الفأرة‬‫األيمن‬‫اختيار‬ ‫ثم‬ ‫من‬ ‫و‬)Run As(‫القائمة‬ ‫من‬ ‫ثم‬ ‫ومن‬ ‫اختر‬ ‫الفرعية‬)Android Application(
  • 73. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 73 ‫عبارة‬ ‫ھي‬ ‫و‬ ‫المحاكي‬ ‫في‬ ‫سيظھر‬ ‫بك‬ ‫الخاص‬ ‫التطبيق‬ ‫أن‬ ‫ستجد‬ ‫و‬ ‫وحيد‬ ‫سطر‬ ‫على‬ ‫تحتوي‬ ‫فقط‬ ‫شاشة‬ ‫عن‬)HelloWorld(
  • 74. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 74 ‫تط‬ ‫تشغيل‬ ‫محاولة‬ ‫عند‬ ‫مشكلة‬ ‫واجھت‬ ‫حال‬ ‫في‬‫أنه‬ ‫بسبب‬ ‫ذلك‬ ‫و‬ ‫بيقك‬ ‫معالج‬ ‫أحيانا‬‫إعداد‬‫ملفات‬ ‫في‬ ‫المراجع‬ ‫كامل‬ ‫ببناء‬ ‫يقوم‬ ‫ال‬ ‫المشروع‬ ‫بالتالية‬ ‫شبيھة‬ ‫خطأ‬ ‫رسالة‬ ‫لك‬ ‫وستظھر‬ ‫المتنوعة‬ ‫المشروع‬ ‫إلى‬ ‫بالذھاب‬ ‫تقوم‬ ‫أو‬ ‫فتحه‬ ‫تعيد‬ ‫و‬ ‫المشروع‬ ‫تغلق‬ ‫أن‬ ‫عليك‬ ‫إما‬ ‫فلذلك‬ ‫القائمة‬)Project(‫خيار‬ ‫اختيار‬ ‫ثم‬ ‫ومن‬)Clean(‫ال‬ ‫في‬ ‫كما‬‫صورة‬ ‫التالية‬
  • 75. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 75 ‫زر‬ ‫على‬ ‫اضغط‬ ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫ذلك‬ ‫بعد‬ ‫و‬ ‫موافق‬)OK( ‫عالمة‬ ‫ھناك‬ ‫كانت‬ ‫أنه‬ ‫ستالحظ‬)X(‫اسم‬ ‫على‬ ‫كانت‬ ‫حمراء‬ ‫صغيرة‬ ‫العالمة‬ ‫ھذه‬ ‫ستختفي‬ ‫العملية‬ ‫ھذه‬ ‫بعد‬ ‫و‬ ‫الشجرة‬ ‫أعلى‬ ‫في‬ ‫المشروع‬ ‫عليك‬ ‫و‬‫اآلن‬‫على‬ ‫تطبيقك‬ ‫لتشغيل‬ ‫السابقة‬ ‫الخطوة‬ ‫تكرر‬ ‫أن‬‫المحاكي‬.
  • 76. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 76 ‫التعامل‬‫مع‬‫األوامر‬ ‫سطر‬ ‫طريق‬ ‫عن‬ ‫االفتراضي‬ ‫الجھاز‬ ‫يمكن‬ ‫كيف‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬‫إنشاء‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫جديد‬ ‫مشروع‬ ‫األوامر‬‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫مع‬ ‫التعامل‬ ‫كيفية‬ ‫نتعلم‬ ‫دعنا‬ ‫األوامر‬‫قمت‬ ‫أنك‬ ‫المفروض‬ ‫من‬ ‫لكن‬ ‫و‬‫بإضافة‬)Environment Variables(‫عندما‬ ‫ذلك‬ ‫تعلمنا‬ ‫كما‬‫جديد‬ ‫مشروع‬ ‫تبدأ‬ ‫كيف‬ ‫شرحنا‬ ‫لتكرار‬ ‫حاجة‬ ‫فال‬ ‫سابقا‬ ‫بذلك‬ ‫قمت‬ ‫حال‬ ‫في‬ ‫و‬‫األمر‬‫الذھاب‬ ‫عليك‬ ‫و‬ ‫سطر‬ ‫لتشغيل‬ ‫مباشرة‬‫األوامر‬ ‫ابدأ‬ ‫قائمة‬ ‫من‬ ‫تشغيل‬ ‫إلى‬ ‫بالذھاب‬ ‫قم‬)Start >> Run(‫اكتب‬ ‫و‬ ‫األمر‬)CMD(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫موافق‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫موافق‬ ‫زر‬ ‫على‬ ‫تضغط‬ ‫عندما‬)OK(‫ستظ‬‫و‬ ‫سوداء‬ ‫شاشة‬ ‫لك‬ ‫ھر‬ ‫التالي‬ ‫بالشكل‬ ‫الشبيھة‬ ‫و‬ ‫األوامر‬ ‫سطر‬ ‫شاشة‬ ‫ھي‬
  • 77. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 77 ‫و‬ ‫المساعدة‬ ‫ملف‬ ‫الكتشاف‬ ‫التالي‬ ‫األمر‬ ‫كتابة‬ ‫بتجربة‬ ‫قم‬ ‫اآلن‬ ‫جھاز‬ ‫إلنشاء‬ ‫استخدامھا‬ ‫يمكن‬ ‫التي‬ ‫المختلفة‬ ‫البارامتر‬ Android –h ‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬ ‫و‬‫اإلدخال‬)enter( )android -h(‫المتغير‬ ‫أن‬ ‫حيث‬)h(‫لألمر‬ ‫بتمريره‬ ‫قمنا‬ ‫الذي‬ )android(‫كل‬ ‫يشرح‬ ‫الذي‬ ‫و‬ ‫المساعدة‬ ‫ملف‬ ‫عرض‬ ‫منه‬ ‫يطلب‬ ‫و‬ ‫عليھا‬ ‫اإلطالع‬ ‫يمكن‬ ‫كبيرة‬ ‫قائمة‬ ‫لنا‬ ‫ستظھر‬ ‫و‬ ‫الممكنة‬ ‫المتغيرات‬ ‫الشاشة‬ ‫بھذه‬ ‫شبيھة‬ ‫ھي‬
  • 78. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 78 ‫أردنا‬ ‫حال‬ ‫في‬ ‫مثال‬‫إضافة‬‫التالي‬ ‫السطر‬ ‫جرب‬ ‫جديد‬ ‫افتراضي‬ ‫جھاز‬ ‫أرقامھا‬ ‫و‬ ‫المنصات‬ ‫لمعرفة‬ ‫أوال‬‫لديك‬ android list target ‫زر‬ ‫اضغط‬ ‫ثم‬‫اإلدخال‬)Enter( ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫لديك‬ ‫المنصات‬ ‫قائمة‬ ‫ستجد‬
  • 79. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 79 ‫رقمھا‬ ‫واحدة‬ ‫منصة‬ ‫سوى‬ ‫لدينا‬ ‫يتوفر‬ ‫ال‬ ‫ھذه‬ ‫حالتنا‬ ‫وفي‬)1(‫الذي‬ ‫و‬ ‫سطر‬ ‫عبر‬ ‫بنا‬ ‫الخاص‬ ‫المحاكي‬ ‫لبناء‬ ‫سنستخدمه‬‫األوامر‬‫لكتابة‬ ‫االدخ‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫ثم‬ ‫التالي‬ ‫السطر‬‫ال‬)Enter( android create avd -n VM_Android1.6 -t 1 ‫أن‬ ‫حيث‬)VM_Android1.6(‫و‬ ‫المحاكي‬ ‫اسم‬ ‫ھو‬)create avd -n(‫يعني‬‫إنشاء‬‫البارمتر‬ ‫و‬ ‫جديد‬ ‫افتراضي‬ ‫جھاز‬)-t(‫يحدد‬ ‫ھي‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫المستخدمة‬ ‫الواجھة‬)1(‫ذلك‬ ‫بعد‬ ‫المعالج‬ ‫لنا‬ ‫ليظھر‬ ‫بعض‬ ‫ليسألنا‬‫األسئلة‬‫ا‬ ‫العتاد‬ ‫عن‬‫نود‬ ‫لذي‬‫إضافته‬‫سنجيب‬ ‫الذي‬ ‫و‬ ‫بـ‬ ‫عليه‬)yes(‫أو‬)No(‫زر‬ ‫على‬ ‫بالضغط‬ ‫أو‬ ‫فقط‬‫اإلدخال‬)Enter( ‫ألخذ‬‫القوس‬ ‫ضمن‬ ‫تكون‬ ‫التي‬ ‫االفتراضية‬ ‫القيمة‬‫ي‬‫مثال‬ ‫ن‬[yes]
  • 80. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 80 ‫مالحظة‬:‫المحاكي‬ ‫الجھاز‬ ‫ببناء‬ ‫قمت‬ ‫قد‬ ‫كنت‬ ‫إن‬ )VM_Android1.6(‫جربت‬ ‫و‬ ‫سابقا‬ ‫الرسومي‬ ‫المعالج‬ ‫عبر‬ ‫الشيء‬ ‫بنفس‬ ‫القيام‬‫سطر‬ ‫عبر‬‫األوامر‬‫قد‬ ‫االسم‬ ‫بأن‬ ‫رسالة‬ ‫فستأتيك‬ ‫ليكون‬ ‫مثال‬ ‫اسمه‬ ‫تغيير‬ ‫إلى‬ ‫تحتاج‬ ‫و‬ ‫الحقا‬ ‫حجزه‬ ‫تم‬ )VM_Android1.6_1( ‫من‬ ‫االنتھاء‬ ‫بعد‬‫إنشاء‬‫بكتابة‬ ‫قم‬ ‫لتشغيله‬ ‫و‬ ‫المحاكي‬‫األمر‬‫التالي‬ emulator -avd VM_Android1.6_1
  • 81. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 81 ‫المحاكي‬ ‫لديك‬ ‫ليظھر‬ ‫مالحظة‬:‫قمت‬ ‫حال‬ ‫في‬‫بإغال‬‫ق‬‫سطر‬ ‫نافذة‬‫األوامر‬‫ستقوم‬ ‫فأنك‬ ‫بإغالق‬‫الن‬ ‫تباعا‬ ‫المحاكي‬‫األمر‬‫و‬ ‫ينتھي‬ ‫حتى‬ ‫التشغيل‬ ‫تحت‬ ‫مازال‬ ‫سطر‬ ‫طريق‬ ‫عن‬ ‫المحاكي‬ ‫بتشغيل‬ ‫قمت‬ ‫حال‬ ‫في‬ ‫لذا‬‫األوامر‬‫فانك‬ ‫ستحتاج‬‫لإلبقاء‬‫سطر‬ ‫شاشة‬ ‫على‬‫األوامر‬‫قم‬ ‫أو‬ ‫الخلفية‬ ‫في‬ ‫تعمل‬ ‫بالذھاب‬‫إلى‬‫تشغيل‬ ‫و‬ ‫التطوير‬ ‫حزمة‬)SDK Setup(‫ب‬ ‫لتجد‬‫أن‬ ‫قمنا‬ ‫الذي‬ ‫الجديد‬ ‫المحاكي‬‫بإنشائه‬‫سطر‬ ‫ضمن‬‫األوامر‬‫موجود‬ ‫باإلضافة‬‫قائمة‬ ‫ضمن‬ ‫للسابق‬‫األجھزة‬‫االفتراضية‬.
  • 82. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 82 ‫إضافة‬‫العربية‬ ‫اللغة‬‫إلى‬‫المحاكي‬)‫على‬ ‫الحصول‬ ‫عليك‬ ‫يتوجب‬ ‫الخطوط‬ ‫ملفات‬:DroidSans-Bold.ttf, DroidSansFallback.ttf, DroidSans.ttf( adb remount adb shell rm /system/fonts/* adb push c:fontssDroidSans-Bold.ttf /system/fonts/ adb push c:fontssDroidSansFallback.ttf /system/fonts/ adb push c:fontssDroidSans.ttf /system/fonts/ ‫ظھور‬ ‫حال‬ ‫في‬‫ر‬‫سالة‬‫مساحة‬ ‫وجود‬ ‫بعدم‬ ‫تفيد‬ ‫خطأ‬‫كافية‬‫و‬‫يمكنك‬ ،‫التطبيقات‬ ‫بعض‬ ‫حذف‬‫مثال‬: adb shell rm /system/app/AlarmClock.apk ‫سطر‬ ‫من‬ ‫برنامج‬ ‫تنصيب‬‫األوامر‬ adb install c:Vending.apk
  • 83. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 83 ‫الخارجي‬ ‫العالم‬ ‫و‬ ‫المحاكي‬ ‫لنتعرف‬‫اآلن‬‫لنا‬ ‫تتيح‬ ‫التطوير‬ ‫بيئة‬ ‫ضمن‬ ‫موجودة‬ ‫جديدة‬ ‫أداة‬ ‫على‬ ‫التعامل‬ ‫و‬ ‫خصائصه‬ ‫و‬ ‫ملفاته‬ ‫إلى‬ ‫الوصول‬ ‫و‬ ‫المحاكي‬ ‫مع‬ ‫التخاطب‬ ‫ك‬ ‫و‬ ‫معه‬‫و‬ ‫الجھاز‬ ‫خصائص‬ ‫كل‬ ‫تجربة‬ ‫نستطيع‬ ‫لكي‬ ‫حقيقي‬ ‫جھاز‬ ‫أنه‬ ‫حقيقي‬ ‫جھاز‬ ‫على‬ ‫النھائي‬ ‫تطبيقك‬ ‫تجربة‬ ‫عن‬ ‫يغني‬ ‫ال‬ ‫بالتأكيد‬ ‫ھذا‬ ‫عمله‬ ‫كيفية‬ ‫لتعرف‬ ‫أداة‬)DDMS( ‫التطوير‬ ‫بيئة‬ ‫بتشغيل‬ ‫قمت‬ ‫قد‬ ‫أنك‬ ‫حاليا‬ ‫أفترض‬)Eclipse(‫علينا‬ ‫و‬ ‫أداة‬ ‫تشغيل‬)DDMS(‫بالضغط‬ ‫قم‬ ‫الشاشة‬ ‫يمين‬ ‫أعلى‬ ‫من‬ ‫ذلك‬ ‫و‬ ‫زر‬ ‫على‬‫اإلضافة‬)+(‫التالي‬ ‫الشكل‬ ‫كما‬ ‫قائمة‬ ‫لنا‬ ‫لتظھر‬ ‫باختيار‬ ‫قم‬)DDMS(‫يمكن‬ ‫و‬ ‫الشاشة‬ ‫محتويات‬ ‫ضمن‬ ‫لتصبح‬ ‫التالية‬ ‫الشاشة‬ ‫لنا‬ ‫لتظھر‬ ‫و‬ ‫مباشرة‬ ‫لھا‬ ‫الوصول‬
  • 84. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 84 ‫بأن‬ ‫ستالحظ‬ ‫االن‬)DDMS(‫في‬ ‫أصبحت‬‫األعلى‬‫يمكن‬ ‫التي‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫بين‬ ‫ما‬ ‫و‬ ‫بينھا‬ ‫ما‬ ‫التحويل‬)Java(‫لسھو‬‫و‬ ‫الوصول‬ ‫لة‬ ‫التنقل‬ ‫الطرق‬ ‫من‬ ‫بأي‬ ‫المحاكي‬ ‫بتشغيل‬ ‫نقوم‬ ‫بأن‬ ‫تقتضي‬ ‫التالية‬ ‫الخطوة‬ ‫عليھا‬ ‫ليتعرف‬ ‫بشرحھا‬ ‫قمنا‬ ‫التي‬ ‫السابقة‬)DDMS(‫من‬ ‫يمكننا‬ ‫و‬ ‫تشغيل‬ ‫بعد‬ ‫التالي‬ ‫بالشكل‬ ‫شبيھة‬ ‫شاشة‬ ‫لنا‬ ‫لتظھر‬ ‫معھا‬ ‫التواصل‬ ‫المحاكي‬
  • 85. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 85 ‫كذ‬ ‫و‬ ‫بالكامل‬ ‫الجھاز‬ ‫لملفات‬ ‫الوصول‬ ‫يمكنك‬ ‫فإنه‬ ‫ترى‬ ‫كما‬‫الحال‬ ‫لك‬ ‫العلوية‬ ‫اليمنى‬ ‫الجھة‬ ‫من‬ ‫الداخلي‬ ‫الذاكرة‬ ‫لكرت‬)File Explorer( ‫الخلفية‬ ‫في‬ ‫تعمل‬ ‫التي‬ ‫العمليات‬ ‫معرفة‬ ‫و‬)Threads(‫أو‬)Heap( ‫أو‬)Allocation Tracker( ‫قائمة‬ ‫من‬ ‫يمكنك‬)File Explorer(‫ليكن‬ ‫و‬ ‫مثال‬ ‫المجلد‬ ‫اختيار‬ ‫الذاكرة‬ ‫كرت‬)sd card(‫القائمة‬ ‫أعلى‬ ‫من‬ ‫ثم‬ ‫من‬ ‫و‬‫زر‬ ‫اختيار‬ ‫الكمبيوتر‬ ‫جھاز‬ ‫من‬ ‫ملف‬ ‫لسحب‬ ‫الجوال‬ ‫ھاتف‬‫إلى‬‫أو‬ ‫المحاكي‬ ‫المحاكي‬ ‫من‬ ‫ملف‬ ‫لنسخ‬ ‫الحفظ‬ ‫زر‬ ‫اختيار‬‫إلى‬‫الكمبيوتر‬ ‫جھاز‬. ‫تنويه‬:‫الملفات‬ ‫بنسخ‬ ‫قم‬ ‫و‬ ‫النظام‬ ‫ملفات‬ ‫ھيكلية‬ ‫على‬ ‫بالتعرف‬ ‫قم‬ ‫النظام‬ ‫يتعامل‬ ‫كيف‬ ‫الحقا‬ ‫لتعرف‬ ‫بنيتھا‬ ‫كيفية‬ ‫اعرف‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫أ‬ ‫في‬ ‫حال‬ ‫أو‬ ‫معھا‬‫مثال‬ ‫تغيرھا‬ ‫ردت‬)‫الرنين‬ ‫ملفات‬ ‫تغيير‬(‫صورة‬ ‫أو‬ ‫الخلفية‬. ‫قائمة‬ ‫ستجد‬ ‫اليسرى‬ ‫الجھة‬ ‫في‬‫باألجھزة‬)Devices(‫تعمل‬ ‫التي‬ ‫بتعريف‬ ‫قمت‬ ‫و‬ ‫فعلي‬ ‫جھاز‬ ‫بشبك‬ ‫قمت‬ ‫لو‬ ‫حتى‬ ‫حاليا‬)USB
  • 86. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 86 Driver(‫التطوير‬ ‫حزمة‬ ‫ضمن‬ ‫الموجود‬ ‫و‬)SDK(‫ستجد‬ ‫فإنك‬ ‫الوصول‬ ‫يمكن‬ ‫و‬ ‫القائمة‬ ‫بھذه‬ ‫الجھاز‬‫لملفات‬‫ه‬‫ال‬‫معه‬ ‫التعامل‬ ‫و‬ ‫داخلية‬ ‫محاكي‬ ‫أنه‬ ‫لو‬ ‫كما‬. ‫قائمة‬ ‫تحت‬‫األجھزة‬‫بالمحاكي‬ ‫التحكم‬ ‫قائمة‬ ‫توجد‬)Emulator Control(‫فعلي‬ ‫أنه‬ ‫لو‬ ‫كما‬ ‫الجھاز‬ ‫مع‬ ‫التخاطب‬ ‫من‬ ‫تمكنك‬ ‫التي‬ ‫و‬ ‫على‬ ‫فيظھر‬ ‫االتصال‬ ‫و‬ ‫ھاتف‬ ‫رقم‬ ‫كتابة‬ ‫تستطيع‬ ‫المثال‬ ‫سبيل‬ ‫فعلى‬ ‫ا‬ ‫الرقم‬ ‫من‬ ‫وارد‬ ‫اتصال‬ ‫ھناك‬ ‫بأن‬ ‫المحاكي‬ ‫شاشة‬‫كذلك‬ ‫و‬ ‫كتبته‬ ‫لذي‬ ‫أردت‬ ‫حال‬ ‫في‬ ‫الحال‬‫إرسال‬‫نصية‬ ‫رسالة‬)SMS(‫أن‬ ‫أردت‬ ‫أو‬ ‫العالمي‬ ‫التوضع‬ ‫عبر‬ ‫مكان‬ ‫ترسل‬)GPS(‫الطول‬ ‫خطي‬ ‫تمرير‬ ‫عبر‬ ‫العرض‬ ‫و‬)Longitude(‫و‬)latitude(‫تطبيق‬ ‫كان‬ ‫حال‬ ‫في‬ ‫جھاز‬ ‫على‬ ‫مثال‬ ‫يعتمد‬)GPS(.
  • 87. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 87 ‫تدريب‬ ‫رأيك‬ ‫ما‬‫اآلن‬‫قليال‬ ‫المحاكي‬ ‫على‬ ‫بالعمل‬ ‫تقوم‬ ‫لو‬‫بعض‬ ‫تحميل‬ ‫و‬ ‫لتتعرف‬ ‫البرامج‬ ‫سوق‬ ‫من‬ ‫المجانية‬ ‫التطبيقات‬‫أكثر‬‫البرامج‬ ‫ھذه‬ ‫على‬ ‫االنترنت‬ ‫متصفح‬ ‫إلى‬ ‫بالذھاب‬ ‫قم‬ ‫المحاكي‬ ‫جھاز‬ ‫شاشة‬ ‫من‬ )Browser(‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬
  • 88. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 88 ‫يقوم‬ ‫المحاكي‬ ‫أن‬ ‫بسبب‬ ‫ذلك‬ ‫و‬ ‫الشكل‬ ‫بھذا‬ ‫الشاشة‬ ‫لك‬ ‫تظھر‬ ‫قد‬ ‫على‬ ‫بالتعرف‬‫إعدادات‬‫ير‬ ‫و‬ ‫لديك‬ ‫الجھاز‬‫يأتي‬ ‫الذي‬ ‫و‬ ‫للموقع‬ ‫سلھا‬ ‫العربية‬ ‫الخطوط‬ ‫على‬ ‫يحتوي‬ ‫ال‬ ‫المحاكي‬ ‫أن‬ ‫بما‬ ‫و‬ ‫العربية‬ ‫بالواجھة‬ ‫حتى‬‫اآلن‬‫باختيار‬ ‫قم‬ ‫لذا‬ ‫و‬)Google.com in English(‫للتحول‬ ‫االنجليزي‬ ‫الواجھة‬ ‫إلى‬ ‫تنويه‬:‫جھازك‬ ‫من‬ ‫مباشرة‬ ‫االنترنت‬ ‫على‬ ‫بالحصول‬ ‫يقوم‬ ‫المحاكي‬ ‫الكمب‬ ‫جھاز‬ ‫يكون‬ ‫أن‬ ‫من‬ ‫بد‬ ‫ال‬ ‫فلذا‬‫باالنترنت‬ ‫متصل‬ ‫لديك‬ ‫يوتر‬
  • 89. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 89 ‫البرامج‬ ‫سوق‬ ‫مواقع‬ ‫أحد‬ ‫إلى‬ ‫للذھاب‬ ‫التالي‬ ‫العنوان‬ ‫بكتابة‬ ‫قم‬ ‫و‬ ‫العامة‬)slideme.org(
  • 90. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 90 ‫اآلن‬‫اذھب‬‫إلى‬‫القائمة‬ ‫في‬ ‫الموقع‬ ‫الزر‬ ‫على‬ ‫بالضغط‬ ‫وقم‬‫األحمر‬)SAM v2.42(‫تحميل‬ ‫في‬ ‫ليبدأ‬ ‫جھازك‬ ‫على‬ ‫البرنامج‬
  • 91. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 91 ‫بعمل‬ ‫البرنامج‬ ‫تحميل‬ ‫انتھاء‬ ‫بعد‬‫على‬ ‫بالضغط‬ ‫ذلك‬ ‫و‬ ‫له‬ ‫تنصيب‬ ‫البرنامج‬ ‫صورة‬ ‫جھازك‬ ‫على‬ ‫التطبيق‬ ‫تحميل‬ ‫عملية‬ ‫ستبدأ‬ ‫ذلك‬ ‫بعد‬
  • 92. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 92 ‫تقوم‬ ‫أن‬ ‫عليك‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫االنتھاء‬ ‫بعد‬‫بالضغ‬‫ط‬‫زر‬ ‫على‬ )Done(‫التحميل‬ ‫عملية‬ ‫النتھاء‬ ‫تعديل‬ ‫بعمل‬ ‫تقوم‬ ‫أن‬ ‫فعليك‬ ‫التحميل‬ ‫عملية‬ ‫من‬ ‫تتمكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫في‬ ‫بسيط‬‫إعدادات‬‫ا‬‫بالتحميل‬ ‫موقعه‬ ‫الغير‬ ‫بالتطبيقات‬ ‫للسماح‬ ‫لنظام‬ ‫بجميع‬ ‫و‬ ‫جھازك‬ ‫على‬‫األحوال‬‫أنت‬‫الخيار‬ ‫ھذا‬ ‫لتفعيل‬ ‫بحاجة‬ ‫سوق‬ ‫في‬ ‫الموجودة‬ ‫التطبيقات‬ ‫أغلب‬ ‫تحميل‬ ‫من‬ ‫لتستطيع‬)Slide Me(‫زر‬ ‫على‬ ‫بالضغط‬ ‫قم‬ ‫بذلك‬ ‫للقيام‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫الحقا‬ )Menu(‫و‬‫آنت‬‫ال‬ ‫الشاشة‬ ‫لك‬ ‫لتظھر‬ ‫الرئيسية‬ ‫الشاشة‬ ‫على‬‫تالية‬
  • 93. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 93 ‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬)Settings(‫بخيارات‬ ‫شاشة‬ ‫لك‬ ‫ستظھر‬ ‫اإلعدادات‬‫كالتالي‬
  • 94. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 94 ‫خيار‬ ‫على‬ ‫بالضغط‬ ‫قم‬)Applications(‫القائمة‬ ‫إلى‬ ‫للوصول‬ ‫كھذه‬ ‫بھا‬ ‫الخاصة‬ ‫الفرعية‬ ‫االول‬ ‫الخيار‬ ‫بتمكين‬ ‫قم‬)Unknown sources(‫إن‬‫يكن‬ ‫لم‬‫كذلك‬ ‫ت‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫التالية‬ ‫الشاشة‬ ‫كما‬ ‫ليصبح‬‫في‬ ‫ذلك‬ ‫لتطبيق‬ ‫حتاج‬ ‫الفعلي‬ ‫جھازك‬‫إن‬‫أردت‬‫على‬ ‫أيضا‬ ‫اضغط‬ ‫ذلك‬ ‫بعد‬ ‫و‬ ‫عليه‬ ‫التجربة‬ ‫الخيار‬)Development(‫بالتالية‬ ‫شبيھة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬
  • 95. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 95 ‫ھي‬ ‫و‬ ‫كذلك‬ ‫تكن‬ ‫لم‬ ‫حال‬ ‫في‬ ‫خيارات‬ ‫الثالث‬ ‫بتمكين‬ ‫بعبرھا‬ ‫قم‬ ‫مع‬ ‫التعامل‬ ‫بتمكين‬ ‫الخاصة‬)DDMS(‫متابعة‬ ‫عملية‬ ‫تسھيل‬ ‫و‬ ‫األخطاء‬‫ع‬ ‫البرمجة‬ ‫و‬‫لى‬‫األجھزة‬‫تحتاج‬ ‫الحال‬ ‫كذلك‬ ‫و‬‫إلى‬‫عمل‬ ‫حال‬ ‫في‬ ‫الفعلي‬ ‫جھازك‬ ‫على‬ ‫الخطوات‬ ‫نفس‬‫أردت‬‫عليه‬ ‫التجربة‬ ‫للعودة‬ ‫مرات‬ ‫عدة‬ ‫عليه‬ ‫بالضغط‬ ‫قم‬ ‫الرجوع‬ ‫سھم‬ ‫عبر‬ ‫االن‬‫إلى‬ ‫حفظ‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬‫اإلعدادات‬‫بھا‬ ‫قمنا‬ ‫التي‬ ‫برنامج‬ ‫بتشغيل‬ ‫قم‬ ‫البرامج‬ ‫قائمة‬ ‫من‬ ‫االن‬)Slide Me(‫لتظھر‬ ‫الشاشة‬‫فرعية‬ ‫تصنيفات‬ ‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫التالية‬‫ألنواع‬ ‫البرنامج‬ ‫تشغيل‬ ‫عند‬ ‫و‬ ‫الموجودة‬ ‫التطبيقات‬‫ألول‬‫لك‬ ‫ستظھر‬ ‫مرة‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫عليھا‬ ‫بالموافقة‬ ‫قم‬ ‫االستخدام‬ ‫اتفاقية‬ ‫شاشة‬ ‫البرنامج‬ ‫باستكشاف‬ ‫قم‬‫أنواع‬‫تشاء‬ ‫ما‬ ‫منھا‬ ‫حمل‬ ‫و‬ ‫قسم‬ ‫كل‬ ‫في‬ ‫التطبيقات‬ ‫منھا‬ ‫و‬ ‫مجاني‬ ‫ھو‬ ‫ما‬ ‫فمنھا‬‫حال‬ ‫في‬ ‫و‬ ‫مدفوع‬ ‫ھو‬ ‫ما‬‫أردت‬‫تجربة‬ ‫المدفوعة‬ ‫التطبيقات‬‫فأنت‬‫موقع‬ ‫في‬ ‫للتسجيل‬ ‫تحتاج‬
  • 96. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 96 )slideme.org(‫تأكيد‬ ‫و‬ ‫االئتمانية‬ ‫بطاقاتك‬ ‫بيانات‬ ‫تخزين‬ ‫و‬ ‫تتم‬ ‫عملية‬ ‫عبر‬ ‫لھا‬ ‫ملكيتك‬‫أثناء‬‫الشراء‬ ‫لك‬ ‫يتيح‬ ‫مما‬ ‫التسجيل‬ ‫حساب‬ ‫على‬ ‫الموقع‬ ‫من‬ ‫مباشرة‬ ‫المبالغ‬ ‫تقييد‬ ‫و‬ ‫التطبيق‬ ‫من‬ ‫مباشرة‬ ‫بطاق‬‫بطاقة‬ ‫لبيانات‬ ‫الثالث‬ ‫الطرف‬ ‫لمعرفة‬ ‫الحاجة‬ ‫دون‬ ‫االئتمانية‬ ‫تك‬ ‫أو‬ ‫االئتمانية‬‫إلدخال‬‫مرة‬ ‫بياناتك‬‫أخرى‬‫مكان‬ ‫أي‬ ‫في‬ ‫فلنجرب‬‫اآلن‬‫القائمة‬ ‫من‬ ‫تطبيق‬ ‫تحميل‬)Utilities(‫تطبيق‬ ‫ھو‬ ‫و‬ ‫قائمة‬‫المشترٮات‬)OI Shopping List(‫ثم‬ ‫من‬ ‫و‬ ‫عليه‬ ‫للتعرف‬ ‫في‬‫األجزاء‬‫تطب‬ ‫ببناء‬ ‫لنقوم‬ ‫القادمة‬‫المھام‬ ‫بقائمة‬ ‫مشابه‬ ‫يق‬ ‫القائمة‬ ‫من‬)Utilities(‫البرنامج‬ ‫عن‬ ‫ابحث‬)OI Shopping List( ‫يمكنك‬ ‫التي‬ ‫و‬ ‫البرنامج‬ ‫بمعلومات‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫عليه‬ ‫اضغط‬‫أن‬ ‫فيھا‬ ‫تتعرف‬‫أكثر‬‫التطبيق‬ ‫معلومات‬ ‫عن‬‫باإلضافة‬‫إلى‬‫عن‬ ‫صور‬
  • 97. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 97 ‫ما‬ ‫و‬ ‫سعره‬ ‫و‬ ‫البرنامج‬ ‫واجھة‬‫إلى‬‫من‬ ‫ذلك‬‫أمور‬‫العلم‬ ‫مع‬‫أن‬‫ھ‬‫ذا‬ ‫تحميل‬ ‫يمكن‬ ‫و‬ ‫بل‬ ‫مجاني‬ ‫البرنامج‬‫الشفرة‬‫من‬ ‫به‬ ‫الخاصة‬ ‫المصدرية‬ ‫المصادر‬ ‫جزء‬ ‫في‬ ‫الحقا‬ ‫عليه‬ ‫سندل‬ ‫الذي‬ ‫و‬ ‫المبرمج‬ ‫موقع‬ ‫زر‬ ‫على‬ ‫بالنقر‬ ‫قم‬)Terms & Download(‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫االستخدام‬ ‫اتفاقية‬
  • 98. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 98 ‫زر‬ ‫على‬ ‫بالنقر‬ ‫قم‬ ‫ذلك‬ ‫بعد‬)Install(‫لتبد‬‫أ‬‫التي‬ ‫و‬ ‫التحميل‬ ‫عملية‬ ‫ستكو‬‫قائمة‬ ‫في‬ ‫ن‬‫اإلنذارات‬‫العلوية‬)Notifications(‫إذ‬‫فيھا‬ ‫يقوم‬ ‫الوصول‬ ‫يمكنك‬ ‫و‬ ‫الخلفية‬ ‫في‬ ‫جھازك‬ ‫على‬ ‫البرنامج‬ ‫تحميل‬ ‫بعملية‬ ‫البطارية‬ ‫معلومات‬ ‫فيھا‬ ‫تظھر‬ ‫التي‬ ‫و‬ ‫العلوية‬ ‫القائمة‬ ‫تمرير‬ ‫عبر‬ ‫لھا‬ ‫الساعة‬ ‫و‬ ‫التنصيب‬ ‫عملية‬ ‫لتبدأ‬ ‫عليه‬ ‫اضغط‬ ‫التحميل‬ ‫من‬ ‫البرنامج‬ ‫انتھاء‬ ‫بعد‬ ‫عل‬‫جھازك‬ ‫ى‬
  • 99. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 99 ‫بال‬ ‫تقوم‬‫ض‬‫غ‬‫زر‬ ‫على‬ ‫ط‬)Install(‫التحميل‬ ‫انتھاء‬ ‫شاشة‬ ‫لك‬ ‫لتظھر‬ ‫لحظات‬ ‫بعد‬ ‫على‬ ‫بالضغط‬ ‫قم‬‫زر‬)Open(‫البرنامج‬ ‫لتشغيل‬ ‫نوع‬ ‫من‬ ‫وھي‬ ‫يتم‬ ‫بتحميلھا‬ ‫تقوم‬ ‫التي‬ ‫الملفات‬ ‫مالحظة‬)apk(‫يتم‬ ‫و‬ ‫مجلد‬ ‫في‬ ‫بھا‬ ‫االحتفاظ‬)Download(‫الخارجية‬ ‫الجھاز‬ ‫ذاكرة‬ ‫في‬ )SD Card(‫لت‬ ‫و‬‫جھاز‬ ‫على‬ ‫تنصيبھا‬ ‫ستطيع‬‫أخر‬‫الحاجة‬ ‫دون‬ ‫إلعادة‬‫الخطوات‬‫أو‬‫وجودة‬Slide Me‫تطبيق‬ ‫لوجود‬ ‫بحاجة‬ ‫أنت‬ ‫أسمة‬)Apps Installer(‫من‬ ‫الملفات‬ ‫عن‬ ‫بالبحث‬ ‫يقوم‬ ‫الذي‬ ‫و‬ ‫نوع‬)apk(‫يمكنك‬ ‫و‬ ‫مباشرة‬ ‫تنصيبھا‬ ‫من‬ ‫تمكينك‬ ‫و‬ ‫جھازك‬ ‫على‬ ‫موقع‬ ‫من‬ ‫التطبيق‬ ‫ھذا‬ ‫على‬ ‫الحصول‬)Slide Me(
  • 100. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 100 ‫باستكشا‬ ‫قم‬‫تطبيق‬ ‫مع‬ ‫التعامل‬ ‫كيفية‬ ‫على‬ ‫التعرف‬ ‫و‬ ‫البرنامج‬ ‫ف‬ ‫على‬ ‫فعلي‬‫أندرويد‬‫واجھات‬ ‫ببناء‬ ‫القيام‬ ‫كيفية‬ ‫على‬ ‫التعرف‬ ‫لتستطيع‬ ‫بنفسك‬ ‫مشابھة‬ ‫تطبيق‬. ‫تنويه‬:‫عبر‬ ‫و‬ ‫يمكنك‬‫أداة‬)DDMS(‫شاشة‬ ‫عن‬ ‫صور‬ ‫بأخذ‬ ‫تقوم‬ ‫أن‬ ‫القائمة‬ ‫من‬ ‫ذلك‬ ‫و‬ ‫المحاكي‬)Devices(‫الذھاب‬ ‫ثم‬‫إلى‬‫زر‬‫األدوات‬ )‫صورة‬ ‫شكل‬()Screen Capture(‫بأخذ‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫و‬ ‫عند‬ ‫بذلك‬ ‫أنا‬ ‫قمت‬ ‫كما‬ ‫جھازك‬ ‫على‬ ‫حفظھا‬ ‫و‬ ‫المحاكي‬ ‫من‬ ‫صورة‬ ‫التدريب‬ ‫ھذا‬ ‫شرح‬ ‫المحاكي‬ ‫دلع‬ ‫الجھاز‬ ‫بشكل‬ ‫ليصبح‬ ‫لديك‬ ‫المحاكي‬ ‫شكل‬ ‫بتغيير‬ ‫تقوم‬ ‫لو‬ ‫مارأيك‬ ‫الذھاب‬ ‫سوى‬ ‫عليك‬ ‫ما‬‫إلى‬‫المجلد‬ android-sdk-windowsplatformsandroid-1.6skinsHVGA ‫حال‬ ‫في‬ ‫الموجودة‬ ‫بالصور‬ ‫التالعب‬ ‫ثم‬ ‫من‬ ‫و‬‫أردت‬‫صورة‬ ‫تغيير‬ ‫مثال‬ ‫كالتالي‬ ‫لتصبح‬ ‫الجھاز‬
  • 101. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 101 ‫الثاني‬ ‫مشروعك‬ ‫بناء‬)‫المھام‬ ‫قائمة‬( ‫الخطوات‬‫األولى‬‫بيئة‬ ‫على‬ ‫تعريفك‬ ‫على‬ ‫تركز‬ ‫كانت‬ ‫الكتاب‬ ‫ھذا‬ ‫في‬ ‫نقم‬ ‫لم‬ ‫و‬ ‫معھا‬ ‫التعامل‬ ‫أساسيات‬ ‫تعليمك‬ ‫و‬ ‫تھيئتھا‬ ‫كيفية‬ ‫و‬ ‫التطوير‬ ‫بكتا‬‫حتى‬ ‫كود‬ ‫سطر‬ ‫أي‬ ‫بة‬‫اآلن‬‫عن‬ ‫التشمير‬ ‫في‬ ‫البدء‬ ‫فعلينا‬ ‫لذا‬ ‫و‬ ‫الذي‬ ‫و‬ ‫الكود‬ ‫بعض‬ ‫على‬ ‫يحتوي‬ ‫فعلي‬ ‫برنامج‬ ‫أول‬ ‫كتابة‬ ‫و‬ ‫ساعدينا‬ ‫معھا‬ ‫التعامل‬ ‫كيفية‬ ‫و‬ ‫التطوير‬ ‫بيئة‬ ‫عن‬ ‫المزيد‬ ‫بداخله‬ ‫سنشرح‬. ‫المھام‬ ‫قائمة‬ ‫برنامج‬ ‫على‬ ‫وقع‬ ‫اختياري‬‫باألساس‬‫ألنه‬‫ضمنيا‬ ‫يأتي‬ ‫ال‬ ‫كما‬ ‫التشغيل‬ ‫نظام‬ ‫مع‬‫فھو‬ ‫الوقت‬ ‫بنفس‬ ‫و‬ ‫وظيفته‬ ‫فھم‬ ‫في‬ ‫بسيط‬ ‫أنه‬ ‫منھا‬ ‫سنتعلم‬ ‫التي‬ ‫الخصائص‬ ‫من‬ ‫الكثير‬ ‫يستخدم‬‫أساسيات‬‫البرمجة‬ ‫شاشة‬ ‫من‬ ‫أكثر‬ ‫مع‬ ‫التعامل‬ ‫منھا‬ ‫و‬ ‫الندرويد‬ ‫الموجھة‬)‫نشاط‬(‫حفظ‬ ‫و‬ ‫المزيد‬ ‫تكسبنا‬ ‫التي‬ ‫المميزات‬ ‫من‬ ‫غيرھا‬ ‫و‬ ‫أوامر‬ ‫قائمة‬ ‫بناء‬ ‫و‬ ‫المھام‬ ‫المھارة‬ ‫من‬. ‫قم‬‫اآلن‬‫بيئ‬ ‫بتشغيل‬‫التطوير‬ ‫ة‬)Eclipse(‫و‬‫ابد‬‫أ‬‫في‬‫إعداد‬‫مشروع‬ ‫لنسيمه‬ ‫و‬ ‫جديد‬)Task List(‫التالي‬ ‫الشكل‬ ‫في‬ ‫ليكون‬:
  • 102. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 102 ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫المشروع‬ ‫ملفات‬ ‫شاشة‬ ‫لنا‬ ‫تظھر‬ ‫أن‬ ‫بعد‬
  • 103. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 103 ‫عالمة‬ ‫وجود‬ ‫تالحظ‬ ‫لربما‬)X(‫باللون‬‫األحمر‬‫و‬ ‫الشجرة‬ ‫رأس‬ ‫على‬ ‫ق‬ ‫لتصحيحھا‬ ‫و‬ ‫المشروع‬ ‫في‬ ‫خطاء‬ ‫وجود‬ ‫على‬ ‫تدل‬ ‫التي‬‫باستخدام‬ ‫م‬ )Project >> Clean(‫أول‬ ‫ببناء‬ ‫قمنا‬ ‫عندما‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬ ‫المعالج‬ ‫بسبب‬ ‫أخطاء‬ ‫أي‬ ‫من‬ ‫المشروع‬ ‫لتنظيف‬ ‫ذلك‬ ‫و‬ ‫مشروع‬. ‫المعالج‬ ‫قام‬ ‫الذي‬ ‫و‬ ‫البرمجي‬ ‫الكود‬ ‫لنستعرض‬‫بإنشائه‬‫ألول‬‫شاشة‬ )‫نشاط‬(‫مجلد‬ ‫إلى‬ ‫لنذھب‬ ‫و‬ ‫افتراضي‬ ‫بشكل‬ ‫لنا‬)src(‫تحته‬ ‫من‬ ‫و‬ ‫الحزمة‬ ‫إلى‬ ‫نذھب‬)com.android.TaskList(‫من‬ ‫ثم‬ ‫ومن‬ ‫الملف‬ ‫على‬ ‫المضاعف‬ ‫بالنقر‬ ‫نقوم‬ ‫تحتھا‬)Activity_TaskList( ‫الكود‬ ‫لنا‬ ‫ليظھر‬‫األساسي‬‫النظام‬ ‫قام‬ ‫الذي‬ ‫و‬‫بإضافته‬‫و‬‫المسئول‬‫عن‬ ‫على‬ ‫افتراضي‬ ‫بشكل‬ ‫و‬ ‫فقط‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬ ‫تشغيل‬ ‫المشروع‬ ‫أسم‬ ‫يحتوي‬ ‫عنوان‬ ‫مربع‬
  • 104. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 104 ‫استعرا‬ ‫يمكنك‬ ‫كما‬‫الشاشة‬ ‫ض‬)‫النشاط‬ ‫شكل‬(‫بيئة‬ ‫قامت‬ ‫الذي‬ ‫المصادر‬ ‫مجلد‬ ‫تحت‬ ‫ذلك‬ ‫و‬ ‫افتراضي‬ ‫بشكل‬ ‫ببنائه‬ ‫التطوير‬)res(‫ثم‬ ‫اختيار‬)layout(‫الملف‬ ‫على‬ ‫المضاعف‬ ‫بالنقر‬ ‫تحتھا‬ ‫من‬ ‫و‬ )main.xml(‫التالية‬ ‫الصورة‬ ‫كما‬ ‫الشاشة‬ ‫شكل‬ ‫لدينا‬ ‫ليظھر‬
  • 105. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 105 ‫التبويب‬ ‫لسان‬ ‫أعلى‬ ‫من‬)main.xml(‫الشاش‬ ‫شكل‬ ‫بتغيير‬ ‫قم‬‫ة‬ ‫شكل‬ ‫في‬ ‫أكثر‬ ‫للتحكم‬ ‫عرضي‬ ‫شكل‬ ‫من‬ ‫بدال‬ ‫طولي‬ ‫بشكل‬ ‫لتصبح‬ ‫الجھاز‬ ‫على‬ ‫تعمل‬ ‫عندما‬ ‫االفتراضية‬ ‫الشاشة‬،‫الخاصية‬ ‫بتغيير‬ ‫قم‬ )Config(‫القيمة‬ ‫من‬)Landscape(‫القيمة‬ ‫إلى‬)Portrait( ‫التالي‬ ‫بالشكل‬ ‫تصبح‬ ‫و‬ ‫قليال‬ ‫الشاشة‬ ‫شكل‬ ‫لتتغير‬
  • 106. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 106 ‫مربعي‬ ‫ھناك‬ ‫الشاشة‬ ‫بجانب‬ ‫اليسرى‬ ‫القائمة‬ ‫من‬‫باسم‬ ‫ن‬)Layout( ‫و‬)Views(‫و‬ ‫مباشرة‬ ‫عناصرھا‬ ‫بسحب‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫التي‬ ‫و‬ ‫سنذھب‬ ‫لكننا‬ ‫و‬ ‫الشاشة‬ ‫على‬ ‫وضعھا‬‫إلى‬‫لنتعرف‬ ‫المصدري‬ ‫الملف‬ ‫العمل‬ ‫لنحترف‬ ‫يدوي‬ ‫بشكل‬ ‫بعمله‬ ‫نقوم‬ ‫و‬ ‫الكود‬ ‫ھيكلية‬ ‫على‬ ‫أكثر‬ ‫عليه‬. ‫تبويب‬ ‫لسان‬ ‫ستجد‬ ‫اليسرى‬ ‫الناحية‬ ‫في‬ ‫الشاشة‬ ‫تحت‬)main.xml( ‫و‬)layout(‫إلى‬ ‫بالتغيير‬ ‫قم‬)main.xml(‫الشاشة‬ ‫لك‬ ‫لتظھر‬ ‫التالية‬:
  • 107. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 107 ‫على‬ ‫لنتعرف‬‫األ‬‫كواد‬‫المكتوبة‬ 1 <?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr oid" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/hello" 11 /> 12 </LinearLayout>
  • 108. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 108 ‫بترقيم‬ ‫ھنا‬ ‫قمت‬ ‫لقد‬‫األسطر‬‫أنت‬ ‫يمكنك‬ ‫و‬ ‫كما‬ ‫لھا‬ ‫الرجوع‬ ‫لسھولة‬ ‫تقوم‬ ‫أن‬ ‫أيضا‬‫بإظھار‬‫أرقام‬‫األسطر‬‫التطوير‬ ‫بيئة‬ ‫داخل‬ ‫من‬ )Eclipse(‫الفأرة‬ ‫بزر‬ ‫بالضغط‬ ‫ذلك‬ ‫و‬‫األيمن‬‫من‬ ‫اليسار‬ ‫أقصى‬ ‫على‬ ‫قم‬ ‫المنسدلة‬ ‫القائمة‬ ‫من‬ ‫ثم‬ ‫من‬ ‫و‬ ‫الفارغة‬ ‫المنطقة‬ ‫في‬ ‫الكود‬ ‫سطر‬ ‫خيار‬ ‫بتحديد‬)Show Line Numbers( ‫لتظھ‬‫أسطر‬ ‫أرقام‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫التالي‬ ‫الشكل‬ ‫في‬ ‫كما‬ ‫الشاشة‬ ‫لنا‬ ‫ر‬ ‫لنستطيع‬ ‫البرمجي‬ ‫الكود‬‫اإلشارة‬‫الحقا‬ ‫إليھا‬
  • 109. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 109 ‫شرحه‬ ‫و‬ ‫الكود‬ ‫إلى‬ ‫بالعودة‬ ‫و‬ ‫االن‬ 1 <?xml version="1.0" encoding="utf-8"?> ‫ملف‬ ‫ترويسة‬ ‫فتح‬)XML(‫ترميز‬ ‫و‬ ‫المعياري‬)UTF-8(‫الدولي‬ ‫اللغات‬ ‫كل‬ ‫لدعم‬ 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr oid" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent">
  • 110. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 110 ‫األسطر‬‫من‬)2(‫حتى‬ ‫و‬)6(‫موزع‬ ‫لكنه‬ ‫و‬ ‫واحد‬ ‫سطر‬ ‫عن‬ ‫عبارة‬ ‫ھي‬ ‫ل‬ ‫أسطر‬ ‫عدة‬ ‫إلى‬‫أو‬ ‫ذلك‬ ‫تغيير‬ ‫يمكنك‬ ‫و‬ ‫القراءة‬ ‫سھولة‬‫اإلبقاء‬‫على‬ ‫ذلك‬ ‫العرض‬ ‫طريقة‬ ‫اختيار‬ ‫ھو‬ ‫السطر‬ ‫ھذا‬ ‫في‬ ‫المھم‬ )LinearLayout(‫طرق‬ ‫أحدى‬ ‫الكتاب‬ ‫أول‬ ‫في‬ ‫ذكرنا‬ ‫كما‬ ‫التي‬ ‫و‬ ‫ل‬ً‫أ‬ ‫من‬ ‫العرض‬)4(‫برصف‬ ‫تقضي‬ ‫التي‬ ‫و‬ ‫مختلفة‬ ‫عرض‬ ‫طرق‬ ‫من‬ ‫متتالي‬ ‫بشكل‬ ‫العناصر‬‫األعلى‬‫إلى‬‫األسفل‬‫تباعا‬ ‫ال‬ ‫بداخل‬ ‫ما‬‫وسم‬)LinearLayout(‫الخصائص‬ ‫من‬ ‫مجموعة‬ ‫ھناك‬ ‫الخاصية‬ ‫أھمھا‬ ‫من‬ ‫لعل‬ ‫و‬ ‫العرض‬ ‫طريقة‬ ‫تحدد‬ ‫التي‬ )orientation(‫بشكل‬ ‫المتتالي‬ ‫الرصف‬ ‫طريق‬ ‫توصف‬ ‫التي‬ ‫و‬ ‫بشكل‬ ‫و‬ ‫ھي‬ ‫و‬ ‫أفقي‬ ‫أو‬ ‫عامودي‬‫افتراضي‬‫بشكل‬ ‫بالرصف‬ ‫تقوم‬ ‫أفقي‬ ‫بشكل‬ ‫لتصبح‬ ‫تغيرھا‬ ‫يمكن‬ ‫و‬ ‫عامودي‬‫إال‬‫ب‬‫الخاصية‬ )horizontal(‫و‬‫الخاصيتين‬ ‫الحال‬ ‫كذلك‬)layout_width(‫و‬ )layout_height(‫التي‬ ‫و‬ ‫عنصر‬ ‫كل‬ ‫توضع‬ ‫مكان‬ ‫تحدد‬ ‫التي‬ ‫و‬ ‫القيمة‬ ‫تأخذ‬)fill_parent(‫المساحة‬ ‫تعبئة‬ ‫أي‬‫األب‬‫ھذه‬ ‫في‬ ‫و‬ ‫عنصر‬ ‫كل‬ ‫فإن‬ ‫افتراضي‬ ‫ھو‬ ‫كما‬ ‫عاموديا‬ ‫الشكل‬ ‫كان‬ ‫حال‬ ‫في‬ ‫الحالة‬ ‫سيقوم‬‫بتعبئ‬‫ة‬‫يم‬ ‫أقصى‬ ‫إلى‬ ‫الشاشة‬ ‫يسار‬ ‫أقصى‬ ‫من‬ ‫اسكر‬‫ين‬ ‫العرض‬ ‫كان‬ ‫حال‬ ‫في‬ ‫أما‬ ‫الشاشة‬‫أفقيا‬‫فأنه‬‫سيتم‬‫من‬ ‫التعبئة‬‫األعلى‬ ‫إلى‬‫األسفل‬ 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/hello"/>
  • 111. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 111 ‫من‬‫السطر‬)7(‫السطر‬ ‫حتى‬ ‫و‬)11(‫واحد‬ ‫سطر‬ ‫ھو‬‫كائن‬ ‫لتوصيف‬ ‫السابقة‬ ‫االسباب‬ ‫لنفس‬ ‫سطور‬ ‫عدة‬ ‫على‬ ‫توزيعه‬ ‫تم‬ ‫التي‬ ‫و‬ ‫نصي‬ ‫تتغير‬ ‫قد‬ ‫و‬ ‫العناصر‬ ‫أغلب‬ ‫في‬ ‫المشتركة‬ ‫الخصائص‬ ‫بعض‬ ‫ھناك‬ ‫بشرح‬ ‫سنقوم‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫لكن‬ ‫و‬ ‫العنصر‬ ‫وظيفة‬ ‫على‬ ‫بناء‬ ‫بعضھا‬ ‫ھي‬ ‫و‬ ‫االفتراضية‬ ‫الخصائص‬)layout_width(‫تأخذ‬ ‫التي‬ ‫و‬ ‫بتعبئة‬ ‫الخاصة‬ ‫القيمة‬‫األب‬)fill_parent(‫الخاصية‬ ‫و‬ )layout_height(‫القيمة‬ ‫تأخذ‬ ‫التي‬ ‫و‬)wrap_content(‫و‬ ‫النزول‬ ‫و‬ ‫عاموديا‬ ‫التمدد‬ ‫العنصر‬ ‫لھذا‬ ‫يمكن‬ ‫أنه‬ ‫تعني‬ ‫التي‬‫ألكثر‬‫من‬ ‫الداخلي‬ ‫النص‬ ‫طول‬ ‫على‬ ‫بناء‬ ‫ذلك‬ ‫استدعى‬ ‫حال‬ ‫في‬ ‫سطر‬،‫أما‬ ‫للخاصية‬ ‫بالنسبة‬)text(‫المصادر‬ ‫ملف‬ ‫من‬ ‫قيمتھا‬ ‫تأخذ‬ ‫التي‬ ‫و‬ ‫الخا‬‫تغييرھا‬ ‫يمكن‬ ‫ال‬ ‫و‬ ‫النص‬ ‫داخل‬ ‫ستعرض‬ ‫التي‬ ‫القيمة‬ ‫ھي‬ ‫و‬ ‫رجي‬ ‫أن‬ ‫إذ‬ ‫ھنا‬ ‫من‬ ‫مباشرة‬)@string/hello(‫في‬ ‫القيمة‬ ‫عنوان‬ ‫ھي‬ ‫بعد‬ ‫عليھا‬ ‫سنتعرف‬ ‫التي‬ ‫و‬ ‫نفسھا‬ ‫القيمة‬ ‫ليست‬ ‫و‬ ‫المصادر‬ ‫ملف‬ ‫مباشرة‬ ‫الكود‬ ‫ھذا‬ ‫شرح‬ 12 </LinearLayout> ‫السطر‬)12(‫الوسم‬ ‫ينھي‬)LinearLayout(‫ينھي‬ ‫الذي‬ ‫و‬‫بذلك‬ ‫بنا‬ ‫الخاص‬ ‫الكود‬ ‫النص‬ ‫مربع‬ ‫بأن‬ ‫سابقا‬ ‫ذكرنا‬ ‫كما‬)TextView(‫بعض‬ ‫لديه‬ ‫و‬ ‫المصادر‬ ‫ملف‬ ‫من‬ ‫قيمتھا‬ ‫يأخذ‬ ‫التي‬ ‫و‬ ‫االسم‬ ‫منھا‬ ‫و‬ ‫الخصائص‬ ‫المجلد‬ ‫تحت‬ ‫المشروع‬ ‫ملفات‬ ‫من‬ ‫له‬ ‫الوصول‬ ‫يمكن‬ ‫الذي‬)res(‫و‬ ‫مجلد‬ ‫ثم‬ ‫من‬)Value(‫الملف‬ ‫اسم‬ ‫على‬ ‫بالنقر‬ ‫قم‬ ‫بعدھا‬ ‫و‬()‫لتظھر‬ ‫الت‬ ‫الشاشة‬‫الية‬
  • 112. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 112 ‫بالضغط‬ ‫ذلك‬ ‫و‬ ‫ھنا‬ ‫من‬ ‫النص‬ ‫بداخل‬ ‫التي‬ ‫قيمة‬ ‫تعديل‬ ‫يمكننا‬ ‫االن‬ ‫مثال‬ ‫ليكن‬ ‫و‬ ‫المرجع‬ ‫اسم‬ ‫على‬)hell(‫تفتح‬ ‫عندما‬ ‫ثم‬ ‫ومن‬‫الناف‬‫ذ‬‫ة‬‫قم‬ ‫من‬ ‫القيمة‬ ‫بتعديل‬)Hello World, Activity_TaskList(! ‫إلى‬)Task List(‫التالي‬ ‫بالشكل‬ ‫لتصبح‬
  • 113. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 113 ‫المرجع‬ ‫تغيير‬ ‫أيضا‬ ‫يمكنك‬ ‫االن‬)app_name(‫فيه‬ ‫القيمة‬ ‫تغيير‬ ‫و‬ ‫من‬)Task List(‫إلى‬)My 1st Application(‫والتي‬‫ستغير‬ ‫بتشغيل‬ ‫نقوم‬ ‫عندما‬ ‫ستظھر‬ ‫التي‬ ‫و‬ ‫النافذة‬ ‫أعلى‬ ‫في‬ ‫التطبيق‬ ‫عنوان‬ ‫القادمة‬ ‫المرة‬ ‫في‬ ‫البرنامج‬ ‫لنتعرف‬ ‫النص‬ ‫خلفية‬ ‫لون‬ ‫عن‬ ‫عبارة‬ ‫أخر‬ ‫مرجع‬ ‫سنضيف‬ ‫ذلك‬ ‫بعد‬ ‫استخدامھا‬ ‫و‬ ‫القيم‬ ‫تغيير‬ ‫كيفية‬ ‫على‬ ‫قم‬‫زر‬ ‫على‬ ‫بالضغط‬)add(‫لتظھر‬ ‫المراجع‬ ‫قائمة‬ ‫بجانب‬ ‫الموجود‬ ‫التالية‬ ‫الشاشة‬
  • 114. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 114 ‫المرجع‬ ‫باختيار‬ ‫قم‬)color(‫زر‬ ‫على‬ ‫اضغط‬ ‫ثم‬ ‫من‬)OK(‫ليظھر‬ ‫تركنا‬ ‫مع‬ ‫القائمة‬ ‫في‬ ‫جديد‬ ‫مرجع‬ ‫عنصر‬ ‫لدينا‬‫ل‬‫ت‬‫عبئة‬‫العنصر‬ ‫ھذا‬ ‫من‬ ‫كل‬ ‫بتعريف‬ ‫قمنا‬ ‫حيث‬ ‫بالقيم‬ Name : TextViewBackColor Value: #FF0000 ‫التالية‬ ‫الشاشة‬ ‫في‬ ‫كما‬
  • 115. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 115 ‫القيمة‬ ‫أن‬ ‫حيث‬)#FF0000(‫ألوان‬ ‫معادلة‬ ‫تستخدم‬)RGB(‫و‬ ‫كود‬ ‫في‬ ‫المستخدمة‬‫األلوان‬‫في‬)HTML(‫فيھا‬ ‫تكون‬ ‫التي‬ ‫و‬ ‫مثال‬ ‫خانتين‬ ‫أول‬ ‫أن‬ ‫عبارة‬)FF(‫للقيمة‬ ‫ھي‬)R(‫تعني‬ ‫التي‬ ‫و‬)Red(‫و‬ ‫الالحقتين‬ ‫الخانتين‬ ‫ثم‬ ‫من‬)00(‫بالقيمة‬ ‫خاصة‬)G(‫تعني‬ ‫التي‬ ‫و‬ )Green(‫الخان‬ ‫ثم‬ ‫من‬ ‫و‬‫تين‬‫األخيرتين‬)00(‫بالقيمة‬ ‫خاصة‬)B( ‫أي‬)Blue(‫خلط‬ ‫يمكن‬ ‫بذلك‬ ‫و‬‫األلوان‬‫لون‬ ‫لتكوين‬ ‫الثالثة‬ ‫الرئيسية‬ ‫للون‬ ‫قيمة‬ ‫بوضع‬ ‫قم‬ ‫ھذه‬ ‫حالتنا‬ ‫في‬ ‫و‬ ‫جديد‬‫األحمر‬‫للونين‬ ‫صفر‬ ‫و‬ ‫األخضر‬‫و‬‫األزرق‬‫اللون‬ ‫على‬ ‫للحصول‬ ‫ذلك‬ ‫و‬‫األحمر‬‫فقط‬ ‫تحتاج‬‫اآلن‬‫إلغالق‬‫تبويب‬ ‫لسان‬)string.xml(‫يقوم‬ ‫لكي‬ ‫ذلك‬ ‫و‬ ‫نفسه‬ ‫المشروع‬ ‫في‬ ‫استخدامھا‬ ‫يمكن‬ ‫و‬ ‫المشروع‬ ‫في‬ ‫القيم‬ ‫بحفظ‬ ‫في‬ ‫الموجود‬ ‫الكود‬ ‫إلى‬ ‫بالعودة‬ ‫االن‬)main.xml(‫المجلد‬ ‫تحت‬ )layout(‫ليصبح‬ ‫النص‬ ‫بمربع‬ ‫الخاص‬ ‫الكود‬ ‫على‬ ‫بالتعديل‬ ‫قمنا‬ ‫و‬ ‫التالي‬ ‫بالشكل‬ <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:background="@color/TextViewBackColor" /> ‫قمنا‬ ‫أننا‬ ‫حيث‬‫بإضافة‬‫الخاصية‬)background(‫لھا‬ ‫أسندنا‬ ‫و‬ ‫المصادر‬ ‫ملف‬ ‫في‬ ‫عرفناھا‬ ‫التي‬ ‫اللون‬ ‫قيمة‬ )TextViewBackColor(‫اآلن‬‫بع‬‫قم‬ ‫البسيطة‬ ‫التعديالت‬ ‫ھذه‬ ‫د‬ ‫بھا‬ ‫قمنا‬ ‫التي‬ ‫التعديالت‬ ‫أثر‬ ‫لترى‬ ‫برنامجك‬ ‫بتشغيل‬ ‫زر‬ ‫على‬ ‫بالضغط‬ ‫فقم‬ ‫برسالة‬ ‫المشروع‬ ‫حفظ‬ ‫البرنامج‬ ‫منك‬ ‫يطلب‬ ‫قد‬ ‫موافق‬
  • 116. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 116 ‫بالشكل‬ ‫ليكون‬ ‫المحاكي‬ ‫جھاز‬ ‫على‬ ‫يعمل‬ ‫ھو‬ ‫و‬ ‫تطبيقنا‬ ‫بعدھا‬ ‫لترى‬ ‫و‬ ‫التالي‬ ‫أصبح‬ ‫التطبيق‬ ‫عنوان‬ ‫أن‬ ‫حيث‬)My 1st Application(‫القيمة‬ ‫و‬ ‫أصبحت‬ ‫سطر‬ ‫أول‬ ‫في‬ ‫النصية‬)Task List(‫بأن‬ ‫ستالحظ‬ ‫كذلك‬ ‫و‬ ‫اللون‬ ‫حمراء‬ ‫بخلفية‬ ‫أصبح‬ ‫النص‬ ‫مربع‬ ‫تنويه‬:‫كيفية‬ ‫رأينا‬ ‫كما‬‫إسناد‬‫ملف‬ ‫من‬ ‫القيم‬)String(‫تتيح‬ ‫التي‬ ‫و‬ ‫حال‬ ‫في‬ ‫مثال‬ ‫الحقا‬ ‫القيم‬ ‫ھذه‬ ‫تغيير‬ ‫لنا‬‫أتحنا‬‫واجھة‬ ‫تغيير‬ ‫للمستخدم‬ ‫بالدال‬ ‫تقوم‬ ‫حيث‬ ‫التطبيق‬‫ملف‬ ‫على‬ ‫لة‬)String(‫اللغة‬ ‫بداللة‬ ‫أخر‬
  • 117. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 117 ‫الحاجة‬ ‫دون‬ ‫مباشرة‬ ‫النص‬ ‫تمرير‬ ‫يمكننا‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫مثال‬ ‫المحلية‬ ‫الحالي‬ ‫الكود‬ ‫كما‬ ‫مباشرة‬ ‫بالتعويض‬ ‫المرجع‬ ‫إلى‬ ‫للداللة‬ <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Task List" android:background="@color/TextViewBackColor" /> ‫نحن‬‫اآلن‬‫خط‬ ‫إلى‬ ‫بحاجة‬‫و‬‫ة‬‫إضافية‬‫ھي‬ ‫و‬‫إعطاء‬‫صندوق‬ ‫عنصر‬ ‫النص‬)TextView(‫معه‬ ‫التعامل‬ ‫نستطيع‬ ‫لكي‬ ‫ذلك‬ ‫و‬ ‫وحيد‬ ‫اسم‬ ‫مثال‬ ‫ليكن‬ ‫و‬ ‫بنا‬ ‫الخاص‬ ‫الكود‬ ‫طريق‬ ‫عن‬)MainTextView(‫و‬ ‫طريق‬ ‫ھناك‬ ‫بذلك‬ ‫لنقوم‬‫طريق‬ ‫عن‬ ‫أو‬ ‫مباشرة‬ ‫الكود‬ ‫طريق‬ ‫عن‬ ‫إما‬ ‫تين‬ ‫ليقوم‬ ‫المرة‬ ‫ھذه‬ ‫عليه‬ ‫سنتعرف‬ ‫الذي‬ ‫و‬ ‫الخصائص‬ ‫صندوق‬ ‫استخدام‬ ‫عنا‬ ‫بدال‬ ‫بالعمل‬ ‫ھو‬ ‫مجلد‬ ‫تحت‬ ‫الشاشة‬ ‫إلى‬ ‫بالعودة‬ ‫قم‬)res >> layout(‫ل‬‫ي‬‫ظ‬‫ھ‬‫ر‬‫شكل‬ ‫تبويب‬ ‫لسان‬ ‫ستجد‬ ‫أسفلھا‬ ‫في‬ ‫و‬ ‫بالواجھة‬ ‫الخاصة‬ ‫الشاشة‬ )Properties(‫عن‬ ‫بالبحث‬ ‫لتقم‬ ‫و‬‫الخاصية‬)id(‫لتقم‬ ‫و‬‫بإسناد‬ ‫القيمة‬)MainTextView(‫التالي‬ ‫بالشكل‬ ‫ليكون‬ ‫إليھا‬
  • 118. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 118 ‫التطوير‬ ‫بيئة‬ ‫ستقوم‬ ‫النقطة‬ ‫ھذه‬ ‫من‬ ‫انتھائك‬ ‫عند‬‫بإضافة‬‫سطر‬‫إلى‬ ‫داخل‬ ‫النص‬ ‫مربع‬ ‫خصائص‬ ‫ضمن‬ ‫ھو‬ ‫و‬ ‫الكائن‬ ‫ھذا‬ ‫لتعريف‬ ‫النظام‬ ‫الملف‬)main.xml(‫التالي‬ ‫بالشكل‬ ‫ليكون‬ <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Task List" android:background="@color/TextViewBackColor" android:id="@+id/MainTextView"/> ‫تقوم‬ ‫أن‬ ‫فعليك‬ ‫الكود‬ ‫من‬ ‫مباشرة‬ ‫بتعريفه‬ ‫تقوم‬ ‫أن‬ ‫أردت‬ ‫حال‬ ‫في‬ ‫أو‬ ‫بالش‬ ‫بكتابته‬‫التالي‬ ‫كل‬ android:id="@+id/MainTextView"
  • 119. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 119 ‫تقوم‬ ‫التي‬ ‫و‬‫بإخبار‬‫التطوير‬ ‫بيئة‬‫بأننا‬‫جديد‬ ‫عنصر‬ ‫بتعريف‬ ‫نقوم‬ ‫باسم‬)MainTextView(‫دو‬ ‫معه‬ ‫التعامل‬ ‫من‬ ‫سنتمكن‬ ‫عندھا‬ ‫و‬‫ن‬ ‫إال‬ ‫أخر‬ ‫مكان‬ ‫في‬ ‫لتعريفه‬ ‫الحاجة‬‫يمكنك‬ ‫ال‬ ‫أنه‬ ‫تقع‬ ‫ذلك‬ ‫محدودية‬ ‫أن‬ ‫ا‬ ‫الكائنات‬ ‫ضمن‬ ‫العنصر‬ ‫ھذا‬ ‫مع‬ ‫التعامل‬‫مثله‬ ‫قبله‬ ‫لتي‬‫فإنھا‬‫لن‬ ‫العرض‬ ‫طريقة‬ ‫استخدمنا‬ ‫حال‬ ‫في‬ ‫مثال‬ ‫موجود‬ ‫انه‬ ‫تعرف‬ )Relative(‫و‬‫أردنا‬‫أن‬‫و‬ ‫البعض‬ ‫بعضھا‬ ‫مع‬ ‫الكائنات‬ ‫ھذه‬ ‫تتخاطب‬ ‫تحتاج‬‫إلى‬‫الكائنات‬ ‫طريق‬ ‫عن‬ ‫معھا‬ ‫التعامل‬‫أالحقة‬ ‫أن‬ ‫حيث‬)@+id/(‫بأن‬ ‫النظام‬ ‫تخبر‬ ‫االسم‬ ‫قبل‬ ‫وضعناھا‬ ‫التي‬ ‫و‬ ‫تعري‬ ‫تم‬ ‫جديد‬ ‫كائن‬ ‫ھناك‬‫مباشرة‬ ‫معه‬ ‫التعامل‬ ‫يمكن‬ ‫الحقا‬ ‫و‬ ‫ھنا‬ ‫فه‬ ‫مثال‬ ‫المرجع‬ ‫عبر‬ @id/MainTextView ‫وجود‬ ‫بدون‬‫إشارة‬‫الموجب‬)+(‫إذ‬‫أننا‬‫اآلن‬‫ليس‬ ‫و‬ ‫معه‬ ‫نتعامل‬ ‫الحقا‬ ‫سترى‬ ‫كما‬ ‫تعريفه‬ ‫للمشروع‬ ‫جديدة‬ ‫شاشة‬ ‫اضافة‬)‫جديد‬ ‫نشاط‬( ‫اآلن‬‫لنقوم‬‫بإنشاء‬‫عن‬ ‫إليھا‬ ‫نصل‬ ‫سوف‬ ‫التي‬ ‫ھي‬ ‫و‬ ‫جديدة‬ ‫شاشة‬ ‫قائ‬ ‫طريق‬‫تمكيننا‬ ‫ھي‬ ‫الشاشة‬ ‫ھذه‬ ‫وظيفة‬ ‫و‬ ‫الرئيسية‬ ‫الشاشة‬ ‫من‬ ‫مة‬ ‫أحدھما‬ ‫نص‬ ‫مربعي‬ ‫على‬ ‫تحتوي‬ ‫التي‬ ‫و‬ ‫المھمة‬ ‫بيانات‬ ‫كتابة‬ ‫من‬ ‫المھمة‬ ‫عنوان‬ ‫على‬ ‫يحتوي‬)Title(‫تفاصيل‬ ‫على‬ ‫يحتوي‬ ‫الثاني‬ ‫و‬ ‫المھمة‬)Details(
  • 120. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 120 ‫قائمة‬ ‫ببناء‬ ‫فلنقم‬ ‫الشاشة‬ ‫بناء‬ ‫من‬ ‫انتھينا‬ ‫أن‬ ‫بعد‬)Menu(‫على‬ ‫الرئيسي‬ ‫الشاشة‬‫الثانية‬ ‫الشاشة‬ ‫استدعاء‬ ‫من‬ ‫لتمكننا‬ ‫ة‬ ‫قائمة‬ ‫بناء‬)Menu( ‫عد‬‫اآلن‬‫الشاشة‬ ‫إلى‬‫األولى‬)Activity_TaskList(‫قم‬ ‫و‬‫بإضافة‬ ‫الدالة‬ ‫استدعاء‬ ‫سطر‬)Menu(‫داخل‬ ‫في‬ ‫معھا‬ ‫التعامل‬ ‫نستطيع‬ ‫حتى‬ ‫الرئيسية‬ ‫للدالة‬ ‫الحال‬ ‫كذلك‬ ‫و‬ ‫بنا‬ ‫الخاص‬ ‫الكود‬)View( import android.view.Menu; import android.view.View; ‫إلى‬ ‫نحتاج‬ ‫كما‬‫إضافة‬‫النص‬ ‫مربعات‬ ‫مع‬ ‫التعامل‬ ‫دالة‬ import android.widget.TextView; ‫الشكل‬ ‫بھذا‬ ‫لدينا‬ ‫الكود‬ ‫ليصبح‬ import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Menu; import android.widget.TextView; public class Activity_TaskList extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) {
  • 121. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 121 super.onCreate(savedInstanceState); setContentView(R.layout.main); } } ‫اآلن‬‫الكود‬ ‫بعض‬ ‫سنضيف‬‫إلنشاء‬)‫جديدة‬ ‫قائمة‬( ‫الحوار‬ ‫صناديق‬)activities,alertdialog,toast( ‫تختلف‬ ‫التي‬ ‫و‬ ‫الحوار‬ ‫صناديق‬ ‫من‬ ‫أنواع‬ ‫ثالث‬ ‫أندرويد‬ ‫في‬ ‫يوجد‬ ‫رأيك‬ ‫ما‬ ‫الوظيفة‬ ‫باالختالف‬‫اآلن‬‫تظھر‬ ‫صغيرة‬ ‫رسالة‬ ‫أضفنا‬ ‫لو‬ ‫مثال‬ ‫ترحيب‬ ‫رسالة‬ ‫فيھا‬ ‫تظھر‬ ‫البرنامج‬ ‫افتتاح‬ ‫عند‬ ‫لفترة‬ )Welcome(‫مفيدة‬ ‫معلومات‬ ‫بتضمينھا‬ ‫الحقا‬ ‫تقوم‬ ‫أن‬ ‫يمكنك‬ ‫و‬ ‫الواجب‬ ‫المھام‬ ‫عدد‬ ‫مثال‬ ‫أو‬ ‫المھام‬ ‫عدد‬ ‫مثال‬‫أدائھا‬‫حال‬ ‫في‬ ‫اليوم‬ ‫و‬ ‫البرنامج‬ ‫طورت‬‫إض‬‫ا‬‫فة‬‫وقت‬ ‫تحديد‬ ‫خاصية‬‫إلنھاء‬‫مثال‬ ‫مھمة‬ ‫كل‬ ‫قم‬ ‫الحوار‬ ‫صناديق‬ ‫دالة‬ ‫الستدعاء‬ ‫االن‬‫بإضافة‬‫في‬ ‫التالي‬ ‫الشطر‬ ‫أعلى‬‫الكود‬ ‫البداي‬ ‫في‬‫إلى‬ ‫بحاجة‬ ‫أنت‬ ‫ة‬‫إضافة‬‫مرجع‬ import android.widget.Toast; ‫قم‬ ‫ثم‬ ‫من‬ ‫و‬‫بإضافة‬‫ليصبح‬ ‫المشروع‬ ‫إلى‬ ‫التالي‬ ‫الكود‬ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Toast.makeText(Activity_TaskList.this,"Welcome",0).show() ;
  • 122. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 122 TextView[] tvs; tvs = new TextView[10]; for (int i=0; i<10; ++i) { tvs[i] = new TextView(this); tvs[i].setText("hi"); } } ‫اآلن‬‫للترحيب‬ ‫حوار‬ ‫مربع‬ ‫ستظھر‬ ‫التطبيق‬ ‫تشغيل‬ ‫عند‬ ‫زر‬ ‫على‬ ‫الضغط‬ ‫عند‬ ‫تظھر‬ ‫قائمة‬ ‫الكود‬ ‫إلى‬ ‫سنضيف‬)Menu(‫و‬ ‫حفظ‬ ‫كلمة‬ ‫يحتوي‬ ‫وحيد‬ ‫زر‬ ‫بھا‬ ‫سنضع‬ ‫التي‬)Save(‫يظھر‬ ‫و‬ ‫النظام‬ ‫من‬ ‫بالحفظ‬ ‫الخاصة‬ ‫االفتراضية‬ ‫الصورة‬ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem item1 = menu.add(0, 1, 0, "Save"); item1.setIcon(android.R.drawable.ic_menu_save ); return true; } ‫اآلن‬‫داخل‬ ‫النص‬ ‫قيمة‬ ‫بطباعة‬ ‫سنقوم‬ ‫العنصر‬ ‫ھذا‬ ‫على‬ ‫الضغط‬ ‫عند‬ ‫الكونسول‬)‫العمل‬ ‫سجل‬( ‫تحتا‬ ‫البداية‬ ‫في‬‫إلى‬ ‫ج‬‫إضافة‬‫إلى‬ ‫مرجع‬ import android.util.Log;
  • 123. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 123 ‫ثم‬ ‫من‬ ‫و‬‫إضافة‬‫التالي‬ ‫الكود‬ @Override public boolean onOptionsItemSelected(MenuItem item) { TextView MainTextView = (TextView)findViewById(R.id.MainTextView); switch (item.getItemId()) { case 1 : Log.v("Task:",MainTextView.getText().toString()); return true; } return false; } ‫المشروع‬ ‫ھذا‬ ‫إلى‬ ‫المدخل‬ ‫أنھينا‬ ‫قد‬ ‫نكون‬ ‫بھذا‬ ‫و‬
  • 124. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 124 ‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫نشر‬ ‫حساب‬ ‫تسجيل‬ ‫إلى‬ ‫أوال‬ ‫تحتاج‬ ‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫لنشر‬ ‫مبلغ‬ ‫دفع‬ ‫يتطلب‬ ‫الذي‬ ‫و‬ ‫للبيع‬ ‫بك‬ ‫خاص‬)50(‫لمرة‬ ‫و‬ ‫أمريكي‬ ‫دوالر‬ ‫واحدة‬ ‫بمثابة‬ ‫ليكون‬ ‫تطبيق‬ ‫لكل‬ ‫خاص‬ ‫مفتاح‬ ‫إنشاء‬ ‫إلى‬ ‫بحاجة‬ ‫أنت‬ ‫ثم‬ ‫التطبيق‬ ‫لھذا‬ ‫رقمي‬ ‫توقيع‬ ‫أو‬ ‫بصمة‬،‫حال‬ ‫في‬ ‫و‬‫إنشاء‬‫الملف‬ ‫ھذا‬ ‫أمن‬ ‫مكان‬ ‫في‬ ‫حفظه‬ ‫إلى‬ ‫تحتاج‬،‫على‬ ‫التطبيق‬ ‫برفع‬ ‫قيامك‬ ‫عند‬ ‫حيث‬ ‫ب‬ ‫أندرويد‬ ‫سوق‬‫تحديثات‬ ‫أي‬ ‫برفع‬ ‫تقوم‬ ‫أن‬ ‫تستطيع‬ ‫فلن‬ ‫التوقيع‬ ‫ھذا‬ ‫مرة‬ ‫بأول‬ ‫به‬ ‫قمت‬ ‫الذي‬ ‫التوقيع‬ ‫بنفس‬ ‫إال‬ ‫جديدة‬ ‫خاص‬ ‫مفتاح‬ ‫تسجيل‬‫لتطبيقك‬ ‫أداة‬ ‫عن‬ ‫جھازك‬ ‫في‬ ‫ابحث‬)keytool(‫مجلد‬ ‫داخل‬ ‫الموجودة‬ ‫و‬ )JDK(‫مثال‬ ‫التالي‬ ‫المسار‬ ‫على‬ ‫ليكن‬ ‫و‬ C:Program FilesJavajdk1.6.0_18binkeytool.exe ‫سطر‬ ‫من‬‫األوامر‬‫بكتابة‬ ‫قم‬ ‫جھازك‬ ‫في‬‫األمر‬‫التالي‬ keytool -list -alias alias_name -keystore my- release-key.keystore ‫أنك‬ ‫حيث‬‫ستستبد‬‫ل‬‫مثال‬ ‫ليكن‬ ‫و‬ ‫بأخرى‬ ‫العوامل‬ ‫بعض‬
  • 125. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 125 keytool -genkey -v -keystore badwi.keystore -alias badwi -keyalg RSA -keysize 2048 -validity 10000 ‫التطبيق‬ ‫اسم‬ ‫الحظ‬)badwi(‫المدخالت‬ ‫بعض‬ ‫لك‬ ‫ستظھر‬ ‫عندھا‬ ‫و‬ ‫الخاص‬ ‫التشفير‬ ‫أجل‬ ‫من‬ ‫ذلك‬ ‫و‬ ‫تعريفھا‬ ‫إلى‬ ‫تحتاج‬ ‫التي‬‫إلنشاء‬‫ملف‬ ‫الخاص‬ ‫التعريف‬ ‫اآلن‬‫الملف‬ ‫عن‬ ‫ابحث‬)badwi.keystore(‫في‬ ‫عادة‬ ‫يكون‬ ‫الذي‬ ‫و‬ ‫المسار‬: Windows Vista or 7: C:Users<user>.androidbadwi.keystore Windows XP: C:Documents and Settings<user>.androidbadwi.keystore
  • 126. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 126 ‫المفتاح‬ ‫مع‬ ‫التطبيق‬ ‫تصدير‬ ‫عن‬ ‫ذلك‬ ‫و‬ ‫المنتج‬ ‫الملف‬ ‫مع‬ ‫الملف‬ ‫ھذا‬ ‫لربط‬ ‫تحتاج‬ ‫الخطوة‬ ‫ھذه‬ ‫بعد‬ ‫التطوير‬ ‫بيئة‬ ‫طريق‬،‫و‬ ‫المشروع‬ ‫اسم‬ ‫إلى‬ ‫اذھب‬‫اضغط‬‫الفأرة‬ ‫بزر‬ ‫األيمن‬ ‫معال‬ ‫مربع‬ ‫لك‬ ‫ليظھر‬‫الملف‬ ‫تصدير‬ ‫ج‬‫المشروع‬ ‫اسم‬ ‫يحوي‬ ‫الذي‬ ‫و‬ ‫التالي‬ ‫اختر‬
  • 127. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 127 ‫الذي‬ ‫المفتاح‬ ‫ملف‬ ‫مكان‬ ‫تحديد‬ ‫إلى‬ ‫تحتاج‬ ‫الشاشة‬ ‫ھذه‬ ‫في‬‫انشئن‬‫ا‬‫ھا‬ ‫استخدمتھا‬ ‫الذي‬ ‫السر‬ ‫كلمة‬ ‫كذلك‬ ‫و‬ ‫سابقا‬‫أثناء‬‫المفتاح‬ ‫بناء‬ ‫اخترتھا‬ ‫الذي‬ ‫السر‬ ‫كلمة‬ ‫اكتب‬‫أثناء‬‫معرف‬ ‫تعريف‬‫المفتاح‬‫أثناء‬ ‫اإلنشاء‬
  • 128. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 128 ‫ال‬ ‫ھذه‬ ‫في‬‫و‬ ‫النھائي‬ ‫الملف‬ ‫بتصدير‬ ‫تقوم‬ ‫سوف‬ ‫أين‬ ‫ستحدد‬ ‫شاشة‬ ‫أندرويد‬ ‫سوق‬ ‫على‬ ‫برفعه‬ ‫تقوم‬ ‫سوف‬ ‫الذي‬ ‫أندرويد‬ ‫سوق‬ ‫على‬ ‫التطبيق‬ ‫رفع‬ ‫اذھب‬‫إلى‬‫التالي‬ ‫العنوان‬ http://market.android.com/publish/Home ‫ال‬ ‫الرئيسية‬ ‫الصفحة‬ ‫ستجد‬‫تستعرض‬ ‫تي‬‫الحالية‬ ‫التطبيقات‬ ‫قائمة‬ ‫زر‬ ‫على‬ ‫اضغط‬)Upload Application(
  • 129. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 129 ‫شاشة‬ ‫لك‬ ‫لتظھر‬‫إضافة‬‫جديد‬ ‫تطبيق‬،‫التطبيق‬ ‫رفع‬ ‫سوى‬ ‫عليك‬ ‫ما‬ ‫و‬ ‫بالتطبيق‬ ‫الخاصة‬ ‫الصور‬ ‫و‬ ‫بتصديره‬ ‫قمنا‬ ‫الذي‬ ‫النھائي‬‫األيقونات‬ ‫بك‬ ‫الخاصة‬ ‫المعلومات‬ ‫و‬ ‫الخاصة‬ ‫الشاشة‬‫باإلضافة‬‫التالية‬ ‫الصفحة‬ ‫في‬،‫و‬‫التي‬ ‫الصفحة‬ ‫في‬ ‫البيانات‬ ‫رفع‬ ‫بعد‬ ‫للشاشة‬ ‫صورة‬ ‫توجد‬ ‫تليھا‬
  • 134. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 134 ‫تطبيق‬RestDroid-mini ‫بتطبيق‬ ‫الخاص‬ ‫البرمجي‬ ‫الكود‬ ‫شرح‬ ‫الفصل‬ ‫ھذا‬ ‫يتناول‬RestDroid‫والذي‬ ‫مع‬ ‫بالتعاون‬ ‫العرب‬ ‫أندرويد‬ ‫مطوري‬ ‫مجتمع‬ ‫مشاريع‬ ‫من‬ ‫مشروع‬ ‫كأول‬ ‫طرحناه‬ ‫ال‬ ‫أردرويد‬ ‫موقع‬‫وھواتفه‬ ‫األندرويد‬ ‫بنظام‬ ‫عالقة‬ ‫ماله‬ ‫بكل‬ ‫متخصص‬.‫تم‬ ‫التطبيق‬ ‫األندرويد‬ ‫تطبيقات‬ ‫سوق‬ ‫في‬ ‫طرحه‬“‫مي‬ ‫ساليد‬ ‫وسوق‬ ‫ماركت‬ ‫أندرويد‬”‫قد‬ ‫وكنا‬ ‫يملكھا‬ ‫التي‬ ‫المميزات‬ ‫وعن‬ ‫عنه‬ ‫كتبنا‬.‫سيكون‬ ‫التطبيق‬ ،‫قبل‬ ‫من‬ ‫ذكرنا‬ ‫وكما‬ ‫األندرويد‬ ‫ببرمجة‬ ‫العرب‬ ‫المھتمون‬ ‫ليتمكن‬ ‫كامل‬ ‫بشكل‬ ‫المصدر‬ ‫مفتوح‬‫من‬ ‫األندرويد‬ ‫تطبيقات‬ ‫مجال‬ ‫نحو‬ ‫واالنطالق‬ ‫المصدرية‬ ‫الشفرة‬ ‫وفھم‬ ‫دراسة‬.‫ولكن‬ ‫تطبيق‬ ‫من‬ ‫مصغرة‬ ‫لنسخة‬ ‫كامل‬ ‫شرح‬ ‫بتقديم‬ ‫الكتاب‬ ‫ھذا‬ ‫في‬ ‫سنقوم‬RestDroid ‫ب‬ ‫سميناھا‬ ‫األصلي‬RestDroid-mini. ‫التالية‬ ‫الخصائص‬ ‫على‬ ‫تحتوي‬ ‫التطبيق‬ ‫من‬ ‫الكاملة‬ ‫النسخة‬: ‫تطبيق‬RestDroid‫يستخدم‬‫الواج‬‫التطويرية‬ ‫البرمجية‬ ‫ھة‬API‫بموقع‬ ‫الخاصة‬ ‫التالية‬ ‫المزايا‬ ‫عليھا‬ ‫ليبني‬ ‫قيم‬: -‫فيھا‬ ‫المطاعم‬ ‫عن‬ ‫والبحث‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬. -‫أفضل‬ ‫وعرض‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬٥٠‫فيھا‬ ‫مطعما‬. -‫معينة‬ ‫مواصفات‬ ‫باستخدام‬ ‫مطاعم‬ ‫عن‬ ‫والبحث‬ ‫والمدينة‬ ‫الدولة‬ ‫اختيار‬)‫مطعم‬ ‫ن‬ ،‫صيني‬ ،‫ايطالي‬،‫أسماك‬ ،‫باتي‬…). -‫بھا‬ ‫الخاصة‬ ‫التقييمات‬ ‫وبجانبھا‬ ‫البحث‬ ‫معلومات‬ ‫تناسب‬ ‫التي‬ ‫المطاعم‬ ‫عرض‬. -‫غوغل‬ ‫خرائط‬ ‫على‬ ‫المطاعم‬ ‫عرض‬. -‫الفروع‬ ‫معلومات‬ ‫استعراض‬ ‫إمكانية‬)‫وذلك‬ ‫الخريطة‬ ‫على‬ ‫بعضھا‬ ‫يظھر‬ ‫ال‬ ‫وقد‬ ‫المستخدمين‬ ‫قبل‬ ‫من‬ ‫قيم‬ ‫موقع‬ ‫في‬ ‫األصل‬ ‫في‬ ‫مواقعھا‬ ‫تحديد‬ ‫عدم‬ ‫بسبب‬). -‫إمكا‬‫المطاعم‬ ‫على‬ ‫المستخدمين‬ ‫تعليقات‬ ‫استعراض‬ ‫نية‬. ‫التالية‬ ‫التقنيات‬ ‫يستخدم‬ ‫التطبيق‬: -‫ال‬ ‫واستخدام‬ ‫باالنترنت‬ ‫االتصال‬API. -‫غوغل‬ ‫خرائط‬. ‫لالستزادة‬:
  • 135. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 135 ‫اليوتيوب‬ ‫على‬ ‫تعريفي‬ ‫مقطع‬: EDuS6gq4JAhttp://www.youtube.com/watch?v=B ‫واحد‬ ‫زر‬ ‫بعرض‬ ‫التطبيق‬ ‫سيكتفي‬ ،‫ھنا‬ ‫سنشرحھا‬ ‫والتي‬ ‫المصغرة‬ ‫للنسخة‬ ‫بالنسبة‬ ‫أفضل‬ ‫جلب‬ ‫يتم‬ ‫عليه‬ ‫بالضغط‬٥٠‫الرياض‬ ‫مدينة‬ ‫في‬ ‫مطعما‬-‫العربية‬ ‫المملكة‬ ‫تقييمھا‬ ‫ويعرض‬ ‫السعودية‬.‫على‬ ‫موقعه‬ ‫عرض‬ ‫سيتم‬ ،‫مطعم‬ ‫أي‬ ‫على‬ ‫بالضغط‬ ‫غوغل‬ ‫خريطة‬. ‫التطبيق‬ ‫واجھات‬: ‫تسب‬ ‫التي‬ ‫الخطوة‬‫إظھارھا‬ ‫المطلوب‬ ‫الواجھات‬ ‫وعدد‬ ‫شكل‬ ‫تحديد‬ ‫ھي‬ ،‫البرمجة‬ ‫ق‬ ‫التطبيق‬ ‫في‬.‫وھي‬ ‫واجھات‬ ‫ثالثة‬ ‫الى‬ ‫تطبيقنا‬ ‫في‬ ‫نحتاج‬: ‫البداية‬ ‫واجھة‬: ‫عليه‬ ‫مكتوب‬ ‫وزر‬ ‫التطبيق‬ ‫شعار‬ ‫يظھر‬ ‫وفيھا‬“‫أفضل‬ ‫جلب‬٥٠‫في‬ ‫مطعما‬ ‫الرياض‬”. ‫المطاعم‬ ‫واجھة‬: ‫وتقييماتھا‬ ‫المطاعم‬ ‫أسماء‬ ‫تظھر‬ ‫وفيھا‬.‫المرغو‬ ‫الشكل‬‫كل‬ ‫تقييم‬ ‫يظھر‬ ‫أن‬ ‫ھو‬ ‫ب‬ ‫مطعم‬)‫الموزونة‬ ‫العالمة‬(‫شكل‬ ‫على‬٥‫نجوم‬+‫رقما‬ ‫الموزونة‬ ‫العالمة‬+‫عدد‬ ‫رقما‬ ‫األصوات‬)‫بحسب‬ ‫المطاعم‬ ‫لمقارنة‬ ‫األنسب‬ ‫المعيار‬ ‫ھي‬ ‫الموزونة‬ ‫العالمة‬ ‫قيم‬ ‫موقع‬.( ‫الخريطة‬ ‫واجھة‬: ‫يتم‬ ‫بحيث‬ ‫غوغل‬ ‫خريطة‬ ‫على‬ ‫ومكانه‬ ‫المطعم‬ ‫اسم‬ ‫فيھا‬ ‫يظھر‬ ‫التي‬ ‫الواجھة‬ ‫وھي‬ ‫خضراء‬ ‫بنقطة‬ ‫المطعم‬ ‫مكان‬ ‫تمثيل‬. ‫المجموعات‬ ‫تصميم‬ ‫الى‬ ‫اآلن‬ ‫نأتي‬ ،‫الواجھات‬ ‫تصميم‬ ‫بعد‬Classes‫والدوال‬ Methods‫بالتطبيق‬ ‫الخاصة‬.‫جاھدين‬ ‫سنقوم‬‫بإتباع‬‫تصميم‬ ‫في‬ ‫السبل‬ ‫أفضل‬ ‫وظيفتھا‬ ‫وفھم‬ ‫فھمھا‬ ‫القارىء‬ ‫على‬ ‫يسھل‬ ‫بشكل‬ ‫المجموعات‬)‫شرحنا‬ ‫في‬ ‫نفترض‬ ‫الجافا‬ ‫بلغة‬ ‫القارىء‬ ‫إلمام‬-‫مستوى‬‫مبتدئ‬‫متقدم‬-‫التي‬ ‫األكواد‬ ‫فھم‬ ‫من‬ ‫وتمكنه‬ ‫الكتاب‬ ‫ھذا‬ ‫من‬ ‫السابقة‬ ‫الصفحات‬ ‫في‬ ‫عرضناھا‬(
  • 136. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 136 ‫بھا‬ ‫يقترن‬ ‫واجھة‬ ‫كل‬ ‫فإن‬ ‫نعرف‬ ‫كما‬ ‫بداية‬‫خاصة‬ ‫مجموعة‬‫إضافة‬ ‫بھا‬‫إلى‬‫ملف‬ XML‫إظھارھا‬ ‫المطلوب‬ ‫المرئية‬ ‫العناصر‬ ‫على‬ ‫يحتوي‬)‫الشعار‬+‫في‬ ‫زر‬ ‫مثال‬ ‫األولى‬ ‫الواجھة‬(‫أننا‬ ‫يعني‬ ‫وھذا‬‫بحاجة‬‫إلى‬٣‫و‬ ‫جافا‬ ‫مجموعات‬٣‫ملفات‬ XML‫التالي‬ ‫بالشكل‬: ‫ھي‬ ‫األولى‬ ‫الواجھة‬ ‫طبعا‬intro‫ھي‬ ‫والثانية‬Best50‫ھي‬ ‫والثالثة‬ ViewOnMapActivity. ‫المساعدة‬ ‫المجموعات‬ ‫من‬ ‫عدد‬ ‫لدينا‬ ‫يوجد‬ ،‫أعاله‬ ‫مجموعات‬ ‫الثالث‬ ‫الى‬ ‫باإلضافة‬ ‫التالي‬ ‫النحو‬ ‫على‬ ‫وھي‬: RestDroidApplication.java ‫لھا‬ ‫أطفاال‬ ‫المجموعات‬ ‫باقي‬ ‫تعتبر‬ ‫التي‬ ‫األم‬ ‫المجموعة‬ ‫وھي‬“‫بوراثة‬ ‫تقوم‬ ‫كونھا‬ ‫مجموعة‬Application‫األنشطة‬ ‫حكما‬ ‫تحتھا‬ ‫تندرج‬ ‫والتي‬Activities ‫والمجموعات‬Classes‫التطبيق‬ ‫في‬ ‫الموجودة‬”.‫وضع‬ ‫ھو‬ ‫تواجدھا‬ ‫من‬ ‫الھدف‬
  • 137. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 137 ‫الكود‬ ‫يتكرر‬ ‫ال‬ ‫بحيث‬ ‫فيھا‬ ‫المجموعات‬ ‫بين‬ ‫المشتركة‬ ‫الدوال‬‫في‬ ‫للدوال‬ ‫البرمجي‬ ‫مجموعة‬ ‫من‬ ‫أكثر‬.‫والتي‬ ‫العامة‬ ‫للمتغيرات‬ ‫كمستودع‬ ‫استخدامھا‬ ‫الى‬ ‫باإلضافة‬ ‫اليھا‬ ‫الدخول‬ ‫مجموعة‬ ‫ألي‬ ‫يمكن‬Global Variables (‫سيتم‬ ‫المتغيرات‬ ‫ھذه‬ ‫مجموعة‬ ‫تطلبھا‬ ‫التي‬ ‫القيم‬ ‫لتمرير‬ ‫كوسيلة‬ ‫توظيفھا‬‫التي‬ ‫المجموعة‬ ‫من‬ ‫واجھة‬ ‫قبلھا‬.(‫بحا‬ ‫لسنا‬ ‫أننا‬ ‫آخر‬ ‫بمعنى‬‫كل‬ ‫في‬ ‫المجموعات‬ ‫من‬ ‫النوع‬ ‫لھذا‬ ‫اللجوء‬ ‫الى‬ ‫جة‬ ‫المجموعات‬ ‫بين‬ ‫المشتركة‬ ‫الدوال‬ ‫من‬ ‫عدد‬ ‫وجود‬ ‫حالة‬ ‫في‬ ‫ولكن‬ ،‫نبرمجه‬ ‫تطبيق‬ ‫الدوال‬ ‫ھذه‬ ‫على‬ ‫التعديل‬ ‫بعد‬ ‫فيما‬ ‫ليسھل‬ ‫واحد‬ ‫مكان‬ ‫في‬ ‫وضعھا‬ ‫يفضل‬ ‫فإنه‬. RatedItem.java ‫لكائن‬ ‫بسيطة‬ ‫مجموعة‬ ‫وھي‬Object‫المطعم‬ ‫يمثل‬.‫لديه‬ ‫المطعم‬ ‫ھذا‬‫الخصائص‬ ‫التالية‬:‫مميز‬ ‫رقم‬+‫اسم‬+‫األصوات‬ ‫عدد‬+‫الموزونة‬ ‫العالمة‬. RatedRestaurantListItem.java ‫بھا‬ ‫ويقترن‬ rest_list_item.xml ‫بكل‬ ‫الخاص‬ ‫العرض‬ ‫قالب‬ ‫تكوين‬ ‫ھو‬ ‫ال‬ ‫ام‬ ‫االكس‬ ‫وملف‬ ‫المجموعة‬ ‫ھذه‬ ‫ودور‬ ‫مطعم‬.‫الواجھة‬ ‫في‬ ‫يظھر‬ ‫ال‬ ‫ام‬ ‫االكس‬ ‫ملف‬ ‫في‬ ‫وضعه‬ ‫يتم‬ ‫ما‬ ‫فإن‬ ‫نعرف‬ ‫كما‬‫عند‬ ‫به‬ ‫وضعنا‬ ‫فإذا‬ ،‫تشغيلھا‬٣‫ھي‬ ‫كما‬ ‫ستظھر‬ ،‫وصورة‬ ‫أزرار‬.‫السؤال‬‫لو‬ ‫ماذا‬ ‫ھو‬ ‫عدد‬ ‫مع‬ ‫حالتنا‬ ‫في‬ ‫يتناسب‬ ‫تفاعلي‬ ‫بشكل‬ ‫وتتشكل‬ ‫الواجھة‬ ‫تتغير‬ ‫أن‬ ‫نريد‬ ‫كنا‬ ‫المطاعم‬)‫وھو‬ ‫ثابت‬ ‫رقم‬ ‫لدينا‬ ‫التطبيق‬ ‫ھذا‬ ‫في‬٥٠‫التطبيق‬ ‫في‬ ‫ولكن‬ ،‫مطعما‬ ‫من‬ ‫أكثر‬ ‫المدن‬ ‫احدى‬ ‫تملك‬ ‫ال‬ ‫قد‬ ،‫األشمل‬٣٠‫مط‬‫عما‬(‫نريد‬ ‫ال‬ ‫أننا‬ ‫الى‬ ‫أضف‬ ‫الواجھة‬ ‫عناصر‬ ‫تكرار‬٥٠‫مرة؟‬ ‫واحد‬ ‫بعنصر‬ ‫الخاصة‬ ‫الواجھة‬ ‫بتشكيل‬ ‫ھو‬ ‫الحل‬)‫واحد‬ ‫مطعم‬ ‫أي‬(‫والتحكم‬ ‫عنصر‬ ‫كل‬ ‫ومحتوى‬ ‫التكرار‬ ‫مرات‬ ‫بعدد‬ ‫برمجيا‬)‫لمجموعة‬ ‫الحاجة‬ ‫تأتي‬ ‫وھنا‬ RatedItem.java‫عنصر‬ ‫كل‬ ‫معلومات‬ ‫منھا‬ ‫سنستقي‬ ‫والتي‬.(
  • 138. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 138 ‫الشكل‬١ AddressOverlay.java ‫نقطة‬ ‫رسم‬ ‫يمكننا‬ ‫بحيث‬ ‫الخريطة‬ ‫فوق‬ ‫تظھر‬ ‫كطبقة‬ ‫استخدامھا‬ ‫يتم‬ ‫المجموعة‬ ‫ھذه‬ ‫المطعم‬ ‫لموقع‬ ‫المقابل‬ ‫المكان‬ ‫في‬ ‫خضراء‬. ‫إذ‬‫الشكل‬ ‫في‬ ‫ھو‬ ‫كما‬ ‫للمجموعات‬ ‫النھائي‬ ‫الشكل‬ ‫لدينا‬ ‫يصبح‬٢.
  • 139. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 139 ‫الشكل‬٢ ‫نالحظ‬‫يلي‬ ‫ما‬ ‫أعاله‬ ‫الشكل‬ ‫من‬: -‫مجموعة‬RestDroidApplication.java‫أصب‬‫حت‬‫تستطيع‬ ‫عامة‬ ‫مجموعة‬ ‫مجموعة‬ ‫خصائص‬ ‫ورثت‬ ‫األولى‬ ‫كون‬ ‫معھا‬ ‫التواصل‬ ‫المجموعات‬ ‫باقي‬ Application‫األندرويد‬ ‫تطبيق‬ ‫جسد‬ ‫تمثل‬ ‫التي‬ ‫المجموعة‬ ‫وھي‬)‫التطبيق‬ ‫أن‬ ‫أي‬ Application‫نشاط‬ ‫مجموعة‬ ‫من‬ ‫مكون‬Activity‫أكثر‬ ‫أو‬ ‫واحدة‬.( -‫من‬ ‫خصائصھا‬ ‫تستمد‬ ‫التي‬ ‫الثالث‬ ‫المجموعات‬Activity‫تستطيع‬ ‫أنھا‬ ‫يجمعھا‬ ‫السابقة‬ ‫المجموعة‬ ‫أي‬ ،‫يحتويھا‬ ‫الذي‬ ‫الجسد‬ ‫ومتغيرات‬ ‫دوال‬ ‫رؤية‬. -‫مساعد‬ ‫ذكرنا‬ ‫كما‬ ‫ھي‬ ‫الباقية‬ ‫المجموعات‬(Auxiliary)‫من‬ ‫يستفيد‬ ‫وبعضھا‬ ‫وتعريفھا‬ ‫صياغتھا‬ ‫ويعيد‬ ‫أعلى‬ ‫مجموعات‬ ‫خصائص‬)‫كمجموعتي‬ RatedRestaurantListItem.java‫و‬AddressOverlay.java)‫وھو‬‫ما‬ ‫سيت‬‫م‬‫الحقا‬ ‫توضيحه‬. -‫مجموعة‬RatedRestaurantListItem.java‫بملف‬ ‫ترتبط‬ rest_list_item.xml‫بملفات‬ ‫المجموعات‬ ‫باقي‬ ‫الرتباط‬ ‫ما‬ ‫نوعا‬ ‫مغاير‬ ‫بشكل‬ ‫القادم‬ ‫الشرح‬ ‫في‬ ‫جليا‬ ‫سيبرز‬ ‫وھذا‬ ‫خاصتھا‬ ‫ال‬ ‫ام‬ ‫االكس‬)‫وصل‬ ‫تم‬ ‫لذلك‬ ‫أسود‬ ‫وليس‬ ‫رمادي‬ ‫بخط‬ ‫وملفھا‬ ‫المجموعة‬.( ‫التطبي‬ ‫إنشاء‬‫ق‬: ‫والتوجه‬ ‫االكليبس‬ ‫بتشغيل‬ ‫نقوم‬‫إلى‬‫قائمة‬File>new>project ‫مجلد‬ ‫بفتح‬ ‫نقوم‬Android‫منه‬ ‫ونختار‬Android Project
  • 140. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 140 ‫نقوم‬ ‫ثم‬‫بمليء‬‫التالية‬ ‫الصور‬ ‫في‬ ‫لما‬ ‫مشابه‬ ‫بشكل‬ ‫البيانات‬:
  • 142. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 142 ‫تعريف‬ ‫علينا‬ ‫يتوجب‬ ،‫المشروع‬ ‫داخل‬ ‫العربية‬ ‫األحرف‬ ‫استخدام‬ ‫من‬ ‫نتمكن‬ ‫حتى‬ ‫ليك‬ ‫الترميز‬‫ون‬UTF-8‫المشروع‬ ‫في‬.‫المشروع‬ ‫اسم‬ ‫على‬ ‫األيمن‬ ‫بالزر‬ ‫اضغط‬ ‫ثم‬ ‫ومن‬Properties:
  • 143. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 143 ‫مجموعة‬ ‫بإنشاء‬ ‫اآلن‬ ‫نقوم‬Class‫بمسمى‬intro: ‫بھا‬ ‫الخاصة‬ ‫البيانات‬ ‫ونمأل‬:
  • 144. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 144 (‫المنشأة‬ ‫المجموعة‬ ‫تعلو‬ ‫التي‬ ‫المجموعة‬ ‫اسم‬ ‫الحظ‬android.app.Activity ) ‫ا‬ ‫الكود‬ ‫كتابة‬ ‫في‬ ‫الشروع‬ ‫قبل‬‫المجموعة‬ ‫بھذه‬ ‫الخاص‬ ‫لبرمجي‬)‫ستقترن‬ ‫والتي‬ ‫للمستخدم‬ ‫ستظھر‬ ‫التي‬ ‫اإلبتدائية‬ ‫بالواجھة‬(‫الواجھة‬ ‫بإنشاء‬ ‫نقوم‬ ‫أن‬ ‫يفضل‬ ، ‫المرئية‬.‫ملف‬ ‫باستخدام‬ ‫نقوم‬ ،‫ذلك‬ ‫لعمل‬main.xml‫تم‬ ‫الذي‬‫إنشاؤه‬‫عند‬ ‫تلقائيا‬ ‫المشروع‬ ‫إنشاء‬.
  • 145. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 145 ‫الشكل‬ ‫على‬ ‫وستكون‬ ،‫جدا‬ ‫بسيطة‬ ‫تصميمھا‬ ‫نريد‬ ‫التي‬ ‫الواجھة‬‫التالي‬: ‫زر‬ ،‫المنتصف‬ ‫في‬ ‫تظھر‬ ‫صورة‬ ،‫بيضاء‬ ‫خلفية‬. ‫ملف‬ ‫سنترك‬ ،‫البيضاء‬ ‫للخلفية‬ ‫بالنسبة‬main.xml‫نسميه‬ ‫ملف‬ ‫بإنشاء‬ ‫ونقوم‬ ‫قليال‬ ‫مثال‬colors.xml‫مجلد‬ ‫تحت‬ ‫ونضعه‬values (‫بالزر‬ ‫بالضغط‬ ‫اإلنشاء‬ ‫يتم‬ ‫مجلد‬ ‫على‬ ‫األيمن‬values‫ثم‬ ‫ومن‬new>file>colors.xml .‫ملفات‬ ‫تسمية‬ ‫ا‬ ‫االكس‬‫يجب‬ ‫ال‬ ‫م‬‫أن‬‫صغيرة‬ ‫حروف‬ ‫باستخدام‬ ‫تتم‬lower case‫أن‬ ‫وعليھا‬ ‫الرموز‬ ‫من‬ ‫تخلو‬). ‫الملف‬ ‫محتوى‬: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="background">#FFFFFFFF</color> </resources>
  • 146. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 146 ‫فباستخدا‬ ،‫التطوير‬ ‫عملية‬ ‫في‬ ‫مھم‬ ‫دور‬ ‫له‬ ‫الملفات‬ ‫من‬ ‫النوع‬ ‫ھذا‬‫أسماء‬ ‫م‬ ‫قيم‬ ‫تعديل‬ ‫مجرد‬ ‫بعد‬ ‫فيما‬ ‫يمكنك‬ ،‫البرمجي‬ ‫الكود‬ ‫في‬ ‫بداخله‬ ‫الموجودة‬ ‫المتغيرات‬ ‫ككل‬ ‫البرنامج‬ ‫في‬ ‫الجديدة‬ ‫القيمة‬ ‫استخدام‬ ‫ليتم‬ ‫الملف‬ ‫ھذا‬ ‫في‬ ‫المتغيرات‬.‫وھذا‬ ‫ملف‬ ‫على‬ ‫ينطبق‬ ‫األمر‬strings.xml‫متغيرات‬ ‫تعريف‬ ‫يتم‬ ‫وفيه‬ ‫المجلد‬ ‫نفس‬ ‫في‬ ‫اإلشارة‬ ‫يتم‬ ‫نصية‬‫إليھا‬‫في‬ ‫باالسم‬،‫النصوص‬ ‫ھذه‬ ‫قيم‬ ‫تغيير‬ ‫يراد‬ ‫وعندما‬ ،‫الكود‬ ‫نلجأ‬ ،‫البرمجي‬ ‫الكود‬ ‫في‬ ‫متغير‬ ‫كل‬ ‫عن‬ ‫البحث‬ ‫من‬ ‫فبدال‬‫إلى‬‫تحديدا‬ ‫الملف‬ ‫ھذا‬ ،‫بداخله‬ ‫الموجودة‬ ‫القيم‬ ‫ونغير‬‫الطريقة‬ ‫ھذه‬ ‫أتبع‬ ‫ال‬ ‫لألسف‬ ‫ولكنني‬‫أقوم‬ ‫حيث‬ ‫فمعذرة‬ ،‫الكود‬ ‫داخل‬ ‫النصوص‬ ‫بكتابة‬. ‫اآلن‬ ‫نعود‬‫إلى‬‫الـ‬ ‫ملف‬main.xml‫ونضيف‬ ،‫التالي‬: <!-- ‫ونوع‬ ‫المستخدمة‬ ‫النسخة‬ ‫يعرف‬ ‫وھو‬ ‫متواجدا‬ ‫يكون‬ ‫أن‬ ‫يجب‬ ‫السطر‬ ‫ھذا‬ ‫الترميز‬ --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout "dhttp://schemas.android.com/apk/res/androi"=xmlns:android android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/background"> <RelativeLayout "http://schemas.android.com/apk/res/android"=xmlns:android android:layout_width="fill_parent" android:layout_height="fill_parent"> <!--‫مصدرھا‬ ‫وتحديد‬ ‫الصورة‬ ‫لتعريف‬ ‫يستخدم‬ --> <ImageView
  • 147. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 147 android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/andbooklogo" android:adjustViewBounds="true" android:layout_centerHorizontal="true" > </ImageView> <!--‫الزر‬ ‫لتعريف‬ ‫يستخدم‬ --> <Button android:id="@+id/search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/ImageView01" android:paddingLeft="20px" android:paddingRight="20px" android:layout_centerInParent="true" android:layout_marginTop="20px" /> </RelativeLayout> </LinearLayout> ‫في‬ ‫أننا‬ ‫نالحظ‬ImageView‫است‬ ‫نريد‬ ‫التي‬ ‫الصورة‬ ‫مصدر‬ ‫بإضافة‬ ‫قمنا‬‫خدامھا‬. ‫الصورة‬ ‫إلضافة‬‫إلى‬‫وسحبھا‬ ‫عليھا‬ ‫بالضغط‬ ‫نقوم‬ ،‫المشروع‬‫إلى‬‫مجلد‬ res/drawable-hdpi‫أو‬res/drawable‫الموجود‬ ‫بحسب‬)‫استخدام‬ ‫يمكنكم‬ ‫الموقع‬ ‫على‬ ‫التطبيق‬ ‫ملفات‬ ‫في‬ ‫الموجودة‬ ‫تلك‬ ‫أو‬ ‫لديكم‬ ‫صورة‬). ‫عن‬ ‫ماذا‬ ‫ھو‬ ‫القادم‬ ‫السؤال‬LinearLayout‫و‬RelativeLayout‫للتعرف‬ ‫؟‬ ‫علي‬‫الملحق‬ ‫لقراءة‬ ‫أدعوكم‬ ،‫ھا‬“‫أ‬”‫الكتاب‬ ‫ھذا‬ ‫من‬.
  • 148. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 148 ‫بشرح‬ ‫أقم‬ ‫لم‬RelativeLayout‫ولكنه‬ ‫المبدأ‬ ‫في‬ ‫الباقية‬ ‫األوعية‬ ‫مع‬ ‫يتشابه‬ ‫كونه‬ ‫العناصر‬ ‫ترتيب‬ ‫أن‬ ‫في‬ ‫عنھم‬ ‫يختلف‬)‫وغيرھا‬ ‫والصور‬ ‫األزرار‬(‫بنسبة‬ ‫يكون‬ ‫بعضھا‬ ‫بين‬ ‫أماكنھا‬.‫الى‬ ‫محاذاته‬ ‫مع‬ ‫الصورة‬ ‫أسفل‬ ‫زر‬ ‫بوضع‬ ‫رغبت‬ ‫اذا‬ ‫بمعنى‬ ‫ال‬‫أسفل‬ ‫سيقع‬ ‫بأنه‬ ‫الزر‬ ‫ستعرف‬ ‫حيث‬ ‫اإلمكانية‬ ‫ھذه‬ ‫سيعطيك‬ ‫الوعاء‬ ‫فھذا‬ ،‫يمين‬ ‫محاذاته‬ ‫مع‬ ‫الصورة‬‫إلى‬‫اليمين‬.‫تفسير‬ ‫وھذا‬android:layout_below‫في‬ ‫ھي‬ ‫المعطاة‬ ‫والقيمة‬ ،‫الزر‬ ‫تعريف‬‫رقم‬‫معرف‬‫الصورة‬. ‫زر‬ ‫على‬ ‫بالضغط‬ ‫استعراضھا‬ ‫ويمكننا‬ ،‫المرئية‬ ‫الواجھة‬ ‫عمل‬ ‫من‬ ‫انتھينا‬ Layout‫الشكل‬ ‫في‬ ‫كما‬: ‫المجموعة‬ ‫لملف‬ ‫نعود‬ ‫واآلن‬intro .‫التالي‬ ‫سيكون‬ ‫الكود‬) :‫على‬ ‫بالشرح‬ ‫سأقوم‬ ‫الكود‬) package android.prog.easily;
  • 149. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 149 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class intro extends Activity { //‫زر‬ ‫نوع‬ ‫من‬ ‫متغير‬ ‫تعريف‬ private Button getbest50; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //‫ملف‬ ‫نستخدم‬main‫المرئية‬ ‫الواجھة‬ ‫أجل‬ ‫من‬ setContentView(R.layout.main); setUpViews(); } private void setUpViews() { getbest50 = (Button)findViewById(R.id.search); getbest50.setText("‫أفضل‬٥٠‫مطعم‬"); //‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫سيتم‬ ‫ماذا‬ ‫تعريف‬ getbest50.setOnClickListener(new View.OnClickListener() { public void onClick(View v)
  • 150. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 150 { top50Handler(); } }); } protected void top50Handler() { } } ‫التالي‬ ‫ھو‬ ‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫عمله‬ ‫علينا‬ ‫يتوجب‬ ‫ما‬: ‫أفضل‬ ‫وجلب‬ ‫باالنترنت‬ ‫االتصال‬٥٠‫و‬ ،‫الرياض‬ ‫مدينة‬ ‫في‬ ‫مطعما‬‫االنتقال‬ ‫ثم‬ ‫من‬ ‫إلى‬‫وتقييماتھا‬ ‫المطاعم‬ ‫تعرض‬ ‫واجھة‬. ‫ملف‬ ‫ونترك‬ ‫قليال‬ ‫ھنا‬ ‫سنتوقف‬intro.java (‫على‬ ‫تشغيله‬ ‫بالمناسبة‬ ‫يمكنك‬ ‫والذي‬ ‫شيئا‬ ‫يحصل‬ ‫ولن‬ ،‫الحالي‬ ‫شكله‬ ‫ورؤية‬ ‫المحاكي‬‫إذا‬‫الزر‬ ‫على‬ ‫ضغطنا‬(‫ونقوم‬ ‫المجموعة‬ ‫بتعريف‬RatedItem.java‫التالي‬ ‫بالشكل‬: package android.prog.easily; import java.io.Serializable; public class RatedItem implements Serializable { private static final long serialVersionUID = 5500258407135652423L;
  • 151. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 151 private String name; private int id; private int voteCount; private double wScore; public RatedItem(String name, int id, int voteCount, double wScore) { this.name = name; this.id = id; this.voteCount = voteCount; this.wScore = wScore; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) {
  • 152. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 152 this.id = id; } public int getVoteCount() { return voteCount; } public void setVoteCount(int voteCount) { this.voteCount = voteCount; } public double getwScore() { return wScore; } public void setwScore(int wScore) { this.wScore = wScore; } } ‫ملف‬ ‫بإنشاء‬ ‫سنقوم‬ ‫واآلن‬RestDroidApplication.java‫قلنا‬ ‫كما‬ ‫والذي‬ ‫واألنشطة‬ ‫الواجھات‬ ‫لجميع‬ ‫يمكن‬ ‫ومتغيرات‬ ‫دوال‬ ‫على‬ ‫سيحتوي‬Activities ‫استخدامھ‬‫ا‬)‫مرات‬ ‫عدة‬ ‫األنشطة‬ ‫كل‬ ‫في‬ ‫نفسھا‬ ‫الدوال‬ ‫لنسخ‬ ‫داعي‬ ‫ال‬ ‫أي‬).
  • 153. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 153 ‫يلي‬ ‫ما‬ ‫تحتوي‬ ‫المجموعة‬: package android.prog.easily; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.app.Application; public class RestDroidApplication extends Application { API KeyQaym‫قيم‬ ‫موقع‬ ‫من‬ ‫عليه‬ ‫الحصول‬ ‫يتوجب‬// private String key = "xxxxxxxxxxxxxxxxxxxx"; private int[] countryAndCityIds; private JSONObject[] ratedRestaurants; ;globalAdapterData>RatedItemArrayList<private ;itemOnMapRatedItemprivate private String branchesDetailsText; public String getBranchesDetailsText()
  • 154. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 154 { return branchesDetailsText; } public void setBranchesDetailsText(String branchesDetailsText) { this.branchesDetailsText = branchesDetailsText; } getItemOnMap()RatedItempublic { ;itemOnMapreturn } itemOnMap)RatedItemsetItemOnMap(voidpublic { = itemOnMap;itemOnMap.this } @Override public void onCreate() { super.onCreate(); } @Override public void onTerminate() { super.onTerminate(); }
  • 155. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 155 //‫طلب‬ ‫بعمل‬ ‫تقوم‬ ‫دالة‬HTTP‫المعطى‬ ‫الموقع‬ ‫معلومات‬ ‫من‬ ‫للحصول‬ ‫بروتوكول‬ ‫عبر‬REST public String queryRESTurl(String url) { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); HttpResponse response; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); String result1 = convertStreamToString(instream); instream.close(); return result1; } } catch (IOException e)
  • 156. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 156 { } return null; } //‫المستلمة‬ ‫المعلومات‬ ‫بتحويل‬ ‫تقوم‬ ‫دالة‬‫إلى‬‫صيغة‬String‫يمكن‬ ‫معھا‬ ‫التعامل‬ public String convertStreamToString(InputStream is) throws IOException { if (is != null) { StringBuilder sb = new StringBuilder(); String line; try { BufferedReader reader = new BufferedReader(new while ((line = reader.readLine()) != null) { sb.append(line).append("n"); } } finally { is.close(); }
  • 157. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 157 return sb.toString(); } else { return ""; } } /* ‫الترميز‬ ‫تتبع‬ ‫قيم‬ ‫من‬ ‫المستلمة‬ ‫المعلومات‬JSON‫البرمجية‬ ‫المكتبة‬ ‫ولكن‬ ‫مختلف‬ ‫بشكل‬ ‫الترميز‬ ‫مع‬ ‫تتعامل‬ ‫الترميز‬ ‫اسم‬ ‫نفس‬ ‫تحمل‬ ‫والتي‬ ‫بالجافا‬ ‫الموجودة‬ ‫ا‬ ‫على‬ ‫التغييرات‬ ‫بعض‬ ‫لعمل‬ ‫اضطررت‬ ‫لذلك‬ ‫ما‬ ‫نوعا‬‫من‬ ‫ألتمكن‬ ‫المستلمة‬ ‫لقيم‬ ‫عناصر‬ ‫من‬ ‫مصفوفة‬ ‫في‬ ‫وتعبئتھا‬ ‫استخالصھا‬JSON‫معھا‬ ‫التعامل‬ ‫يسھل‬ ‫التي‬ ‫وقيمة‬ ‫مفتاح‬ ‫نمط‬ ‫على‬ ‫تعمل‬ ‫ألنھا‬Key/value ..‫البرمجي‬ ‫السياق‬ ‫تتبع‬ ‫يمكنكم‬ ‫اتبعتھا‬ ‫التي‬ ‫الطريقة‬ ‫لمعرفة‬ ‫للكود‬)‫بسيطة‬ ‫وھي‬..(‫صفحة‬ ‫مراجعة‬ ‫يلزمكم‬ ‫كما‬ ‫توثيق‬"‫قيم‬"‫ورؤية‬ ‫ال‬‫فيھا‬ ‫يتم‬ ‫التي‬ ‫صيغة‬‫إرسال‬‫الجافا‬ ‫تقبلھا‬ ‫التي‬ ‫بالصيغة‬ ‫ومقارنتھا‬ ‫البيانات‬ ‫الـ‬ ‫لعناصر‬JSON */ public JSONObject[] retrieveJSONs(String urlString) { String result = queryRESTurl(urlString); JSONObject[] jarr = null; if (result != null) { try { result = result.substring(1, result.length()- 1);
  • 158. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 158 int counter = 0; boolean firstSeen = false; boolean secondSeen = false; //‫حل‬‫نوع‬ ‫من‬ ‫قة‬for‫المستلمة‬ ‫العناصر‬ ‫عدد‬ ‫لمعرفة‬ ‫عناصر‬ ‫عدد‬ ‫تحديد‬ ‫وبالتالي‬JSON‫المطلوبة‬ for (int i = 0; i < result.length(); i++) { if (result.charAt(i) == '{' && firstSeen == { firstSeen = true; counter++; } else if (result.charAt(i) == '{' && firstSeen ==true) { secondSeen = true; } if (result.charAt(i) == '}' && secondSeen ==true) { secondSeen = false; } else if (result.charAt(i) == '}' && secondSeen ==false) { firstSeen = false;
  • 159. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 159 } } jarr = new JSONObject [counter]; int ind1 = 0; int ind2 = 0; boolean firstSeenS = false; boolean secondSeenS = false; //‫عناصر‬ ‫إلنشاء‬ ‫حلقة‬JSON for (int i = 0; i < result.length(); i++) { firstSeenS = false; secondSeenS = false; if (result.charAt(i) == '{' && firstSeenS ==false) { firstSeenS = true; ind1 = i; for (int j = i+1; j < result.length(); j++) { if (result.charAt(j) == '{' && { secondSeenS = true; }
  • 160. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 160 if (result.charAt(j) == '}' && { secondSeenS = false; } else if (result.charAt(j) == '}' && secondSeenS == false) { String mid = jarr[ind2] = new ind2++; i = j; break; } } } } } catch (JSONException e) { } } return jarr; } //‫ال‬ ‫لطلب‬ ‫الكامل‬ ‫النص‬ ‫بعمل‬ ‫تقوم‬ ‫دالة‬API‫له‬ ‫المفتاح‬ ‫بإضافة‬ ‫وتقوم‬ public String getUrlStringCommand(String command)
  • 161. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 161 { ;"http://api.qaym.com/0.1/"String service_url = String url = ""; url = service_url + command + "/key=" + key; return url; } public void setCountryAndCityIds(int[] countryAndCityIds) { this.countryAndCityIds = countryAndCityIds; } public int[] getCountryAndCityIds() { return countryAndCityIds; } public JSONObject[] getRatedRestaurants() { return ratedRestaurants; } public void setRatedRestaurants(JSONObject[] ratedRestaurants) { this.ratedRestaurants = ratedRestaurants; } > getGlobalAdapterData()RatedItemArrayList<public
  • 162. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 162 { ;globalAdapterDatareturn } public void >RatedItemist<setGlobalAdapterData(ArrayL globalAdapter) { = globalAdapter;globalAdapterData.this } intgetGlobalAdapterDataItem(RatedItempublic position) { .get(position);globalAdapterDatareturn } } ‫بالعودة‬‫لملف‬intro.java‫التالي‬ ‫الكود‬ ‫بإضافة‬ ‫نقوم‬ ،: protected void top50Handler() { try { //‫ال‬ ‫نص‬ ‫عمل‬API‫أفضل‬ ‫بجلب‬ ‫الخاص‬٥٠‫مطعما‬ ‫الرياض‬ ‫مدينة‬ ‫من‬"‫بھا‬ ‫الخاص‬ ‫الكود‬٥٧" String attrcommand = "cities/" + "57" + "/items/top";
  • 163. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 163 //‫يسبقھا‬ ‫دالة‬ ‫استخدام‬ ‫بمجرد‬ accessApplicationMethods()‫نقوم‬ ‫أننا‬ ‫اعرفوا‬‫ملف‬ ‫من‬ ‫دالة‬ ‫باستخدام‬ RestDroidApplication.java String attributesCommand = accessApplicationMethods().getUrlStringCommand(attrcom mand); JSONObject[] topCities = accessApplicationMethods().retrieveJSONs(attributesComma nd); //‫مصفوفة‬‫نوع‬ ‫من‬ ‫بعناصر‬ ‫بتعبئتھا‬ ‫سنقوم‬ ReatedItem‫بكائنات‬ ‫باالستعانة‬ ‫الخاصة‬ ‫بمعلوماته‬ ‫عنصر‬ ‫كل‬ ‫وتزويد‬‫عناصر‬ JSON‫السابق‬ ‫السطر‬ ‫في‬ ‫بتكوينھا‬ ‫قمنا‬ ‫التي‬ ArrayList<RatedItem> sRest = new ArrayList<RatedItem>(); if (topCities != null) { for (int ff = 0; ff < topCities.length; ff++) { //‫من‬ ‫قيمة‬ ‫على‬ ‫الحصول‬ ‫كيفية‬ ‫الحظوا‬ ‫عنصر‬JSON‫مفتاح‬ ‫عبر‬"item_id"‫ذلك‬ ‫على‬ ‫وقس‬ int id = Integer.parseInt(topCities[ff].getString("item_id"));
  • 164. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 164 String name = topCities[ff].getString("item_name"); int voteConutt = Integer.parseInt(topCities[ff].getString("total_number_of_vot es")); double weScore = Double.parseDouble(topCities[ff].getString("weighted_score ")); //‫على‬ ‫لتكون‬ ‫الموزونة‬ ‫العالمة‬ ‫تعديل‬ ‫مقياس‬٥‫من‬ ‫بدال‬١٠ double weScoreR = weScore * 100; weScoreR = Math.round(weScoreR); weScoreR = weScoreR / 10 / 2; RatedItem singleRest = new RatedItem(name,id, voteConutt, weScoreR); sRest.add(singleRest); } } else { RatedItem singleRest = new RatedItem("Empty List",0, 0, 0); sRest.add(singleRest); }
  • 165. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 165 accessApplicationMethods().setGlobalAdapterData(sRest); goToBest50Act();// *** } catch (JSONException e) { } } //‫يستخد‬ ‫نشاط‬ ‫أي‬ ‫في‬ ‫تعريفھا‬ ‫يتم‬ ‫دالة‬‫المجموعة‬ ‫دوال‬ ‫م‬ RestDroidApplication.java‫بھا‬ ‫الموجودة‬ ‫الدوال‬ ‫دخول‬ ‫من‬ ‫بھا‬ ‫ونتمكن‬ protected RestDroidApplication accessApplicationMethods() { return (RestDroidApplication)getApplication(); } ‫أفضل‬ ‫جلب‬ ‫من‬ ‫تمكننا‬ ‫السابقة‬ ‫اإلضافة‬٥٠‫مطعما‬.‫اال‬ ‫لدينا‬ ‫وبقي‬‫للواجھة‬ ‫نتقال‬ ‫بـ‬ ‫له‬ ‫رمزت‬ ‫الذي‬ ‫السطر‬ ‫به‬ ‫يقوم‬ ‫ما‬ ‫وھذا‬ ،‫المطاعم‬ ‫تعرض‬ ‫التي‬: // *** ‫الدالة‬ ‫يستدعي‬ ‫والذي‬goToBest50Act‫التالي‬ ‫بالشكل‬ ‫ونعرفھا‬: protected void goToBest50Act() { );class.Best50,thisIntent(newIntent goToBest = startActivity(goToBest); }
  • 166. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 166 ‫ملف‬ ‫ليصبح‬intro.java‫التالي‬ ‫بالشكل‬: package android.prog.easily; import java.util.ArrayList; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class intro extends Activity { //‫زر‬ ‫نوع‬ ‫من‬ ‫متغير‬ ‫تعريف‬ private Button getbest50; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //‫ملف‬ ‫نستخدم‬main‫المرئية‬ ‫الواجھة‬ ‫أجل‬ ‫من‬ setContentView(R.layout.main); setUpViews(); } private void setUpViews()
  • 167. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 167 { getbest50 = (Button)findViewById(R.id.search); setText(" //‫س‬ ‫ماذا‬ ‫تعريف‬‫الزر‬ ‫على‬ ‫الضغط‬ ‫حال‬ ‫في‬ ‫يتم‬ getbest50.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { top50Handler(); } }); } protected void goToBest50Act() { );class.Best50,thisIntent(newIntent goToBest = startActivity(goToBest); } protected void top50Handler() { try { //‫ال‬ ‫نص‬ ‫عمل‬API‫أفضل‬ ‫بجلب‬ ‫الخاص‬٥٠‫مطعما‬ ‫الرياض‬ ‫مدينة‬ ‫من‬"‫بھا‬ ‫الخاص‬ ‫الكود‬٥٧" String attrcommand = "cities/" + "57" + "/items/top";
  • 168. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 168 //‫يسبقھا‬ ‫دالة‬ ‫استخدام‬ ‫بمجرد‬ accessApplicationMethods()‫ملف‬ ‫من‬ ‫دالة‬ ‫باستخدام‬ ‫نقوم‬ ‫أننا‬ ‫اعرفوا‬ RestDroidApplication.java String attributesCommand = accessApplicationMethods().getUrlStringCommand(attrcom mand); JSONObject[] topCities = accessApplicationMethods().retrieveJSONs(attributesComma nd); //‫نوع‬ ‫من‬ ‫بعناصر‬ ‫بتعبئتھا‬ ‫سنقوم‬ ‫مصفوفة‬ ReatedItem‫بكائنات‬ ‫باالستعانة‬ ‫الخاصة‬ ‫بمعلوماته‬ ‫عنصر‬ ‫كل‬ ‫وتزويد‬‫عناصر‬ JSON‫السابق‬ ‫السطر‬ ‫في‬ ‫بتكوينھا‬ ‫قمنا‬ ‫التي‬ ArrayList<RatedItem> sRest = new ArrayList<RatedItem>(); if (topCities != null) { for (int ff = 0; ff < topCities.length; ff++) { //‫من‬ ‫قيمة‬ ‫على‬ ‫الحصول‬ ‫كيفية‬ ‫الحظوا‬ ‫عنصر‬JSON‫مفتاح‬ ‫عبر‬"item_id"‫ذلك‬ ‫على‬ ‫وقس‬ int id = Integer.parseInt(topCities[ff].getString("item_id")); String name = topCities[ff].getString("item_name"); int voteConutt =
  • 169. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 169 Integer.parseInt(topCities[ff].getString("total_number_of_vot es")); double weScore = Double.parseDouble(topCities[ff].getString("weighted_score ")); //‫على‬ ‫لتكون‬ ‫الموزونة‬ ‫العالمة‬ ‫تعديل‬ ‫مقياس‬٥‫بدال‬‫من‬١٠ double weScoreR = weScore * 100; weScoreR = Math.round(weScoreR); weScoreR = weScoreR / 10 / 2; RatedItem singleRest = new RatedItem(name,id, voteConutt, weScoreR); sRest.add(singleRest); } } else { RatedItem singleRest = new RatedItem("Empty List",0, 0, 0); sRest.add(singleRest); } //‫المطاعم‬ ‫قائمة‬ ‫بتمرير‬ ‫نقوم‬ ‫أننا‬ ‫الحظوا‬‫إلى‬‫متغير‬ ‫في‬ ‫موجود‬RestDroidApplication.java‫وقراءة‬ ‫معه‬ ‫التعامل‬ ‫من‬ ‫لنتمكن‬ ‫وأنشطة‬ ‫مجموعات‬ ‫في‬ ‫محتواه‬Activities‫أخرى‬
  • 170. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 170 accessApplicationMethods().setGlobalAdapterData(sRest); goToBest50Act(); } catch (JSONException e) { } } //‫المجموعة‬ ‫دوال‬ ‫يستخدم‬ ‫نشاط‬ ‫أي‬ ‫في‬ ‫تعريفھا‬ ‫يتم‬ ‫دالة‬ RestDroidApplication.java‫والمتغيرات‬ ‫الدوال‬ ‫دخول‬ ‫من‬ ‫لنتمكن‬ ‫الموج‬‫األعلى‬ ‫في‬ ‫ھو‬ ‫كما‬ ‫بھا‬ ‫ودة‬ protected RestDroidApplication accessApplicationMethods() { return (RestDroidApplication)getApplication(); } } ‫نالحظ‬‫البيانات‬ ‫بعض‬ ‫بتمرير‬ ‫قمنا‬ ‫أننا‬ ‫األعلى‬ ‫في‬ ‫الكود‬ ‫من‬‫إلى‬‫موجودة‬ ‫متغيرات‬ ‫مجموعة‬ ‫في‬ RestDroidApplications ‫والس‬‫ھذه‬ ‫دخول‬ ‫من‬ ‫األخرى‬ ‫واألنشطة‬ ‫المجموعات‬ ‫لتمكين‬ ‫ھو‬ ‫قلنا‬ ‫كما‬ ‫بب‬ ‫المتغيرات‬.‫أستخدمھا‬ ‫أنني‬ ‫على‬ ‫الشرح‬ ‫ھذا‬ ‫في‬ ‫بھا‬ ‫أقوم‬ ‫ال‬ ‫أخرى‬ ‫طريقة‬ ‫ھناك‬ ‫ويمكن‬ ‫أساسي‬ ‫بشكل‬ ‫حاليا‬‫للقارئ‬‫إتباعھا‬‫إذا‬‫من‬ ‫كائن‬ ‫إنشاء‬ ‫وھي‬ ‫أفضل‬ ‫وجدھا‬ ‫مجموعة‬Intent (‫فعل‬ ‫بـ‬ ‫خاصة‬ ‫مجموعة‬ ‫بأنھا‬ ‫تعرف‬ ‫والتي‬action‫عمله‬ ‫نود‬( ‫الحالي‬ ‫النشاط‬ ‫من‬ ‫معينة‬ ‫بيانات‬ ‫بتمرير‬ ‫يقوم‬ ‫بحيث‬ ‫وبرمجته‬‫إلى‬‫آخر‬.
  • 171. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 171 ‫لم‬ ‫كوننا‬ ‫خطأ‬ ‫رسالة‬ ‫لنا‬ ‫ستظھر‬ ‫بالطبع‬‫ننشئ‬‫سننتقل‬ ‫التي‬ ‫المجموعة‬ ‫ملف‬‫إليھا‬ ‫سنسميھا‬ ‫والتي‬Best50.java.‫المجموعة‬ ‫إنشاء‬ ‫علينا‬ ‫يتوجب‬ ،‫إنشائھا‬ ‫قبل‬ ‫ولكن‬ ‫وھي‬ ‫لھا‬ ‫المساعدة‬: RatedRestaurantListItem.java ‫بھا‬ ‫ويقترن‬rest_list_item.xml‫تقوم‬ ‫المجموعة‬ ‫ھذه‬ ‫فإن‬ ‫قبل‬ ‫من‬ ‫ذكرنا‬ ‫وكما‬ ‫عنصر‬ ‫بكل‬ ‫الخاصة‬ ‫الواجھة‬ ‫بتشكيل‬)‫مطعم‬(-‫الشكل‬١-‫مرتبطة‬ ‫أنھا‬ ‫وبما‬ ‫قالب‬ ‫بوراثة‬ ‫المجموعة‬ ‫ھذه‬ ‫فستقوم‬ ،‫بالواجھات‬ ‫ومتعلقة‬‫مجموعة‬ RelativeLayout‫نريده‬ ‫الذي‬ ‫بالشكل‬ ‫عليه‬ ‫للتعديل‬.‫ھذ‬‫نقوم‬ ‫لن‬ ‫أننا‬ ‫يعني‬ ‫األمر‬ ‫ا‬ ‫وسم‬ ‫بوضع‬RelativeLayout‫الـ‬ ‫ملف‬ ‫في‬xml‫مجموعتنا‬ ‫اسم‬ ‫وإنما‬ ،‫المقترن‬ ‫الجديدة‬-‫قليل‬ ‫بعد‬ ‫ذلك‬ ‫سأوضح‬-. ‫ننشئ‬‫مجموعة‬RatedRestaurantListItem.java‫محتواھا‬ ‫ويكون‬: package android.prog.easily; import android.content.Context; import android.util.AttributeSet; import android.widget.RelativeLayout; public class RatedRestaurantListItem extends RelativeLayout { public RatedRestaurantListItem(Context context, AttributeSet attr) { super(context, attr); } } ‫بإنشاء‬ ‫ونقوم‬ ‫قليال‬ ‫ندعھا‬ ‫واآلن‬‫الـ‬ ‫ملف‬rest_list_item.xml‫المجلد‬ ‫داخل‬:
  • 172. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 172 res>layout (‫أنشئ‬‫مجلد‬ ‫على‬ ‫بالضغط‬ ‫جديد‬ ‫ملف‬layout‫ثم‬ ‫ومن‬ ‫باليمين‬ new>file).‫يلي‬ ‫ما‬ ‫ھو‬ ‫الملف‬ ‫بھذا‬ ‫الخاص‬ ‫المحتوى‬)‫والحظ‬)‫ـي‬(‫القالب‬ ‫وسم‬): <?xml version="1.0" encoding="utf-8"?> <android.prog.easily.RatedRestaurantListItem xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- ‫يمك‬ ‫عنصر‬‫المقابل‬ ‫في‬ ‫شيء‬ ‫وعمل‬ ‫الواجھة‬ ‫على‬ ‫الضغط‬ ‫من‬ ‫المستخدم‬ ‫ن‬ -- > <CheckedTextView android:layout_width="wrap_content" android:id="@+id/ctext" android:layout_height="wrap_content" android:textSize="30sp" > </CheckedTextView> <!-- ‫واستخدمنا‬ ،‫عليه‬ ‫التقييم‬ ‫لعرض‬ ‫عنصر‬‫األندرويد‬ ‫في‬ ‫مسبقا‬ ‫معرف‬ ‫ستايل‬ ‫لتكون‬ ‫وحددناھا‬ ‫النجوم‬ ‫من‬ ‫سطر‬ ‫وھو‬٥‫نجوم‬ --> <RatingBar android:id="@+id/rate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/ctext" android:numStars="5" style="?android:attr/ratingBarStyleIndicator" />
  • 173. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 173 <!--‫المطعم‬ ‫عليھا‬ ‫حصل‬ ‫التي‬ ‫العالمات‬ ‫لعرض‬ ‫نصية‬ ‫واجھات‬ --> <TextView android:id="@+id/ratedlabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/ctext" android:textSize="20sp" android:layout_toRightOf="@id/rate" android:paddingLeft="30px" /> <TextView android:id="@+id/scorelabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/rate" android:textSize="20sp" android:paddingTop="10px" android:paddingRight="10px" /> </android.prog.easily.RatedRestaurantListItem> ‫لملف‬ ‫نعود‬ ‫واآلن‬RatedRestaurantListItem.java‫باستخدام‬ ‫ونقوم‬ ‫عرضه‬ ‫نريدھا‬ ‫التي‬ ‫بالقيم‬ ‫ونربطھا‬ ‫لحظات‬ ‫منذ‬ ‫عرفناھا‬ ‫التي‬ ‫الواجھة‬ ‫عناصر‬ )‫المطعم‬ ‫معلومات‬ ‫وھي‬.(‫الك‬‫يصبح‬ ‫ود‬:
  • 174. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 174 package android.prog.easily; import android.prog.easily.R; import android.content.Context; import android.util.AttributeSet; import android.widget.CheckedTextView; import android.widget.RelativeLayout; import android.widget.TextView; public class RatedRestaurantListItem extends RelativeLayout { private CheckedTextView ratedButton; private RatedItem ratedItem1; private TextView texty; private TextView texty2; public RatedRestaurantListItem(Context context, AttributeSet attr) { super(context, attr); } //‫ال‬ ‫ملف‬ ‫في‬ ‫عرفناھا‬ ‫التي‬ ‫العناصر‬ ‫قراءة‬ ‫بعد‬ ‫تلقائيا‬ ‫استدعاؤھا‬ ‫يتم‬ ‫دالة‬ xml‫العناصر‬ ‫ھذه‬ ‫مع‬ ‫التعامل‬ ‫يمكننا‬ ‫وعندھا‬ @Override protected void onFinishInflate() { super.onFinishInflate(); ratedButton = (CheckedTextView)findViewById(R.id.ctext);
  • 175. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 175 texty = (TextView)findViewById(R.id.ratedlabel); texty2 = (TextView)findViewById(R.id.scorelabel); } //‫داخل‬ ‫لھا‬ ‫تمريره‬ ‫تم‬ ‫الذي‬ ‫العنصر‬ ‫وقيم‬ ‫معلومات‬ ‫بتعيين‬ ‫تقوم‬ ‫دالة‬ ‫الواجھة‬ ‫عناصر‬ public void setRatedItem(RatedItem ratedItem1) { this.ratedItem1 = ratedItem1; ratedButton.setText(ratedItem1.getName()); texty.setText("‫األصوات‬ ‫عدد‬: "+ratedItem1.getVoteCount()); texty2.setText("‫العالمة‬: "+ratedItem1.getwScore() + "/5"); } public RatedItem getRatedItem() { return ratedItem1; } } ‫لـ‬ ‫بالنسبة‬Best50.java،‫تعودنا‬ ‫وكما‬ ،‫سننشئ‬‫وھي‬ ‫أوال‬ ‫بھا‬ ‫الخاصة‬ ‫الواجھة‬: rated_rest_list.xml ‫التالي‬ ‫بالشكل‬ ‫وستكون‬: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout
  • 176. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 176 xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/RRselect" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@id/android:list" android:layout_below="@id/RRselect"/> </RelativeLayout> ‫المجموعة‬ ‫دور‬ ‫جاء‬ ‫اآلن‬Best50.java.‫بيانا‬ ‫بعرض‬ ‫ستقوم‬ ‫المجموعة‬ ‫ھذه‬‫ت‬ ‫أفضل‬٥٠‫الرياض‬ ‫في‬ ‫مطعما‬.‫األفضل‬ ‫فمن‬ ،‫قائمة‬ ‫شكل‬ ‫على‬ ‫ستكون‬ ‫أنھا‬ ‫وبما‬ ‫جزئية‬ ‫مجموعة‬ ‫استخدام‬‫مجموعة‬ ‫من‬ ‫خاصة‬Activity‫في‬ ‫استخدمناھا‬ ‫التي‬ intro.java.‫ھذه‬‫المجموعة‬‫ھي‬ListActivity‫القائمة‬ ‫أن‬ ‫يميزھا‬ ‫ما‬ ‫وأھم‬ List‫لد‬ ‫المعروفة‬ ‫المفاھيم‬ ‫أحد‬ ‫استخدام‬ ‫تتطلب‬ ‫تتبناھا‬ ‫التي‬‫البرمجيات‬ ‫مھندسي‬ ‫ى‬ ‫الوسيط‬ ‫مفھوم‬ ‫وھو‬Adapter‫التصميم‬ ‫أنماط‬ ‫أنواع‬ ‫أحد‬Design Patterns . ‫البيانات‬ ‫مع‬ ‫التعامل‬ ‫ھو‬ ‫الوسيط‬ ‫مھمة‬)‫المطاعم‬(،‫بھا‬ ‫الخاصة‬ ‫الواجھات‬ ‫وإنشاء‬ ‫المعلومات‬ ‫ھذه‬ ‫ستحتضن‬ ‫التي‬ ‫الرئيسية‬ ‫الواجھة‬ ‫لقائمة‬ ‫تمريرھا‬ ‫ثم‬ ‫ومن‬)‫أي‬ ‫بمجموعة‬ ‫المقترنة‬ ‫الواجھة‬Best50).‫مجموعة‬ ‫تداخل‬ ‫تقليل‬ ‫ھو‬ ‫األھداف‬ ‫أحد‬ Best50‫إضافة‬ ‫أو‬ ‫البيانات‬ ‫تغيير‬ ‫أردنا‬ ‫فلو‬ ،‫نفسھا‬ ‫البيانات‬ ‫مع‬ ‫وواجھتھا‬ ‫نضطر‬ ‫ولن‬ ،‫فقط‬ ‫الوسيط‬ ‫على‬ ‫بالتعديل‬ ‫حينھا‬ ‫سنقوم‬ ،‫عليھا‬ ‫جديدة‬ ‫خصائص‬‫إلى‬ ‫مجموعة‬ ‫كود‬ ‫تغيير‬Best50.java.‫تستخدمھا‬ ‫البيانات‬ ‫ھذه‬ ‫أن‬ ‫لو‬ ‫تخيل‬١٠ ‫وبش‬ ،‫مجموعات‬‫على‬ ‫التعديل‬ ‫األسھل‬ ‫من‬ ‫حينھا‬ ‫سيكون‬ ‫ھل‬ ،‫مختلفة‬ ‫وطلبات‬ ‫كل‬ ‫فقط‬ ‫الوسيط‬)‫كلھا‬ ‫العشر‬ ‫المجموعات‬ ‫معه‬ ‫تتخاطب‬ ‫والذي‬(‫المجموعات‬ ‫تعديل‬ ‫أم‬
  • 177. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 177 ‫الوسيط‬ ‫استخدام‬ ‫عدم‬ ‫حال‬ ‫في‬ ‫كلھا‬! ‫داخلية‬ ‫مجموعة‬ ‫شكل‬ ‫على‬ ‫سيكون‬ ‫بالوسيط‬ ‫الخاص‬ ‫الكود‬inner class‫ولكن‬ ‫منفصلة‬ ‫مجموعة‬ ‫في‬ ‫عمله‬ ‫يمكنكم‬. ‫كو‬‫التالي‬ ‫الشكل‬ ‫على‬ ‫المجموعة‬ ‫ھذه‬ ‫د‬: package android.prog.easily; import java.util.ArrayList; import android.app.Activity; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.RatingBar; import android.widget.TextView; public class Best50 extends ListActivity { private TextView selectAttr; private RatedRestaurantListAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) {
  • 178. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 178 super.onCreate(savedInstanceState); setContentView(R.layout.rated_rest_list); setUpViews(); } //‫ال‬ ‫بالفعل‬ ‫تقوم‬ ‫دالة‬‫المعروضة‬ ‫القيم‬ ‫أحد‬ ‫على‬ ‫الضغط‬ ‫تم‬ ‫حال‬ ‫في‬ ‫مناسب‬ ‫الشاشة‬ ‫على‬ @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); RatedItem ite = accessApplicationMethods().getGlobalAdapterDataItem(posi tion); accessApplicationMethods().setItemOnMap(ite); goToViewOnMapActivity(); } private void goToViewOnMapActivity() { ,thisIntent(newIntent goToMapActivity = startActivity(goToMapActivity); } private void setUpViews()
  • 179. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 179 { selectAttr = (TextView)findViewById(R.id.RRselect); selectAttr.setText("‫المطاعم‬ ‫أحد‬ ‫على‬ ‫اضغط‬"); //‫إنشاء‬‫القائمة‬ ‫مع‬ ‫اتصال‬ ‫على‬ ‫ليكون‬ ‫واستخدامه‬ ‫جديد‬ ‫وسيط‬ ‫النشاط‬ ‫ھذا‬ ‫أنشأھا‬ ‫التي‬ adapter = new RatedRestaurantListAdapter setListAdapter(adapter); } //‫داخلية‬ ‫مجموعة‬InnerClass‫الوسيط‬ ‫تعرف‬Adapter‫الذي‬ ‫منھا‬ ‫واحد‬ ‫بكل‬ ‫خاصة‬ ‫واجھة‬ ‫بإنشاء‬ ‫ويقوم‬ ‫المطاعم‬ ‫بيانات‬ ‫مع‬ ‫سيتعامل‬. //‫مخصصة‬ ‫بمجموعة‬ ‫سنستعين‬‫وھذه‬ ‫قوائم‬ ‫مع‬ ‫يتعامل‬ ‫وسيط‬ ‫لعمل‬ ‫ھي‬ ‫المجموعة‬ArrayAdapter class RatedRestaurantListAdapter extends ArrayAdapter<RatedItem> { Activity context; private ArrayList<RatedItem> myRatedItems; RatedRestaurantListAdapter(Activity context, { super(context, R.layout.rest_list_item, items); this.context=context; this.myRatedItems = items; } //‫عنصر‬ ‫كل‬ ‫بعرض‬ ‫الخاصة‬ ‫الواجھة‬ ‫بإنشاء‬ ‫تقوم‬ ‫دالة‬-‫الشكل‬ ‫في‬ ‫كما‬ ١- public View getView(int position, View
  • 180. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 180 convertView, ViewGroupparent) { RatedRestaurantListItem row = (RatedRestaurantListItem)convertView; if (null == row) { //‫المجموعة‬ ‫ھذه‬ ‫مھمة‬LayoutInflator‫حيث‬ ،‫وسرعته‬ ‫التطبيق‬ ‫بأداء‬ ‫تتعلق‬ ‫البيانات‬ ‫من‬ ‫جزء‬ ‫تقتطع‬ ‫أنھا‬‫وتنشئ‬‫واجھاتھا‬ //‫مسا‬ ‫مع‬ ‫يتناسب‬ ‫بشكل‬‫أي‬ ،‫الشاشة‬ ‫عرض‬ ‫حة‬ ‫بشكل‬ ‫بعملھا‬ ‫تقوم‬ ‫وإنما‬ ‫البيانات‬ ‫لكل‬ ‫واجھة‬ ‫بعمل‬ ‫الجھاز‬ ‫ذاكرة‬ ‫تمأل‬ ‫ال‬ ‫أنھا‬ ‫تفاعلي‬ //‫بتمرير‬ ‫المستخدم‬ ‫قام‬ ‫كلما‬ ‫أي‬‫إصبعه‬‫ألسفل‬ ‫يتم‬ ،‫البيانات‬ ‫من‬ ‫المزيد‬ ‫لرؤية‬‫إنشاء‬‫الواجھات‬ LayoutInflater inflater=context.getLayoutInflater(); row = (RatedRestaurantListItem)inflater.inflate(R.layout.rest_list_it em, null); } row.setRatedItem(myRatedItems.get(position)); RatingBar rateBar = (RatingBar)row.findViewById(R.id.rate); rateBar.setStepSize((float) 0.1); rateBar.setRating((float)myRatedItems.get(position).getwSco
  • 181. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 181 re()); return row; } public RatedItem getItem(int position) { return myRatedItems.get(position); } public void reload() { //‫بأن‬ ‫الوسيط‬ ‫تحتضن‬ ‫التي‬ ‫القائمة‬ ‫إلعالم‬ ‫مھمة‬ ‫دالة‬ ‫ال‬ ‫بعض‬‫عليھا‬ ‫ويتوجب‬ ‫تغيرت‬ ‫معلومات‬‫إذا‬‫نفسھا‬ ‫تحديث‬ notifyDataSetChanged(); } } protected RestDroidApplication accessApplicationMethods() { return (RestDroidApplication)getApplication(); } } ‫إذا‬‫فإن‬ ،‫واضح‬ ‫ھو‬ ‫كما‬OnListItemClick‫ال‬ ‫مھمتھا‬ ‫دالة‬ ‫ھي‬‫معين‬ ‫بعمل‬ ‫قيام‬ ‫القائمة‬ ‫في‬ ‫عنصر‬ ‫أي‬ ‫على‬ ‫الضغط‬ ‫عند‬.‫أوال‬ ‫ھو‬ ‫به‬ ‫القيام‬ ‫منھا‬ ‫نريد‬ ‫الذي‬ ‫العمل‬ ‫عليه‬ ‫الضغط‬ ‫تم‬ ‫الذي‬ ‫المطعم‬ ‫معلومات‬ ‫جلب‬)‫عنصر‬ ‫رقم‬ ‫معرفة‬ ‫عبر‬ ‫ذلك‬ ‫يتم‬ ‫عليه‬ ‫الضغط‬ ‫تم‬ ‫الذي‬ ‫القائمة‬position‫وھو‬‫يكافئ‬‫موجود‬ ‫ھو‬ ‫كما‬ ‫المطعم‬ ‫رقم‬
  • 182. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 182 ‫المط‬ ‫بيانات‬ ‫يحمل‬ ‫الذي‬ ‫المتغير‬ ‫في‬‫اعم‬.‫ونضعه‬ ‫المختار‬ ‫المطعم‬ ‫بجلب‬ ‫نقوم‬ ‫لذلك‬ ‫الخريطة‬ ‫لتستخدمه‬ ‫آخر‬ ‫متغير‬ ‫في‬(‫االنتقال‬ ‫وثانيا‬‫إلى‬‫تحوي‬ ‫أخرى‬ ‫واجھة‬ ‫عليھا‬ ‫المطعم‬ ‫ومكان‬ ‫الخريطة‬. ‫مجموعة‬ ‫دور‬ ‫جاء‬ViewOnMapActivity.java‫فروع‬ ‫بعرض‬ ‫تقوم‬ ‫والتي‬ ‫الخريطة‬ ‫على‬ ‫المختار‬ ‫المطعم‬.‫سننشئ‬‫الـ‬ ‫ملف‬ ‫بداية‬xml (‫الواجھ‬‫المرئية‬ ‫ة‬( ‫وھو‬ ‫بھا‬ ‫المقترن‬: view_map.xml : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/restaurantNameMap" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="30sp" /> <com.google.android.maps.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/restaurantNameMap" android:clickable="true" android:apiKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • 183. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 183 xx" /> </RelativeLayout> ‫وجود‬ ‫تالحظون‬android:apikey‫رقم‬ ‫وھو‬‫يجب‬‫عن‬ ‫عليه‬ ‫الحصول‬ ‫عليكم‬ ‫غوغل‬ ‫موقع‬ ‫طريق‬.‫بھا‬ ‫يتم‬ ‫التي‬ ‫االلكترونية‬ ‫الوثيقة‬ ‫باستخدام‬ ‫الرقم‬ ‫توليد‬ ‫يتم‬ ‫التطبيقات‬ ‫توقيع‬)‫بشكل‬ ‫تأتي‬ ‫الكترونية‬ ‫بوثيقة‬ ‫توقيعھا‬ ‫يتم‬ ‫أندرويد‬ ‫تطبيقات‬ ‫الـ‬ ‫مع‬ ‫افتراضي‬SDK-‫الوث‬ ‫وھذه‬‫التجربة‬ ‫لدواعي‬ ‫ھي‬ ‫يقة‬debugging ‫عليكم‬ ‫ويتوجب‬‫إنشاء‬‫على‬ ‫التطبيق‬ ‫بنشر‬ ‫رغبتم‬ ‫حال‬ ‫في‬ ‫بكم‬ ‫خاصة‬ ‫جديدة‬ ‫وثيقة‬ ‫الماركت‬.(‫األمر‬ ‫عبر‬ ‫االلكترونية‬ ‫الوثيقة‬ ‫بصمة‬ ‫باستخراج‬ ‫نقوم‬)‫الوحدة‬ ‫في‬ ‫الطرفية‬cmd‫أو‬trminal shell): $ keytool -list -alias androiddebugkey -keystore xxx -storepass android -keypass android ‫الـ‬ ‫نستبدل‬xxx‫التشغيل‬ ‫نظام‬ ‫بحسب‬ ‫يلي‬ ‫ما‬ ‫بأحد‬: Windows Vista: C:Users<user>.androiddebug.keystore Windows XP: C:Documents and Settings<user>.androiddebug.keystore OS X and Linux: ~/.android/debug.keystore ‫يلي‬ ‫بما‬ ‫شبيھة‬ ‫ستكون‬ ‫النتيجة‬: Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98 ‫والتوجه‬ ‫الرقم‬ ‫ھذا‬ ‫بنسخ‬ ‫نقوم‬‫إلى‬‫الموقع‬: signup.html-api-http://code.google.com/android/maps
  • 184. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 184 ‫المطلوبة‬ ‫الخطوات‬ ‫وإكمال‬.‫الـ‬ ‫برقم‬ ‫تزويدنا‬ ‫سيتم‬ ‫وعندھا‬API‫نقوم‬ ‫الذي‬ ‫الـ‬ ‫من‬ ‫بدال‬ ‫األعلى‬ ‫في‬ ‫بوضعه‬xxxxxxxxxx. ‫الصفحة‬ ‫ھذه‬ ‫زوروا‬ ،‫المعلومات‬ ‫من‬ ‫لمزيد‬: -ons/google-com/android/addhttp://code.google. apis/mapkey.html ‫ملف‬ ‫محتوى‬ ‫كتابة‬ ‫قبل‬ ‫واآلن‬ViewOnMapActivity.java‫بكتابة‬ ‫سنقوم‬ ، ‫المساعدة‬ ‫المجموعة‬ ‫كود‬: AddressOverlay.java: package android.prog.easily; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.location.Address; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import com.google.android.maps.Projection; public class AddressOverlay extends Overlay { private static final int CONTAINER_RADIUS private static final int CONTAINER_SHADOW_OFFSET= 1;
  • 185. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 185 private Address address; private GeoPoint geopoint; Bitmap bb; public AddressOverlay(Address address) { super(); assert(null != address); //‫تمريره‬ ‫يتم‬ ‫الذي‬ ‫العنوان‬ ‫معلومات‬ ‫استخالص‬ this.setAddress(address); Double convertedLongitude = address.getLongitude() * 1E6; Double convertedLatitude = address.getLatitude() * 1E6; setGeopoint(new GeoPoint( convertedLatitude.intValue(), convertedLongitude.intValue())); } //‫المحدد‬ ‫العنوان‬ ‫عند‬ ‫الخريطة‬ ‫فوق‬ ‫خضراء‬ ‫نقطة‬ ‫برسم‬ ‫تقوم‬ ‫دالة‬ @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { super.draw(canvas, mapView, shadow); Point locationPoint = new Point(); Projection projection = mapView.getProjection(); projection.toPixels(getGeopoint(), locationPoint); Paint containerPaint = new Paint(); containerPaint.setAntiAlias(true);
  • 186. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 186 int containerX = locationPoint.x; int containerY = locationPoint.y; if (shadow) { containerX += CONTAINER_SHADOW_OFFSET; containerY += CONTAINER_SHADOW_OFFSET; containerPaint.setARGB(90, 0, 0, 0); canvas.drawCircle(containerX, containerY, CONTAINER_RADIUS, containerPaint); } else { containerPaint.setColor(Color.GREEN); canvas.drawCircle(containerX, containerY, CONTAINER_RADIUS, containerPaint); } } public void setAddress(Address address) { this.address = address; } public Address getAddress() { return address; }
  • 187. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 187 public void setGeopoint(GeoPoint geopoint) { this.geopoint = geopoint; } public GeoPoint getGeopoint() { return geopoint; } } ‫كود‬ ‫بكتابة‬ ‫سنقوم‬ ،‫وأخيرا‬ ‫واآلن‬‫األخيرة‬ ‫المجموعة‬ ViewOnMapActivity.java: package android.prog.easily; import java.io.IOException; import java.util.List; import org.json.JSONException; import org.json.JSONObject; import android.graphics.Bitmap; import android.location.Address; import android.location.Geocoder; import android.os.Bundle; import android.widget.TextView; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity;
  • 188. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 188 import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; public class ViewOnMapActivity extends MapActivity { public static final String ADDRESS_RESULT = "address"; private MapView mapView; private Address address; private TextView restName; private JSONObject[] restaurantsLocObjects; private String[] restaurantsBranchesNames; private double [][] longLat; private int maxLat = 0; private int minLat = 0; private int maxLon = 0; private int minLon = 0; Bitmap bmp; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.view_map); setUpViews(); bringRestLocations();
  • 189. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 189 mapCurrentAddress(); } //‫وفروعه‬ ‫المختار‬ ‫المطعم‬ ‫موقع‬ ‫لجلب‬ ‫دالة‬ private void bringRestLocations() { try { //‫رقم‬ ‫جلب‬‫معرف‬ID‫في‬ ‫اختياره‬ ‫تم‬ ‫الذي‬ ‫المطعم‬ ‫السابقة‬ ‫المجموعة‬Best50.java‫مجموعة‬ ‫في‬ ‫متغير‬ ‫في‬ ‫تخزينه‬ ‫وتم‬ RestDroidApplication int restNum = accessApplicationMethods().getItemOnMap().getId(); //‫الـ‬ ‫أمر‬ ‫نص‬ ‫تشكيل‬API‫الذي‬ ‫المطعم‬ ‫رقم‬ ‫متضمنا‬ ‫معلوماته‬ ‫نريد‬ String command = "items/" + restNum + "/locations"; String restaurantsCommand = accessApplicationMethods().getUrlStringCommand(comman d); restaurantsLocObjects = accessApplicationMethods().retrieveJSONs(restaurantsCom mand); restaurantsBranchesNames = new String[restaurantsLocObjects.length]; longLat = new double[restaurantsLocObjects.length][2];
  • 190. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 190 for (int i = 0; i < restaurantsBranchesNames.length; i++) { restaurantsBranchesNames[i] = (i+1) + "n" +" :‫البلد‬" + restaurantsLocObjects[i].getString("country") + "n" + "‫المدينة‬: " + restaurantsLocObjects[i].getString("city") + "n" + "‫الفرع‬ ‫رقم‬: " + restaurantsLocObjects[i].getString("location_id") + "n" + "‫العنوان‬: " + restaurantsLocObjects[i].getString("address") + "n" + "‫التلفون‬ ‫رقم‬: " + restaurantsLocObjects[i].getString("phone") + "n" + "‫الفرع‬ ‫اسم‬: " + restaurantsLocObjects[i].getString("title") + "n"; longLat[i][0] = Double.parseDouble(restaurantsLocObjects[i].getString("latit ude")); longLat[i][1] = Double.parseDouble(restaurantsLocObjects[i].getString("lon gitude")); }
  • 191. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 191 } catch (JSONException e) { } } //‫الخريطة‬ ‫على‬ ‫المطعم‬ ‫فروع‬ ‫بوضع‬ ‫تقوم‬ ‫دالة‬ protected void mapCurrentAddress() { Geocoder g = new Geocoder(this); List<Address> addresses; boolean firstTime = true; for (int i = 0; i < restaurantsBranchesNames.length; i++) { try { addresses = g.getFromLocation(longLat[i][0], longLat[i][1], 1); if (addresses.size() > 0) { address = addresses.get(0); List<Overlay> mapOverlays = mapView.getOverlays(); AddressOverlay addressOverlay = new AddressOverlay(address);
  • 192. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 192 mapOverlays.add(addressOverlay); //‫األربعة‬ ‫واألسطر‬ ‫الشرطية‬ ‫الجملة‬ ‫ھذه‬ ‫الزوم‬ ‫نسبة‬ ‫تحديد‬ ‫ھو‬ ‫منھا‬ ‫الھدف‬ ‫تليھا‬ ‫التي‬zoom‫نرى‬ ‫بحيث‬ ‫عمله‬ ‫المراد‬ ‫الخريطة‬ ‫عرض‬ ‫عند‬ ‫كلھا‬ ‫النقاط‬ //‫في‬ ‫األول‬ ‫فرعين‬ ‫لدينا‬ ‫كان‬ ‫لو‬ ‫أي‬ ‫الخضر‬ ‫النقطتان‬ ‫تظھر‬ ‫بحيث‬ ‫بعيدا‬ ‫سيكون‬ ‫فالزوم‬ ،‫الدمام‬ ‫في‬ ‫والثاني‬ ‫الرياض‬ ‫معا‬ ‫الخريطة‬ ‫على‬ if (firstTime) { minLat = addressOverlay.getGeopoint().getLatitudeE6(); maxLat = addressOverlay.getGeopoint().getLatitudeE6(); minLon = addressOverlay.getGeopoint().getLongitudeE6(); maxLon = addressOverlay.getGeopoint().getLongitudeE6(); firstTime = false; } minLat = (minLat > addressOverlay.getGeopoint().getLatitudeE6()) ? addressOverlay.getGeopoint().getLatitudeE6() : minLat; maxLat = (maxLat < addressOverlay.getGeopoint().getLatitudeE6()) ? addressOverlay.getGeopoint().getLatitudeE6() : maxLat; minLon = (minLon > addressOverlay.getGeopoint().getLongitudeE6()) ?
  • 193. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 193 addressOverlay.getGeopoint().getLongitudeE6() : minLon; maxLon = (maxLon < addressOverlay.getGeopoint().getLongitudeE6()) ? addressOverlay.getGeopoint().getLongitudeE6() : maxLon; mapView.invalidate(); } else { } } catch (IOException e) { } } final MapController mapController = mapView.getController(); GeoPoint center = new GeoPoint((maxLat + minLat)/2,(maxLon + minLon)/2); mapController.animateTo(center, new Runnable() { public void run() { mapController.zoomToSpan(maxLat - minLat,maxLon - minLon); }
  • 194. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 194 }); } private void setUpViews() { restName = (TextView)findViewById(R.id.restaurantNameMap); restName.setText(accessApplicationMethods().getItemOnMa p().getName()); mapView = (MapView)findViewById(R.id.map); //‫التصغير‬ ‫و‬ ‫التكبير‬ ‫أزرار‬ ‫تفعيل‬Zoomin/out mapView.setBuiltInZoomControls(true); } @Override protected boolean isLocationDisplayed() { return true; } @Override protected boolean isRouteDisplayed() { return false; } protected RestDroidApplication
  • 195. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 195 accessApplicationMethods() { return (RestDroidApplication)getApplication(); } } ‫المشروع‬ ‫ملفات‬ ‫على‬ ‫نظرة‬ ‫نلقي‬ ‫واآلن‬:
  • 196. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 196 ‫شيئا؟‬ ‫نسينا‬ ‫ھل‬!‫الجواب‬‫نعم‬..‫الـ‬ ‫ملف‬ ‫تعديل‬ ‫نسينا‬AndroidManifest.xml
  • 197. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 197 ‫الطريق‬ ‫خارطة‬ ‫أو‬ ‫بالمايسترو‬ ‫أسميه‬ ‫الذي‬ ‫الملف‬ ‫وھو‬.‫الملف‬ ‫ھذا‬‫مسئول‬‫عن‬ ‫البداية‬ ‫في‬ ‫يشغلھا‬ ‫ونشاط‬ ‫واجھة‬ ‫وأي‬ ‫التطبيق‬ ‫تشغيل‬ ‫بكيفية‬ ‫التشغيل‬ ‫نظام‬ ‫إعالم‬ ‫ذ‬ ‫وغير‬‫لك‬. ‫التالي‬ ‫بالشكل‬ ‫بتعديله‬ ‫نقوم‬: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.prog.easily" android:versionCode="1" android:versionName="1.0"> <!-- ‫الخاصة‬ ‫األيقونة‬ ‫صورة‬ ‫ومصدر‬ ‫اسمه‬ ‫تتضمن‬ ‫التطبيق‬ ‫عن‬ ‫معلومات‬ ‫به‬ --> <application android:name=".RestDroidApplication" android:icon="@drawable/icon" android:label="@string/app_name"> <!-- ‫نق‬‫واجھة‬ ‫كل‬ ‫بتعريف‬ ‫وم‬"‫وعددھا‬٣"‫بدون‬ ‫خاصتھا‬ ‫المجموعة‬ ‫اسم‬ ‫بكتابة‬ .java --> <activity android:name=".intro" android:label="@string/app_name"> <!-- ‫إطالقھا‬ ‫نريد‬ ‫التي‬ ‫األولى‬ ‫الواجھة‬ ‫ھي‬ ‫الواجھة‬ ‫ھذه‬ ‫أن‬ ‫يعني‬ ‫الجزء‬ ‫ھذا‬ ‫ع‬‫التطبيق‬ ‫تشغيل‬ ‫ن‬ --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
  • 198. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 198 </intent-filter> </activity> <activity android:name=".Best50" android:label="Best 50 rest"> </activity> <activity android:name=".ViewOnMapActivity" android:label="view on Map"> </activity> <!-- ‫الخرائط‬ ‫مكتبة‬ ‫استدعاء‬ ‫عليه‬ ‫يتوجب‬ ‫أنه‬ ‫التشغيل‬ ‫نظام‬ ‫نخبر‬ --> <uses-library android:name="com.google.android.maps" /> </application> <!-- ‫االنترنت‬ ‫استخدام‬ ‫بھا‬ ‫يمكننا‬ ‫التي‬ ‫والتصاريح‬ ‫األذونات‬ --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCAT ION" /> <!-- ‫نسخة‬ ‫يستخدم‬ ‫التطبيق‬ ‫ھذا‬٢٫١‫األندرويد‬ ‫من‬ ‫وأعلى‬-‫ورقمھا‬٧‫لدي‬ ‫عند‬ ‫معرفته‬ ‫ويمكن‬ ،‫لديكم‬ ‫يختلف‬ ‫قد‬ ‫الرقم‬ ‫وھذا‬‫إنشاء‬،‫المشروع‬‫رقما‬ ‫ستجدون‬ ‫النسخة‬ ‫-بجانب‬ --> <uses-sdk android:minSdkVersion="7" />
  • 203. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 203 ‫متفرقات‬: -‫افتراضية‬ ‫أو‬ ‫فعلية‬ ‫أجھزة‬ ‫وجود‬ ‫من‬ ‫التأكد‬)‫محاكي‬(‫عبر‬ ‫معھا‬ ‫التواصل‬ ‫ليتم‬ ‫الطرفية‬ ‫الوحدة‬: $ cd /Developer/android-sdk-mac_86/tools/ $ ./adb devices ‫النتيجة‬: List of devices attached emulator-5554 device -‫أو‬ ‫للتطبيق‬ ‫كافية‬ ‫غير‬ ‫تكون‬ ‫قد‬ ‫االفتراضي‬ ‫للجھاز‬ ‫الداخلية‬ ‫الذاكرة‬ ‫مساحة‬ ‫برفعھا‬ ‫نرغب‬ ‫لملفات‬‫إليه‬)‫العربية‬ ‫الخطوط‬ ‫كملفات‬(‫يمكننا‬ ‫لذلك‬ ،‫إطالق‬‫محاكي‬ ‫األمر‬ ‫عبر‬ ‫بتخصيصھا‬ ‫نقوم‬ ‫بمساحة‬: $ cd /Developer/android-sdk-mac_86/tools/ $ ./emulator -avd GPSenables -partition-size 500 ‫بعد‬ ‫تحديده‬ ‫يتم‬ ‫المحاكي‬ ‫اسم‬-avd‫تشغيله‬ ‫أريد‬ ‫الذي‬ ‫المحاكي‬ ‫أن‬ ‫أي‬ GPSenables‫قم‬ ‫لذلك‬ ،‫ترغب‬ ‫الذي‬ ‫المحاكي‬ ‫وضع‬ ‫االسم‬ ‫ھذا‬ ‫بتغيير‬ ‫قومي‬ ‫بإطالقه‬. ‫المحا‬ ‫من‬ ‫نسخة‬ ‫ستنطلق‬،‫مدخالت‬ ‫تقبل‬ ‫ال‬ ‫أصبحت‬ ‫الطرفية‬ ‫الوحدة‬ ‫أن‬ ‫وتجد‬ ‫كي‬ ‫أخرى‬ ‫طرفية‬ ‫وحدة‬ ‫نافذة‬ ‫وافتح‬ ‫النافذة‬ ‫ھذه‬ ‫دع‬ ‫لذلك‬. -‫عربية‬ ‫خطوط‬ ‫برفع‬ ‫للقيام‬‫إلى‬‫المحاكي‬)‫الذي‬ ‫الموقع‬ ‫في‬ ‫موجودة‬ ‫الخطوط‬ ‫البرنامج‬ ‫ملفات‬ ‫عليه‬ ‫وضعنا‬(‫علينا‬ ،‫النظام‬ ‫ملفات‬ ‫على‬ ‫بالكتابة‬ ‫سنقوم‬ ‫أننا‬ ‫وبما‬ ‫األم‬ ‫كتابة‬ ‫أوال‬‫ر‬:
  • 204. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 204 $ ./adb remount ‫النتيجة‬ remount succeeded ‫ثم‬ ‫ومن‬)‫المسار‬ ‫تغيير‬ ‫مع‬): $ ./adb push /Users/wa2el/Desktop/fontss/DroidSans-Bold.ttf /system/fonts/ $ ./adb push /Users/wa2el/Desktop/fontss/DroidSans.ttf /system/fonts/ $ ./adb push /Users/wa2el/Desktop/fontss/DroidSansFallback.ttf /system/fonts/ -‫الكود‬ ‫تحت‬ ‫صفراء‬ ‫خطوط‬ ‫أحيانا‬ ‫لك‬ ‫تظھر‬ ‫قد‬ ،‫المنسوخ‬ ‫الكود‬ ‫لصق‬ ‫أثناء‬ )‫الـ‬ ‫ملفات‬ ‫في‬ ‫كثيرا‬ ‫تحصل‬xml)‫تحته‬ ‫الذي‬ ‫الكود‬ ‫أعلى‬ ‫اللصق‬ ‫إعادة‬ ‫ھو‬ ‫الحل‬ ‫األخير‬ ‫إزالة‬ ‫ثم‬ ‫ومن‬ ‫صفراء‬ ‫خطوط‬.
  • 205. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 205 ‫الملحق‬“‫أ‬”: ‫إن‬ ‫كيفية‬ ‫و‬ ‫وظيفة‬‫يلي‬ ‫ما‬ ‫شاء‬: ١-‫وعاء‬<LinearLayout> ٢-‫وعاء‬<TableLayout> ٣-‫وعاء‬<ScrollView> ١-‫وعاء‬<LinearLayout> ‫الخصائص‬ ‫عادة‬ ‫لدينا‬‫التالية‬ ‫العناصر‬: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > ‫التوجه‬ ‫لخاصية‬ ‫بالنسبة‬Orientation‫األزرار‬ ‫رصف‬ ‫طريقة‬ ‫تحديد‬ ‫عبرھا‬ ‫يتم‬ ‫وال‬Widgets‫الصفحة‬ ‫في‬.‫الرأسي‬ ‫الوضع‬Vertical‫العنا‬ ‫وضع‬ ‫يعني‬‫صر‬ ‫أما‬ ،‫عمودي‬ ‫بشكل‬Horizontal‫أفقي‬ ‫بشكل‬ ‫صفھا‬ ‫فيعني‬.
  • 206. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 206 ‫خاصية‬layout_width‫مسئولة‬‫الحالة‬ ‫ھذه‬ ‫في‬ ‫ونحن‬ ،‫الوعاء‬ ‫عرض‬ ‫تحديد‬ ‫عن‬ ‫نختار‬ ‫لذلك‬ ،‫المساحات‬ ‫جميع‬ ‫واحتالل‬ ‫الشاشة‬ ‫مأل‬ ‫الوعاء‬ ‫من‬ ‫نريد‬ fill_parent. ‫خاصية‬layout_height‫نريده‬ ‫وأيضا‬ ،‫الوعاء‬ ‫ارتفاع‬ ‫تحديد‬ ‫عبرھا‬ ‫يتم‬‫مأل‬ ‫كاملة‬ ‫المساحات‬. ‫التطبيق‬ ‫واجھة‬ ‫في‬ ‫ظھوره‬ ‫بطريقة‬ ‫التحكم‬ ‫كيفية‬ ‫لنرى‬ ‫زر‬ ‫بإنشاء‬ ‫اآلن‬ ‫نقوم‬. <Button android:text="@+id/Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> ‫بالنسبة‬،‫األولى‬ ‫للخاصية‬android:text‫فھي‬‫المسئولة‬‫المراد‬ ‫النص‬ ‫تحديد‬ ‫عن‬ ‫الزر‬ ‫على‬ ‫ظھوره‬. android:id‫عن‬ ‫يميزه‬ ‫للعنصر‬ ‫خاص‬ ‫رقم‬ ‫بإعطاء‬ ‫تقوم‬ ‫غيره‬.‫سأتعرض‬ ‫ولكني‬ ،‫األعلى‬ ‫في‬ ‫شرحھما‬ ‫تم‬ ‫فقد‬ ‫األخيرتين‬ ‫للخاصيتين‬ ‫بالنسبة‬ ‫لھما‬ ‫إعطاءھا‬ ‫الممكن‬ ‫من‬ ‫التي‬ ‫للقيم‬.‫ھناك‬٣‫احتماالت‬.‫األول‬fill_parent ‫يقوم‬ ‫الذي‬‫بمليء‬‫لھا‬ ‫أعطي‬ ‫التي‬ ‫الخاصية‬ ‫بحسب‬ ‫بالزر‬ ‫الخالية‬ ‫المساحة‬
  • 207. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 207 (layout_width‫أو‬layout_height).‫ھو‬ ‫الثاني‬wrap_content‫والذي‬ ‫النصي‬ ‫محتواه‬ ‫بحسب‬ ‫الزر‬ ‫حجم‬ ‫بضغط‬ ‫يقوم‬.‫تحديد‬ ‫يتم‬ ‫أن‬ ‫ھو‬ ‫الثالث‬ ‫االحتمال‬ ‫البيكسل‬ ‫بمقياس‬ ‫والعرض‬ ‫االرتفاع‬. ‫ا‬ ‫للحالة‬ ‫مثال‬‫والثانية‬ ‫ألولى‬)‫ولكن‬ ،‫بالعرض‬ ‫له‬ ‫المجاورة‬ ‫المساحات‬ ‫الزر‬ ‫سيمأل‬ ‫مضغوطا‬ ‫سيكون‬ ‫ارتفاعه‬): <Button android:text="Ardroid" android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="wrap_content"> </Button>
  • 208. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 208 (‫بتبويب‬ ‫االستعانة‬ ‫ويمكنك‬ ،‫األخرى‬ ‫االحتماالت‬ ‫بتجربة‬ ‫قم‬Layout‫الستعراض‬ ‫مرة‬ ‫كل‬ ‫في‬ ‫التطبيق‬ ‫تشغيل‬ ‫من‬ ‫بدال‬ ‫التصميم‬ ‫نتيجة‬..‫ھذه‬ ‫استخدام‬ ‫يمكنك‬ ‫كما‬ ‫في‬ ‫النشاط‬ ‫صفحة‬ ‫لتصميم‬ ‫الواجھة‬‫ال‬ ‫كود‬ ‫كتابة‬ ‫دون‬ ‫التطبيق‬XML‫كل‬ ‫في‬ ‫مرة‬) ‫الثالثة‬ ‫للحالة‬ ‫مثال‬: <Button android:text="Ardroid" android:id="@+id/Button01" android:layout_width="300px"
  • 209. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 209 android:layout_height="100px"> </Button> ‫بجا‬ ‫اآلن‬ ‫وضعه‬ ‫نريد‬ ‫ولكننا‬ ،ٍ‫ثان‬ ‫زر‬ ‫بإضافة‬ ‫سنقوم‬‫األول‬ ‫الزر‬ ‫نب‬.‫نقوم‬ ‫كيف‬ ‫بوعاء‬ ‫الخاصة‬ ‫األولى‬ ‫الخاصية‬ ‫ننس‬ ‫ال‬ ‫بذلك؟‬LinearLayout‫وھي‬ Orientation.‫ال‬ ‫عرض‬ ‫ليتم‬ ‫بتعديلھا‬ ‫نقوم‬Widgets‫أفقي‬ ‫بشكل‬: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > ‫الثاني‬ ‫والزر‬)‫السابق‬ ‫الزر‬ ‫اسم‬ ‫بنفس‬ ‫بتسميته‬ ‫قم‬):
  • 210. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 210 <Button android:text="Ardroid" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> ‫الوزن‬ ‫خاصية‬ ‫على‬ ‫بالتعرف‬ ‫اآلن‬ ‫سنقوم‬android:layout_weight‫والتي‬ ‫أكبر‬ ‫كمية‬ ‫أولوية‬ ‫أعالھما‬ ‫ليحتل‬ ‫الزرين‬ ‫ألحد‬ ‫بتحديدھا‬ ‫نقوم‬ ‫أولوية‬ ‫بإعطاء‬ ‫تقوم‬ ‫الفارغة‬ ‫المساحات‬ ‫من‬.‫فمثال‬: <Button android:text="Ardroid" android:id="@+id/Button01"
  • 212. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 212 ‫ال‬ ‫وضع‬ ‫بطريقة‬ ‫التحكم‬ ‫عبرھا‬ ‫يتم‬ ‫والتي‬ ‫األخرى‬ ‫الخصائص‬ ‫من‬ ‫عدد‬ ‫ھناك‬ Widgets‫مثال‬ ‫فلدينا‬android:layout_agravity‫حالة‬ ‫في‬ ‫أكثر‬ ‫مناسبة‬ ‫وھي‬ ‫ال‬ ‫مع‬ ‫التعامل‬Widgets‫بخاصية‬ ‫بالتحكم‬ ‫عبرھا‬ ‫ونقوم‬ ‫رأسيا‬ ‫رصفھم‬ ‫عند‬ ‫المحاذاة‬alignment‫مثال‬ ‫الزر‬ ‫عليھا‬ ‫سيكون‬ ‫التي‬.‫التحكم‬ ‫أردنا‬ ‫حال‬ ‫وفي‬ ‫استخدام‬ ‫األفضل‬ ‫فمن‬ ،‫األفقية‬ ‫الرصف‬ ‫طريقة‬ ‫في‬ ‫بالمحاذاة‬ android:layout_marginLeft‫النقاط‬ ‫عدد‬ ‫وتحديد‬Pixels‫بين‬ ‫تفصل‬ ‫التي‬ ‫واآلخر‬ ‫الزر‬. ‫على‬ ‫مثال‬android:layout_marginLeft‫األفقية‬ ‫الرصف‬ ‫حالة‬ ‫في‬ android:orientation=”horizontal” : <Button android:text="Ardroid" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"
  • 213. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 213 android:layout_marginLeft="180px" > </Button> ‫على‬ ‫ومثال‬android:layout_gravity‫الرأسي‬ ‫بالوضع‬ android:orientation=”vertical”: <Button android:text="Ardroid" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" >
  • 214. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 214 </Button> ‫تجربتھا‬ ‫يمكنكم‬ ‫التي‬ ‫القيم‬ ‫من‬ ‫عددا‬ ‫تحوي‬ ‫والتي‬ ‫المنسدلة‬ ‫القائمة‬ ‫نالحظ‬ ‫طبعا‬ ‫تأثيرھا‬ ‫ورؤية‬. ‫كال‬ ‫أخرى‬ ‫خصائص‬ ‫بتجربة‬ ‫قوموا‬android:gravity‫و‬ android:paddingLeft‫تأثيراتھا‬ ‫والحظوا‬ ‫وغيرھا‬. ‫اإلشارة‬ ‫تجدر‬ ،‫القسم‬ ‫ھذا‬ ‫نھاية‬ ‫في‬‫إلى‬‫توجه‬ ‫خاصية‬ ‫تغيير‬ ‫يمكننا‬ ‫أنه‬‫وضع‬ ‫الوعاء‬Orientation‫التطبيق‬ ‫عمل‬ ‫أثناء‬.‫يقوم‬ ‫بأن‬ ‫التطبيق‬ ‫برمجة‬ ‫يمكننا‬ ‫فمثال‬ ‫زر‬ ‫ضغط‬ ‫عند‬ ‫األفقي‬ ‫بالوضع‬ ‫ليصبح‬ ‫التوجه‬ ‫بتغيير‬.‫باستدعاء‬ ‫العملية‬ ‫ھذه‬ ‫تتم‬ ‫دالة‬ x.setOrientation(LinearLayout.HORIZONTAL);
  • 215. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 215 ‫حيث‬x‫ال‬ ‫اسم‬ ‫ھي‬Widget‫ز‬ ،‫مثال‬ ‫ر‬. ٢-‫وعاء‬<TableLayout> ‫الجدول‬ ‫شكل‬ ‫الوعاء‬ ‫ھذا‬ ‫يأخذ‬.‫وسم‬ ‫نستخدم‬ ‫فإننا‬ ،‫لذا‬>TableRow<‫كلما‬ ‫جديد‬ ‫صف‬ ‫إنشاء‬ ‫أردنا‬.‫الخصائص‬ ‫من‬ ‫بعدد‬ ‫الوعاء‬ ‫ھذا‬ ‫يتميز‬: ‫أ‬- android:layout_span :‫يحتله‬ ‫أن‬ ‫نود‬ ‫الذي‬ ‫المدى‬ ‫تحدد‬ ‫خاصية‬ ‫وھي‬ ‫عددية‬ ‫قيمة‬ ‫وتأخذ‬ ،‫العنصر‬.‫العددي‬ ‫القيمة‬‫األعمدة‬ ‫عدد‬ ‫مباشر‬ ‫غير‬ ‫بشكل‬ ‫تحدد‬ ‫ة‬ Columns‫الصف‬ ‫داخل‬. ‫ب‬- android:layout_column :‫الذي‬ ‫العمود‬ ‫رقم‬ ‫تحدد‬ ‫خاصية‬ ‫وھي‬ ‫العنصر‬ ‫عنده‬ ‫سيتوضع‬Widget.‫أول‬ ‫أن‬ ‫بمعنى‬ ،‫الصفر‬ ‫من‬ ‫يبدأ‬ ‫األعمدة‬ ‫وترقيم‬ ‫وھكذا‬ ،‫صفر‬ ‫رقمه‬ ‫عمود‬. ‫ج‬- android:stretchColumns :‫بالوعاء‬ ‫محصورة‬ ‫خاصية‬ ‫وھي‬‫نفسه‬)‫أي‬ ‫العناصر‬ ‫على‬ ‫تطبيقھا‬ ‫يمكن‬ ‫ال‬Widgets )‫ليغطي‬ ‫العمود‬ ‫شد‬ ‫على‬ ‫تعمل‬ ‫وھي‬ ‫المساحة‬‫العمود‬ ‫رقم‬ ‫تحدد‬ ‫عددية‬ ‫قيمة‬ ‫وتأخذ‬ ،‫الفارغة‬. ‫د‬- android:shrinkColumns :‫السابقة‬ ‫الخاصية‬ ‫عكس‬ ‫وھي‬. ‫توضيحي‬ ‫مثال‬: ‫التالي‬ ‫التصميم‬ ‫على‬ ‫للحصول‬:
  • 216. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 216 ‫الكود‬ ‫نستعمل‬: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
  • 220. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 220 android:layout_width="wrap_content" android:layout_height="wrap_content" > </RadioButton> </TableRow> </TableLayout> ٣-‫وعاء‬<ScrollView> ‫كبيرا‬ ‫الصفحة‬ ‫في‬ ‫عرضه‬ ‫نود‬ ‫الذي‬ ‫المحتوى‬ ‫كان‬ ‫حالة‬ ‫في‬ ‫الوعاء‬ ‫ھذا‬ ‫نستعمل‬ ‫واحدة‬ ‫صفحة‬ ‫في‬ ‫وضعه‬ ‫يمكن‬ ‫ال‬ ‫أنه‬ ‫بحيث‬.‫تضمين‬ ‫وھي‬ ‫سھلة‬ ‫عمله‬ ‫طريقة‬ ‫بداخله‬ ‫نرغبه‬ ‫الذي‬ ‫التصميم‬.‫وض‬ ‫يمكننا‬ ،‫فمثال‬‫األعلى‬ ‫في‬ ‫كتبناه‬ ‫الذي‬ ‫الكود‬ ‫ع‬ ‫بداخله‬)‫العناصر‬ ‫من‬ ‫عدد‬ ‫إضافة‬ ‫بعد‬Widgets‫المحتوى‬ ‫عرض‬ ‫يتطلب‬ ‫حتى‬ ‫صفحة‬ ‫من‬ ‫أكثر‬). <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
  • 224. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 224 </CheckBox> </TableRow> <TableRow> <RadioButton android:text="Radio Button" android:id="@+id/RadioButton01" android:layout_width="wrap_content" android:layout_height="wrap_content" > </RadioButton> </TableRow> <TableRow> <RadioButton android:text="Radio Button"
  • 230. ‫أندرو‬‫ببساطة‬ ‫يد‬‫اإل‬‫بيتا‬ ‫صدار‬1 230 ‫ﷲ‬ ‫بحمد‬ ‫انتھى‬ ‫و‬ ‫أفادكم‬ ‫قد‬ ‫الكتاب‬ ‫يكون‬ ‫أن‬ ‫أتمنى‬ ‫كما‬ ‫العمل‬ ‫ھذا‬ ‫ﷲ‬ ‫يتقبل‬ ‫أن‬ ‫أرجوا‬ ‫الغيب‬ ‫بظھر‬ ‫دعوة‬ ‫منكم‬ ‫أرجوا‬ ‫بدوي‬ ‫محمد‬،‫علواني‬ ‫وائل‬ ‫بود‬ ‫دمتم‬،،،