إعداد شبكات Android Emulator

يوفِّر المحاكي إمكانات شبكات متعدّدة الاستخدامات يمكنك استخدامها لإعداد بيئات تصميم واختبار معقّدة لتطبيقك. وتعرض هذه الصفحة بنية شبكة المحاكي وإمكاناتها.

مساحة عنوان الشبكة

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

جهاز التوجيه الافتراضي لكل مثيل يدير مساحة عنوان الشبكة 10.0.2/24. وتكون جميع العناوين التي يديرها جهاز التوجيه في شكل 10.0.2.xx، حيث يكون xx رقمًا. يتم تخصيص العناوين ضمن هذه المساحة مسبقًا بواسطة المحاكي أو جهاز التوجيه على النحو التالي:

عنوان الشبكة الوصف
10.0.2.1 عنوان جهاز التوجيه أو البوابة
10.0.2.2 اسم مستعار خاص لواجهة استرجاع المضيف (127.0.0.1 على جهاز التطوير)
10.0.2.3 خادم نظام أسماء النطاقات الأول
10.0.2.4 / 10.0.2.5 / 10.0.2.6 خوادم DNS الاختيارية الثانية والثالثة والرابعة
10.0.2.15 شبكة الجهاز التي تمت محاكاتها عند الاتصال باستخدام الإيثرنت
10.0.2.16 شبكة الجهاز التي تمت محاكاتها عند الاتصال باستخدام Wi-Fi
127.0.0.1 واجهة استرجاع الجهاز في وضع المحاكاة

تُستخدم تعيينات العناوين نفسها في جميع حالات المحاكي التي يتم تشغيلها. وهذا يعني أنّه إذا كان لديك مثيلان يعملان بشكل متزامن على جهازك، فسيكون لكل منهما جهاز التوجيه الخاص به، وخلف ذلك، سيكون لكل مثيل عنوان IP هو 10.0.2.15. يتم عزل المثيلات عن طريق جهاز توجيه ولا يمكنها اكتشاف بعضها البعض على نفس الشبكة. ولمزيد من المعلومات حول كيفية السماح لمثيلات المحاكي بالاتصال عبر بروتوكول TCP/UDP، يُرجى مراجعة القسم المتعلق بربط مثيلات المحاكي.

يتطابق العنوان 127.0.0.1 على جهاز التطوير مع واجهة الاسترجاع في المحاكي. للوصول إلى الخدمات التي تعمل على واجهة استرجاع جهاز التطوير، استخدم العنوان الخاص 10.0.2.2 بدلاً من ذلك.

إنّ العناوين المُخصّصة مسبقًا للجهاز الذي تمت محاكاته خاصة بمحاكي Android ومن المحتمل أن تكون مختلفة جدًا على الأجهزة الحقيقية (التي من المحتمل أيضًا أن تتم ترجمة عنوان الشبكة إليها، وخاصةً خلف جهاز التوجيه أو جدار الحماية).

القيود على الشبكات المحلية

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

  • ربما تم حظر الاتصال بالجهاز الذي تمت محاكاته من خلال برنامج جدار حماية يعمل على جهازك.
  • ربما يكون الاتصال بالجهاز الذي تمت محاكاته محظورًا من قِبل جدار حماية (فعلي) أو جهاز توجيه آخر في المكان الذي يتصل فيه جهازك.

من المفترض أن يكون الموجه الافتراضي للمحاكي قادرًا على معالجة جميع اتصالات TCP وUDP الصادرة ورسائله نيابةً عن الجهاز في وضع المحاكاة، بشرط أن تسمح بيئة شبكة جهاز التطوير بذلك. وما مِن قيود مضمّنة في أرقام المنافذ أو النطاقات، بل يتم فرض قيود على تلك التي يفرضها نظام التشغيل والشبكة المضيفة.

وحسب البيئة، قد لا يتمكن المحاكي من دعم البروتوكولات الأخرى (مثل بروتوكول ICMP المستخدم في برنامج "ping"). في الوقت الحالي، لا يدعم المحاكي IGMP أو البث المتعدد.

استخدام إعادة توجيه الشبكة

للاتصال بمثيل محاكي خلف جهاز التوجيه الافتراضي، عليك إعداد إعادة توجيه الشبكة على جهاز التوجيه الافتراضي. ويمكن للعملاء بعد ذلك الاتصال بمنفذ ضيف محدّد على جهاز التوجيه، بينما يوجّه جهاز التوجيه حركة البيانات من هذا المنفذ وإليه إلى منفذ مضيف الجهاز الذي تمت محاكاته.

لإعداد إعادة توجيه الشبكة، أنشئ تعيينًا لمنافذ المضيف والضيف وعناوين على مثيل المحاكي. هناك طريقتان لإعداد إعادة توجيه الشبكة: استخدام أوامر وحدة التحكّم المحاكية واستخدام أداة Android Debug Bridge (adb)، كما هو موضّح في الأقسام التالية.

إعداد عمليات إعادة التوجيه من خلال وحدة التحكّم في المحاكي

