6. المرفقات
نقدم هنا إرشادات حول كيفية تثبيت الأدوات المستخدمة في هذا المستند على أجهزة تعمل بنظام ويندوز 7 إلى 10. وعلى القارئ تكييف هذه الإرشادات مع بيئته الخاصة.
6.1. تثبيت Arduino IDE
الموقع الرسمي لـ Arduino هو [http://www.arduino.cc/]. هناك ستجد IDE للتطوير لأجهزة Arduino [http://arduino.cc/en/Main/Software]:
![]() | ![]() |
الملف الذي تم تنزيله [1] هو ملف مضغوط، وبمجرد فك ضغطه، ستظهر شجرة المجلدات [2]. يمكن تشغيل IDE بالنقر المزدوج على الملف القابل للتنفيذ [3].
6.2. تثبيت برنامج تشغيل (driver) Arduino
لكي يتمكن IDE من التواصل مع Arduino، يجب أن يتعرف عليه المضيف PC. وللقيام بذلك، يمكن اتباع الخطوات التالية:
- توصيل Arduino بمنفذ USB في الكمبيوتر المضيف؛
- سيحاول النظام عندئذ العثور على برنامج تشغيل الجهاز الجديد USB. ولن يتمكن من العثور عليه. قم عندئذ بالإشارة إلى أن برنامج التشغيل موجود على القرص في الموضع <arduino>/drivers حيث <arduino> هو مجلد تثبيت جهاز Arduino IDE.
6.3. اختبارات IDE
لاختبار IDE، يمكن اتباع الخطوات التالية:
- تشغيل IDE؛
- توصيل Arduino بـ PC عبر كابل USB. في الوقت الحالي، لا تقم بتضمين بطاقة الشبكة؛
![]() | ![]() |
- في [1]، اختر نوع بطاقة Arduino المتصلة بالمنفذ USB؛
- في [2]، حدد المنفذ USB الذي تتصل به Arduino. لمعرفة ذلك، افصل Arduino وسجل المنافذ. أعد توصيلها وتحقق مرة أخرى من المنافذ: المنفذ الذي تمت إضافته هو منفذ Arduino؛
قم بتشغيل بعض الأمثلة المضمنة في IDE:
![]() |
يتم تحميل المثال وعرضه:
![]() |
الأمثلة المرفقة بـ IDE تعليمية للغاية ومزودة بتعليقات جيدة. كود Arduino مكتوب بلغة C ويتكون من جزأين متميزين:
- وظيفة [setup] التي يتم تنفيذها مرة واحدة عند بدء تشغيل التطبيق، أي عندما يتم " تحميله " من المضيف PC إلى Arduino، أو عندما يكون التطبيق موجودًا بالفعل على Arduino ويتم الضغط على الزر [Reset]. وهنا يتم وضع كود تهيئة التطبيق؛
- وهي دالة [loop] التي تعمل بشكل مستمر (حلقة لا نهائية). هنا نضع جوهر التطبيق.
هنا،
- تقوم الدالة [setup] بتكوين الدبوس رقم 13 كمخرج؛
- وتقوم الدالة [loop] بتشغيلها وإيقافها بشكل متكرر: حيث تضيء المصباح وتطفئ كل ثانية.
1 ![]() |
يتم نقل (تحميل) البرنامج المعروض إلى Arduino باستخدام الزر [1]. بمجرد نقله، يتم تنفيذه ويبدأ المصباح رقم 13 في الوميض إلى ما لا نهاية.
6.4. اتصال Arduino بالشبكة
يجب أن يكون Arduino أو أجهزة Arduino و PC المضيف على نفس الشبكة الخاصة:
![]() |
إذا كان هناك جهاز Arduino واحد فقط، فيمكن توصيله بجهاز PC المضيف بواسطة كابل RJ 45 بسيط. إذا كان هناك أكثر من جهاز واحد، فسيتم وضع المضيف PC وأجهزة Arduino على نفس الشبكة عبر موزع صغير.
سيتم وضع المضيف PC وأجهزة Arduino على الشبكة الخاصة 192.168.2.x.
- يتم تحديد عنوان IP لأجهزة Arduino بواسطة شفرة المصدر. سنرى كيف؛
- يمكن تعيين عنوان IP للكمبيوتر المضيف على النحو التالي:
- اختر الخيار [Panneau de configuration\Réseau et Internet\Centre Réseau et partage]:
![]() |
- في [1]، اتبع الرابط [Connexion au réseau local]
![]() | ![]() |
- في [2]، اعرض خصائص الاتصال؛
- في [4]، عرض خصائص IP v4 [3] للاتصال؛
![]() |
- في [5]، تعيين العنوان IP [192.168.2.1] للكمبيوتر المضيف؛
- في [6]، قم بتعيين القناع [255.255.255.0] للشبكة؛
- تأكيد كل ذلك في [7].
6.5. اختبار تطبيق شبكة
باستخدام IDE، قم بتحميل المثال [Exemples / Ethernet / WebServer]:
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
#تضمين <SPI.h>
#تضمين <Ethernet.h>
// أدخل عنوان MAC وعنوان IP لوحدة التحكم الخاصة بك أدناه.
// سيعتمد عنوان IP على شبكتك المحلية:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
// قم بتهيئة مكتبة خادم إيثرنت
// باستخدام عنوان IP والمنفذ الذي تريد استخدامه
// (المنفذ 80 هو الإعداد الافتراضي لـ HTTP):
EthernetServer server(80);
void setup() {
// افتح الاتصالات التسلسلية وانتظر حتى يفتح المنفذ:
Serial.begin(9600);
while (!Serial) {
; // انتظر حتى يتصل المنفذ التسلسلي. مطلوب لـ Leonardo فقط
}
// بدء اتصال إيثرنت والخادم:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// الاستماع إلى العملاء الواردين
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// ينتهي طلب http بسطر فارغ
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// إذا وصلت إلى نهاية السطر (استلمت حرف
// ) وكان السطر فارغًا، فإن طلب http قد انتهى،
// لذا يمكنك إرسال رد
if (c == '\n' && currentLineIsBlank) {
// أرسل رأس استجابة HTTP قياسي
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// أضف علامة meta refresh، بحيث يقوم المتصفح بالسحب مرة أخرى كل 5 ثوانٍ:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// إخراج قيمة كل دبوس إدخال تناظري
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// أنت تبدأ سطرًا جديدًا
currentLineIsBlank = true;
}
else if (c != '\r') {
// لقد حصلت على حرف في السطر الحالي
currentLineIsBlank = false;
}
}
}
// إعطاء متصفح الويب الوقت الكافي لاستلام البيانات
delay(1);
// إغلاق الاتصال:
client.stop();
Serial.println("client disconnected");
}
}
يُنشئ هذا التطبيق خادم ويب على المنفذ 80 (السطر 30) على العنوان IP في السطر 25. العنوان MAC في السطر 23 هو العنوان MAC المحدد على بطاقة الشبكة الخاصة بـ Arduino.
تقوم الدالة [setup] بتهيئة خادم الويب:
- السطر 34: تهيئ المنفذ التسلسلي الذي ستقوم التطبيق بتسجيل السجلات عليه. سنقوم بمتابعة هذه السجلات؛
- السطر 41: يتم تهيئة العقدة TCP-IP (IP، المنفذ)؛
- السطر 42: يتم تشغيل الخادم الموجود في السطر 30 على هذه العقدة الشبكية؛
- السطران 43-44: يتم تسجيل عنوان IP لخادم الويب؛
تقوم الدالة [loop] بتنفيذ خادم الويب:
- السطر 50: إذا اتصل عميل بخادم الويب، فإن [server].available تعرض هذا العميل، وإلا فإنها تعرض null؛
- السطر 51: إذا لم يكن العميل هو null؛
- السطر 55: طالما أن العميل متصل؛
- السطر 56: تكون قيمة [client].available صحيحة إذا أرسل العميل أحرفًا. يتم تخزين هذه الأحرف في مخزن مؤقت. تكون قيمة [client].available صحيحة طالما أن هذا المخزن المؤقت غير فارغ؛
- السطر 57: يتم قراءة حرف أرسله العميل؛
- السطر 58: يتم عرض هذا الحرف في وحدة التحكم الخاصة بالسجلات؛
- السطر 62: في بروتوكول HTTP، يتبادل العميل والخادم أسطر النص.
- يرسل العميل طلبًا HTTP إلى خادم الويب عن طريق إرسال سلسلة من أسطر النص تنتهي بسطر فارغ،
- ثم يرد الخادم على العميل بإرسال استجابة وإغلاق الاتصال؛
السطر 62، لا يقوم الخادم بأي شيء مع الرؤوس HTTP التي يتلقاها من العميل. إنه ينتظر ببساطة السطر الفارغ: سطر يحتوي على الحرف \n وحده؛
- الأسطر 64-67: يرسل الخادم إلى العميل أسطر النص القياسية لبروتوكول HTTP. تنتهي هذه الأسطر بسطر فارغ (السطر 67)؛
- ابتداءً من السطر 68، يرسل الخادم مستندًا إلى عميله. يتم إنشاء هذا المستند ديناميكيًا بواسطة الخادم ويكون بتنسيق HTML (السطور 68-69)؛
- السطر 71: سطر HTML خاص يطلب من متصفح العميل تحديث الصفحة كل 5 ثوانٍ. وبالتالي، سيطلب المتصفح نفس الصفحة كل 5 ثوانٍ؛
- السطور 73-80: يرسل الخادم إلى متصفح العميل قيم المدخلات التناظرية الستة الخاصة بـ Arduino؛
- السطر 81: يتم إغلاق المستند HTML؛
- السطر 82: الخروج من حلقة while في السطر 55؛
- السطر 97: يتم إغلاق الاتصال مع العميل؛
- السطر 98: يتم تسجيل الحدث في وحدة التحكم في السجلات؛
- السطر 100: نعود إلى بداية الدالة loop: سيستأنف الخادم الاستماع إلى العملاء. ذكرنا أن متصفح العميل سيطلب نفس الصفحة كل 5 ثوانٍ. وسيكون الخادم جاهزًا للرد عليه مرة أخرى.
قم بتعديل الكود في السطر 25 لإدخال عنوان IP الخاص بـ Arduino الخاص بك، على سبيل المثال:
قم بتحميل البرنامج على Arduino. قم بتشغيل وحدة التحكم في السجلات (Ctrl-M) (M كبيرة):
![]() | ![]() |
- في [1]، وحدة التحكم في السجلات. تم تشغيل الخادم؛
- في [2]، باستخدام متصفح، نطلب عنوان IP الخاص بـ Arduino. هنا يتم ترجمة [192.168.2.2] افتراضيًا إلى [http://198.162.2.2:80]؛
- في [3]، المعلومات المرسلة من خادم الويب. إذا قمنا بعرض شفرة المصدر لصفحة المتصفح، نحصل على:
يمكننا هنا التعرف على أسطر النص المرسلة من الخادم. من جانب Arduino، تعرض وحدة التحكم في السجلات ما يرسله العميل إليها:
- الأسطر 2-9: رؤوس HTTP قياسية؛
- السطر 10: السطر الفارغ الذي ينهيها.
ادرس هذا المثال جيدًا. سيساعدك على فهم برمجة Arduino المستخدمة في TP.
6.6. مكتبة aJson
في TP المراد كتابته، يتبادل Arduino أسطر النص بتنسيق jSON مع عملائه. بشكل افتراضي، لا يتضمن Arduino مكتبة لإدارة jSON. سنقوم بتثبيت مكتبة aJson المتوفرة على URL [https://github.com/interactive-matter/aJson].
![]() | ![]() |
- في [1]، قم بتنزيل النسخة المضغوطة من مستودع Github؛
- قم بفك ضغط المجلد وانسخ المجلد [aJson-master] [2] إلى المجلد [<arduino>/libraries] [3] حيث <arduino> هو مجلد تثبيتIDE Arduino؛
![]() | ![]() | ![]() |
- في [4]، أعد تسمية هذا المجلد إلى [aJson]؛
- في [5]، محتواه.
الآن، قم بتشغيل Arduino:
![]() |
تأكد من أن الأمثلة تتضمن الآن أمثلة لمكتبة aJson. قم بتشغيل هذه الأمثلة وادرسها.
6.7. جهاز Android اللوحي
تم اختبار الأمثلة باستخدام جهاز Samsung Galaxy Tab 2 اللوحي.
لاختبار الأمثلة باستخدام جهاز لوحي، يجب عليك أولاً تثبيت برنامج تشغيل الجهاز على جهاز التطوير الخاص بك. يمكن العثور على برنامج تشغيل جهاز Samsung Galaxy Tab 2 في:
![]() |
لاختبار الأمثلة، ستحتاج إلى توصيل الجهاز اللوحي بشبكة (ربما شبكة واي فاي) ومعرفة عنوانه IP على هذه الشبكة. وإليك كيفية القيام بذلك (Samsung Galaxy Tab 2):
- قم بتشغيل جهازك اللوحي؛
- ابحث في التطبيقات المتاحة على الجهاز اللوحي (في أعلى اليمين) عن التطبيق الذي يسمى [paramètres] والذي يحمل رمز الترس؛
- في القسم الأيسر، قم بتفعيل الواي فاي؛
- في القسم الأيمن، حدد شبكة واي فاي؛
- بمجرد الاتصال بالشبكة، اضغط مرة واحدة على الشبكة المحددة. سيتم عرض عنوان IP الخاص بالجهاز اللوحي. قم بتدوينه. ستحتاج إليه؛
لا تزال في تطبيق [Paramètres]،
- حدد على اليسار الخيار [Options de développement] (في أسفل الخيارات)؛
- تأكد من تحديد الخيار [Débogage USB] على اليمين.
للعودة إلى القائمة، اضغط في شريط الحالة في الأسفل على الرمز الأوسط، وهو رمز المنزل. وفي شريط الحالة في الأسفل أيضًا،
- الرمز الموجود في أقصى اليسار هو رمز الرجوع للخلف: يعيدك إلى العرض السابق؛
- أما الرمز الموجود في أقصى اليمين فهو رمز إدارة المهام. يمكنك عرض وإدارة جميع المهام التي تم تنفيذها في وقت معين بواسطة جهازك اللوحي؛
قم بتوصيل جهازك اللوحي بـ PC باستخدام كابل USB المرفق معه.
قم بتثبيت مفتاح الواي فاي على أحد منافذ USB في جهاز PC ثم قم بالاتصال بنفس شبكة الواي فاي التي يتصل بها الجهاز اللوحي. بعد ذلك، في نافذة DOS، اكتب الأمر [ipconfig]:
يحتوي جهاز PC الخاص بك على بطاقتي شبكة وبالتالي عنوانين IP:
- العنوان الموجود في السطر 9 وهو عنوان جهاز PC على الشبكة السلكية؛
- الخط 17 وهو عنوان PC على شبكة الواي فاي؛
دوّن هاتين المعلومتين. ستحتاج إليهما. أنت الآن في التكوين التالي:
![]() |
سيتعين على الجهاز اللوحي الاتصال بـ PC الخاص بك. عادةً ما يكون هذا الجهاز محميًا بجدار حماية يمنع أي عنصر خارجي من فتح اتصال مع PC. لذلك، عليك تعطيل جدار الحماية. قم بذلك باستخدام الخيار [Panneau de configuration\Système et sécurité\Pare-feu Windows]. في بعض الأحيان، قد يتعين عليك أيضًا تعطيل جدار الحماية الذي تم تثبيته بواسطة برنامج مكافحة الفيروسات. وهذا يعتمد على برنامج مكافحة الفيروسات الذي تستخدمه.
الآن، على جهاز PC الخاص بك، تحقق من اتصال الشبكة بالجهاز اللوحي باستخدام الأمر [ping 192.168.1.y] حيث [192.168.1.y] هو عنوان IP للجهاز اللوحي. يجب أن تحصل على شيء يشبه ما يلي:
تشير الأسطر 4-7 إلى أن الجهاز اللوحي ذو العنوان IP [192.168.1.y] قد استجاب للأمر [ping].
6.8. تثبيت JDK
يمكن العثور على URL [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (يونيو 2016)، وهو أحدث إصدار من JDK. سنسمي بعد ذلك <jdk-install> مجلد تثبيت JDK.
![]() |
6.9. تثبيت مدير المحاكيات Genymotion
تقدم شركة [Genymotion] محاكي Android عالي الأداء. يتوفر هذا المحاكي في URL [https://cloud.genymotion.com/page/launchpad/download/] (يونيو 2016).
سيتعين عليك التسجيل للحصول على نسخة للاستخدام الشخصي. قم بتنزيل المنتج [Genymotion] مع الجهاز الظاهري VirtualBox:

سنطلق بعد ذلك على مجلد تثبيت [Genymotion] اسم <genymotion-install>. قم بتشغيل [Genymotion]. ثم قم بتنزيل صورة لجهاز لوحي:
![]() |
- في [1]، أضف الجهاز الافتراضي الموصوف في [2]؛
![]() |
- في [3]، قم بتكوين الجهاز؛
![]() | ![]() |
- إلى [4-5]، قم بتخصيص الجهاز لبيئتك؛
- في [6]، قم بتشغيل الجهاز الطرفي الافتراضي؛
إذا سارت الأمور على ما يرام، ستظهر نافذة محاكي Android:

في بعض الأحيان، لا يتم تشغيل محاكي Android. باستخدام جهاز يعمل بنظام Windows، يمكنك التحقق من النقطتين التاليتين:
- تأكد من أن الجهاز الافتراضي [Hyper-V] غير مثبت. إذا لزم الأمر، قم بإلغاء تثبيته [1-2]؛
![]() | ![]() |
- ثم في مساعد التكوين [Centre Réseau et partage] [1]:
![]() |
![]() | ![]() |
- في [3]، حدد البطاقة أو البطاقات المرتبطة بالجهاز الظاهري Virtual Box؛
![]() |
- تأكد من أنه في [6]، تم تحديد برنامج التشغيل الخاص بـ VirtualBox. كرر العملية لجميع البطاقات المرتبطة بالجهاز الظاهري Virtual Box؛
6.10. تثبيت Maven
Maven هو أداة لإدارة تبعيات مشروع Java وأكثر من ذلك. وهو متاح في URL [http://maven.apache.org/download.cgi].
![]() |
قم بتنزيل الملف المضغوط وفك ضغطه. سنسمي مجلد تثبيت Maven بـ <maven-install>.
![]() |
- في [1]، يقوم الملف [conf / settings.xml] بتكوين Maven؛
يحتوي على الأسطر التالية:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
القيمة الافتراضية للسطر 4، إذا كان ملف {user.home} الخاص بك يحتوي على مسافة في مساره (على سبيل المثال [C:\Users\Serge Tahé])، كما هو الحال بالنسبة لي، فقد يسبب ذلك مشكلة لبعض البرامج. سنكتب إذن شيئًا مثل:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\Programs\devjava\maven\.m2\repository</localRepository>
ونتجنب، في السطر 7، مسارًا يحتوي على مسافات.
6.11. تثبيت IDE Android Studio
يتوفر IDE Android Studio Community Edition في URL [https://developer.android.com/studio/index.html] (يونيو 2016):
![]() |
قم بتثبيت IDE ثم قم بتشغيله. باتباع الإجراء [1-8]، قم بتثبيت مكونات SDK Manager المستخدمة في الأمثلة التالية. إذا قررت تثبيت عناصر أحدث، فمن المحتمل أن تتلقى تحذيرات من Android Studio تفيد بأن تكوين الأمثلة يشير إلى عناصر من SDK غير موجودة في بيئتك. يمكنك عندئذ اتباع الاقتراحات المقدمة من IDE.
![]() |
![]() |
![]() |
- في [9]، اطلب الاطلاع على تفاصيل الحزم:
![]() |
- في [11] أعلاه، استخدمت الأمثلة SDK Build-Tools 23.0.3؛
- في [9-12] أدناه، حدد المجلد الذي قمت بتثبيت مدير المحاكيات [Genymotion] فيه؛
![]() | ![]() |
- في [13-18]، يتم تكوين الطبيعة الافتراضية للمشاريع؛
![]() | ![]() |
- في [17]، تكون القيمة المقترحة افتراضيًا هي القيمة الصحيحة عادةً؛
- في [18]، تأكد من أن لديك JDK 1.8؛
أدناه، في [19-26]، يتم تعطيل التصحيح الإملائي الذي يكون افتراضيًا للغة الإنجليزية؛
![]() | ![]() |
![]() |
- فيما يلي، في [27-28]، اختر نوع اختصارات لوحة المفاتيح التي تريدها. يمكنك الاحتفاظ بالاختصارات الافتراضية لـ Intellij أو اختيار تلك الموجودة في IDE التي قد تكون أكثر اعتيادًا عليها؛
![]() |
- أدناه، في [29-30]، اعرض أرقام أسطر الكود؛
![]() |
- أدناه، في [31-34]، حدد كيف تريد إدارة المشروع الأول عند تشغيل IDE ثم المشاريع التالية؛
![]() |
مع Android 2.1 (مايو 2016)، تسبب تقنية [Instant Run] أحيانًا مشاكل. في هذا المستند، قمنا بتعطيلها:
![]() | ![]() |
- في [3-4]، تم تعطيل كل شيء؛
6.12. استخدام الأمثلة
تتوفر مشاريع Android Studio الخاصة بالأمثلة ICI|. قم بتنزيلها.
![]() |
تم إنشاء الأمثلة باستخدام العناصر المحددة سابقًا:
- JDK 1.8؛
- منصة Android SDK 23 للتشغيل؛
أدوات SDK التالية:
![]() |
إذا كانت بيئتك لا تتطابق مع ما سبق، فسيتعين عليك تغيير تكوين المشاريع. قد يكون هذا أمرًا شاقًا إلى حد ما. في البداية، من الأسهل على الأرجح إعادة إنشاء بيئة عمل مشابهة لتلك المذكورة أعلاه.
قم بتشغيل Android Studio ثم افتح مشروع [exemple-07] على سبيل المثال:
![]() | ![]() |
![]() |
- في [1-3]، نفتح المشروع [Exemple-07]؛
- في [4]، يتم التحقق من الملف [local.properties]؛
![]() | ![]() |
- السطر 11 أعلاه، ضع موقع SDK مدير Android <sdk-manager-install>. يمكنك العثور عليه باتباع الإجراء [1-4]:
![]() |
جميع الأمثلة الواردة في هذا المستند هي مشاريع Gradle تم تكوينها بواسطة ملف [build.gradle] [1-2]:
![]() |
ملف [build.gradle] في المثال 07 هو التالي:
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
// استبدل بالإصدار الحالي من المكون الإضافي Android
classpath 'com.android.tools.build:gradle:2.1.0'
// منذ إصدار المكون الإضافي Gradle لنظام Android 0.11، يجب عليك استخدام android-apt >= 1.3
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '4.0.0'
dependencies {
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
repositories {
jcenter()
}
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName android.defaultConfig.applicationId
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "android.exemples"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
وفقًا لبيئة Android (SDK والأدوات) التي قمت بإنشائها، قد تضطر إلى تغيير إصدارات الأسطر 8 و21 و22 و38 و39. يساعدك Android Studio من خلال تقديم اقتراحات. وأسهل طريقة هي اتباع هذه الاقتراحات.
يمكن الوصول إلى عناصر الملف [build.gradle] بطريقة أخرى:
![]() | ![]() |
- تستعرض علامات التبويب المختلفة في [3] القيم المختلفة لملف [build.gradle]. يمكننا إذن إنشاء هذا الملف بهذه الطريقة التي تسمح لنا بتجنب مشاكل صياغة ملف [build.gradle]؛
هناك نقطة أخرى يجب التحقق منها وهي JDK المستخدم من قبل IDE [5]:
![]() |
في [6]، تحقق من JDK.
جميع الأمثلة عبارة عن مشاريع Gradle لها تبعيات يجب تنزيلها. للقيام بذلك، يمكن اتباع الخطوات التالية:
![]() | ![]() ![]() |
- في [5]، نقوم بتجميع المشروع؛
بمجرد أن يصبح المشروع خاليًا من الأخطاء، يجب إنشاء تكوين للتنفيذ [1-8]:
![]() | ![]() |
- في [8]، يمكننا تحديد أننا نريد دائمًا استخدام نفس الجهاز للتشغيل. بشكل عام، يتم تحديد هذه الخيار لتجنب الحاجة إلى تحديد الجهاز المراد استخدامه عند كل تشغيل جديد. هنا، نتركها غير محددة لأننا سنقوم باختبار أجهزة Android مختلفة؛
- بمجرد إنشاء إعدادات التشغيل، نقوم بتشغيل مدير محاكيات Android [1-3]؛
![]() | ![]() |
- إذا لم يتم تشغيل محاكي Android، فراجع النقاط المذكورة في الفقرة 6.11؛
لتشغيل التطبيق على المحاكي، اتبع الخطوات التالية [1-4]:
![]() | ![]() |
- في [2]، يجب أن يظهر المحاكي الذي قمت بتشغيله مسبقًا؛
![]() |
- في [5]، العرض الذي يعرضه المحاكي؛
قم الآن بتوصيل جهاز لوحي يعمل بنظام أندرويد بمنفذ USB في جهاز PC وقم بتشغيل التطبيق عليه:
![]() |
- في [6]، حدد جهاز Android اللوحي واختبر التطبيق.
في [7]، لدينا أجهزة طرفية افتراضية محددة مسبقًا. سنتعلم كيفية إضافة أجهزة طرفية وإزالتها.
![]() |
![]() |
في لقطة الشاشة أعلاه، تعمل جميع الأجهزة المقترحة مع API 22. سنقوم بحذفها جميعًا لأننا نريد العمل مع API 23. نتبع الإجراء [2-3] للأجهزة المراد حذفها.

![]() |
- في [4-5]، نضيف جهازًا لوحيًا؛
![]() |
- في [6]، نختار API. أعلاه نختار API 23 لنظام Windows 64 بت؛
![]() |
- في [7]، ملخص الإعدادات التي تم إجراؤها؛
- في [8]، يمكن إجراء تكوين أكثر تقدمًا للمحطة الطرفية الافتراضية؛
![]() |
بمجرد انتهاء المعالج، يظهر الجهاز الذي تم إنشاؤه في [9].
وبعد ذلك، إذا أعدنا تشغيل [Exemple-07]، فسنحصل على النافذة التالية:
![]() |
- في [1]، يظهر الجهاز الطرفي الافتراضي الجديد؛
- في [2]، يمكن إنشاء محطات جديدة؛
قم بإجراء بعض الاختبارات لتحديد الجهاز الظاهري الأنسب لجهازك. في هذا المستند، تم اختبار الأمثلة بشكل أساسي باستخدام محاكي Genymotion.
بغض النظر عن الجهاز الافتراضي الذي يتم اختياره، يتم عرض السجلات في النافذة المسماة [Logcat] [1-2]:

راجع هذه السجلات بانتظام. فهناك سيتم الإبلاغ عن الاستثناءات التي تسببت في تعطل برنامجك.
يمكنك أيضًا تصحيح أخطاء برنامجك باستخدام أدوات التصحيح المعتادة:
![]() | ![]() |
- في [2]، يتم وضع نقطة توقف بالنقر مرة واحدة على العمود الموجود على يسار السطر المستهدف. يؤدي النقر مرة أخرى إلى إلغاء نقطة التوقف؛
![]() |
- في [3]، عند نقطة التوقف، قم بما يلي:
- [F6]، لتنفيذ السطر دون الدخول إلى الطرق إذا كان السطر يحتوي على استدعاءات للطرق،
- [F5]، لتنفيذ السطر مع الدخول إلى الطرق إذا كان السطر يحتوي على استدعاءات للطرق،
- [F8]، للمتابعة حتى نقطة التوقف التالية؛
- [Ctrl-F2]، لإيقاف التصحيح؛
6.13. تثبيت المكون الإضافي لمتصفح Chrome [Advanced Rest Client]
في هذا المستند، نستخدم متصفح Chrome من Google (http://www.google.fr/intl/fr/chrome/browser/ ). سنضيف إليه الملحق [Advanced Rest Client] . يمكننا القيام بذلك على النحو التالي:
- الذهاب إلى موقع [Google Web store] (https://chrome.google.com/webstore) باستخدام متصفح Chrome؛
- ابحث عن التطبيق [Advanced Rest Client]:
![]() |
- التطبيق متاح للتنزيل:
![]() |
- للحصول عليه، سيتعين عليك إنشاء حساب Google. يطلب [Google Web Store] بعد ذلك تأكيدًا [1]:
![]() | ![]() |
- في [2]، الملحق المضاف متاح في الخيار [Applications] [3]. يتم عرض هذا الخيار في كل علامة تبويب جديدة تقوم بإنشائها (CTRL-T) في المتصفح.
6.14. إدارة الإطار jSON في Java
بشكل شفاف للمطور، يستخدم إطار العمل [Spring MVC] مكتبة jSON [Jackson]. لتوضيح ماهية jSON (JavaScript Object Notation)، نقدم هنا برنامجًا يقوم بتسلسل الكائنات في jSON ويقوم بالعكس عن طريق فك تسلسل سلاسل jSON التي تم إنتاجها لإعادة إنشاء الكائنات الأولية.
تسمح مكتبة "Jackson" بإنشاء:
- سلسلة jSON لكائن: new ObjectMapper().writeValueAsString(object)؛
- كائن من سلسلة jSON: new ObjectMapper().readValue(jsonString, Object.class).
من المحتمل أن تطلق كلتا الطريقتين IOException. فيما يلي مثال على ذلك.
![]() |
المشروع أعلاه هو مشروع Maven يحتوي على الملف [pom.xml] التالي؛
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>istia.st.pam</groupId>
<artifactId>json</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
- الأسطر 12-16: التبعية التي تجلب مكتبة 'Jackson'؛
الفئة [Personne] هي التالية:
package istia.st.json;
public class Personne {
// البيانات
private String nom;
private String prenom;
private int age;
// المصنعون
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// التوقيع
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// مُستردات ومُعيّنات
...
}
الفئة [Main] هي كما يلي:
package istia.st.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Main {
// أداة التسلسل/إلغاء التسلسل
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// إنشاء شخص
Personne paul = new Personne("Denis", "Paul", 40);
// عرض Json
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// إنشاء مثيل Personne من Json
Personne p = mapper.readValue(json, Personne.class);
// عرض الشخص
System.out.println("Personne=" + p);
// جدول
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// عرض Json
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// قاموس
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// عرض Json
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
يؤدي تنفيذ هذه الفئة إلى عرض الشاشة التالية:
من المثال، نستخلص ما يلي:
- الكائن [ObjectMapper] المطلوب للتحويلات jSON / الكائن: السطر 11؛
- التحويل [Personne] --> jSON: السطر 17؛
- التحويل jSON --> [Personne]: السطر 20؛
- الاستثناء [IOException] الذي أطلقته الطريقتان: السطر 13.
6.15. تثبيت [WampServer]
[WampServer] عبارة عن مجموعة برامج للتطوير في PHP / MySQL / Apache على جهاز يعمل بنظام Windows. سنستخدمه فقط لـ SGBD MySQL.
![]() | ![]() |
- على موقع [WampServer] [1]، اختر الإصدار المناسب [2]،
- الملف القابل للتنفيذ الذي تم تنزيله هو برنامج تثبيت. يتم طلب معلومات متنوعة أثناء التثبيت. هذه المعلومات لا تتعلق بـ MySQL. لذا يمكن تجاهلها. تظهر نافذة [3] في نهاية التثبيت. قم بتشغيل [WampServer]،
![]() | ![]() |
- في [4]، يتم تثبيت رمز [WampServer] في شريط المهام أسفل يمين الشاشة [4]،
- عند النقر عليها، تظهر القائمة [5]. وهي تسمح بإدارة خادم Apache و SGBD MySQL. لإدارة هذا الخادم، نستخدم الخيار [PhpPmyAdmin]،
- ثم تظهر النافذة أدناه،

لن نقدم سوى القليل من التفاصيل حول استخدام [PhpMyAdmin]. نوضح في الوثيقة كيفية استخدامه.





























































