ويوفر كل مثيل محاكي وحدة تحكم تحكم يمكنك الاتصال بها وإصدار أوامر خاصة بتلك النسخة الافتراضية. استخدِم الأمر redir في وحدة التحكّم لإعداد عملية إعادة التوجيه حسب الحاجة في مثيل المحاكي.

أولاً، حدّد رقم منفذ وحدة التحكم لمثيل المحاكي المستهدف. على سبيل المثال، رقم منفذ وحدة التحكم لأول مثيل محاكي تم تشغيله هو 5554. بعد ذلك، اتصل بوحدة تحكم مثيل المحاكي المستهدف، مع تحديد رقم منفذ وحدة التحكم، كما يلي:

telnet localhost 5554

بعد الاتصال، عليك المصادقة قبل إعداد عملية إعادة التوجيه. اطّلِع على بدء جلسة وحدة تحكّم وإيقافها للحصول على تفاصيل حول طريقة إجراء ذلك. بعد المصادقة، استخدِم الأمر redir للتعامل مع إعادة التوجيه.

لإضافة عملية إعادة توجيه، استخدِم:

redir add <protocol>:<host-port>:<guest-port>

حيث يكون <protocol> هو tcp أو udp، و<host-port> و<guest-port>، يتم ضبط عملية الربط بين جهازك والنظام في وضع المحاكاة.

على سبيل المثال، يقوم الأمر التالي بإعداد عملية إعادة توجيه تعالج جميع اتصالات TCP الواردة إلى الجهاز المضيف (التطوير) على الجهاز المضيف (التطوير) على 127.0.0.1:5000 ويتم تمريرها عبر النظام الذي تمت محاكاته على 10.0.2.15:6000:

redir add tcp:5000:6000

لحذف عملية إعادة توجيه، استخدِم الأمر redir del. لإدراج جميع عمليات إعادة التوجيه لمثيل معيّن، استخدِم redir list. لمزيد من المعلومات حول هذه الأوامر وغيرها من الأوامر في وحدة التحكم، راجع مقالة إرسال أوامر وحدة تحكم المحاكي.

يُرجى ملاحظة أن أرقام المنافذ محظورة من قِبل بيئتك المحلية. ويعني هذا عادةً أنّه لا يمكنك استخدام أرقام منافذ المضيف الأقدم من 1024 بدون امتيازات مشرف خاصة. ولن تتمكّن أيضًا من إعداد عملية إعادة توجيه لمنفذ مضيف قيد الاستخدام من خلال عملية أخرى على جهازك. وفي هذه الحالة، سيظهر redir رسالة خطأ لهذا الإجراء.

إعداد إعادة التوجيه من خلال Adb

توفّر أداة Android Debug Bridge (adb) ميزة إعادة توجيه المنفذ، وهي طريقة بديلة لإعداد إعادة توجيه الشبكة. لمزيد من المعلومات، راجِع إعداد إعادة توجيه المنفذ في مستندات adb.

يُرجى العلم أنّ adb لا يوفّر في الوقت الحالي طريقة لإزالة عملية إعادة توجيه إلّا من خلال إيقاف خادم adb.

ضبط إعدادات نظام أسماء النطاقات للمحاكي

عند بدء التشغيل، يقرأ المحاكي قائمة خوادم نظام أسماء النطاقات التي يستخدمها نظامك حاليًا. ثم تقوم بعد ذلك بتخزين عناوين IP لما يصل إلى أربعة خوادم في هذه القائمة وإعداد الأسماء المستعارة لها على العناوين التي تمت محاكاتها 10.0.2.3 و10.0.2.4 و10.0.2.5 و10.0.2.6، حسب الحاجة.

على نظامي التشغيل Linux وmac، يحصل المحاكي على عناوين خادم نظام أسماء النطاقات من خلال تحليل الملف /etc/resolv.conf. في نظام التشغيل Windows، يحصل المحاكي على العناوين من خلال استدعاء واجهة برمجة التطبيقات GetNetworkParams(). ويُرجى العِلم بأنّ هذا يعني عادةً أنّ المحاكي يتجاهل محتوى ملف "hosts" (/etc/hosts على نظامَي التشغيل Linux/macOS و%WINDOWS%/system32/HOSTS على نظام التشغيل Windows).

عند بدء تشغيل المحاكي من سطر الأوامر، يمكنك استخدام الخيار -dns-server <serverList> لتحديد عناوين خوادم نظام أسماء النطاقات المطلوب استخدامها يدويًا، حيث يمثل <serverList> قائمة مفصولة بفواصل لأسماء الخوادم أو عناوين IP. وقد تجد هذا الخيار مفيدًا إذا واجهت مشاكل في تحليل نظام أسماء النطاقات في الشبكة التي تمت محاكاتها (على سبيل المثال، رسالة "خطأ مضيف غير معروف" التي تظهر عند استخدام متصفح الويب).

استخدام المحاكي مع خادم وكيل

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

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

إذا كان يجب على المحاكي الدخول إلى الإنترنت من خلال خادم وكيل، فيمكنك تهيئة خادم وكيل HTTP مخصص من شاشة عناصر التحكم الموسّعة في المحاكي:

  1. بعد فتح المحاكي، انقر على رمز المزيد .
  2. انقر على الإعدادات والخادم الوكيل.
  3. حدِّد إعدادات خادم وكيل HTTP.

بدلاً من ذلك، يمكنك إعداد خادم وكيل من سطر الأوامر باستخدام الخيار -http-proxy <proxy> عند بدء المحاكي. في هذه الحالة، حدِّد معلومات الخادم الوكيل في <proxy> بأحد التنسيقات التالية:

http://<machineName>:<port>

أو

http://<username>:<password>@<machineName>:<port>

يفرض الخيار -http-proxy على المحاكي استخدام وكيل HTTP أو HTTPS المحدد لجميع اتصالات TCP الصادرة. إعادة التوجيه لـ UDP غير متوافقة.

يمكنك بدلاً من ذلك تحديد متغير البيئة http_proxy بالقيمة التي تريد استخدامها للسمة <proxy>. في هذه الحالة، لن تحتاج إلى تحديد قيمة <proxy> في الأمر -http-proxy، لأنّ المحاكي يتحقّق من قيمة متغير بيئة http_proxy عند بدء التشغيل ويستخدم قيمته تلقائيًا، في حال تعريفه.

يمكنك استخدام الخيار -debug-proxy لتشخيص مشاكل اتصال الخادم الوكيل.

مثيلات محاكي الربط البيني

للسماح لمثيل محاكي بالتواصل مع مثيل آخر، عليك إعداد إعادة توجيه الشبكة كما هو موضّح أدناه.

افترض أن بيئتك ممثلة على النحو التالي:

  • A هو جهاز التطوير الخاص بك.
  • B هو أول مثيل محاكي يتم تشغيله على A.
  • C هو مثيل المحاكي الثاني، الذي يعمل أيضًا على A.

إذا كنت ترغب في تشغيل خادم على B سيتصل به C، فقم بإعداده على النحو التالي:

  1. قم بإعداد الخادم على B، ويستمع إلى 10.0.2.15:<serverPort>.
  2. في وحدة التحكم ب، قم بإعداد عملية إعادة توجيه من A:localhost:<localPort> إلى B:10.0.2.15:<serverPort>.
  3. على C، اطلب من العميل الاتصال بـ 10.0.2.2:<localPort>.

على سبيل المثال، إذا أردت تشغيل خادم HTTP، اختَر <serverPort> باعتباره 80 و<localPort> كـ 8080:

  • يستمع B على 10.0.2.15:80.
  • في وحدة التحكّم ب، المشكلة redir add tcp:8080:80.
  • C يتصل بـ 10.0.2.2:8080.

أرسِل مكالمة صوتية أو رسالة قصيرة SMS إلى مثيل محاكي آخر

يُعيد المحاكي تلقائيًا توجيه المكالمات الصوتية التي تمت محاكاتها والرسائل القصيرة SMS من مثيل إلى آخر. لإرسال مكالمة صوتية أو رسالة قصيرة SMS، استخدم تطبيق برنامج الاتصال أو تطبيق الرسائل القصيرة، على التوالي، من أحد المحاكيات.

لبدء محاكاة مكالمة صوتية لمثيل محاكي آخر:

  1. شغِّل تطبيق برنامج الاتصال على مثيل المحاكي الأصلي.
  2. كالرقم المطلوب الاتصال به، أدخِل رقم منفذ وحدة التحكّم للمثيل الهدف.

    يمكنك تحديد رقم منفذ وحدة التحكّم للمثيل المستهدَف من خلال التحقّق من عنوان النافذة، إذا كان يتم تشغيله في نافذة منفصلة، وليس ما إذا كان قيد التشغيل في نافذة أداة. ويتم الإبلاغ عن رقم منفذ وحدة التحكّم باسم "Android Emulator (<port>)".

    بدلاً من ذلك، يطبع الأمر adb devices قائمة بالأجهزة الافتراضية التي يتم تشغيلها وأرقام منافذ وحدة التحكّم الخاصة بها. لمزيد من المعلومات، يُرجى الاطّلاع على طلب البحث للأجهزة.

  3. انقر على زر الاتصال. تظهر مكالمة واردة جديدة في مثيل المحاكي المستهدف.

لإرسال رسالة SMS إلى مثيل محاكي آخر:

  1. شغِّل تطبيق الرسائل القصيرة (SMS) إذا كان متاحًا.
  2. حدّد رقم منفذ وحدة التحكم لمثيل المحاكي المستهدف كعنوان SMS.
  3. أدخِل نص الرسالة.
  4. أرسِل الرسالة. يتم تسليم الرسالة إلى مثيل المحاكي المستهدف.
  5. يمكنك أيضًا الاتصال بوحدة تحكم المحاكي لمحاكاة مكالمة صوتية واردة أو رسائل قصيرة SMS. لمزيد من المعلومات، يُرجى الاطّلاع على محاكاة الاتصال الهاتفي ومحاكاة الرسائل القصيرة.