برای آزمایش برنامههایی که شامل تعاملات چند دستگاهی هستند، میتوانید چندین نمونه شبیهساز اندروید را به هم متصل کنید تا بتوانند با یکدیگر ارتباط برقرار کنند. روش برقراری ارتباط به نسخه شبیهساز مورد استفاده شما بستگی دارد.
شبیهسازهای اندروید نسخه ۳۶.۵ و بالاتر
شبیهساز اندروید نسخه ۳۶.۵ و بالاتر، یک مدل شبکه سادهشده ارائه میدهد که نمونهها را از طریق یک شبکه وایفای مشترک به هم متصل میکند.
با این پشته شبکه، چندین شبیهساز به عنوان دستگاههای مجزا در یک شبکه وایفای مجازی ظاهر میشوند. این به آنها اجازه میدهد تا با استفاده از پروتکلهای استاندارد مبتنی بر وایفای، یکدیگر را به طور خودکار کشف و با آنها ارتباط برقرار کنند.
شبیهسازها میتوانند با استفاده از فناوریهایی مانند Network Service Discovery (NSD) و Wi-Fi Direct، یکدیگر را در شبکه مجازی پیدا کنند.
از آنجا که شبیهسازها در یک شبکه وایفای یکسان قرار دارند، میتوانید آدرس IP خاص یک شبیهساز را پیدا کرده و مستقیماً از یک نمونه شبیهساز دیگر به آن متصل شوید. برای دریافت آدرس IP رابط مجازی وایفای ( wlan0 )، دستور زیر را از دستگاه میزبان خود اجرا کنید:
adb shell ip addr show wlan0
شبیهساز اندروید قبل از نسخه ۳۶.۵
اگر از نسخههای قدیمیتر شبیهساز اندروید استفاده میکنید، ارتباط مستقیم بین نمونهها به طور پیشفرض امکانپذیر نیست. هر نمونه شبیهساز پشت روتر مجازی خود عمل میکند و آن را از شبکه محلی و سایر شبیهسازها جدا میکند.
برای فعال کردن ارتباط، باید تغییر مسیر شبکه را به صورت دستی تنظیم کنید. این فرآیند شامل ایجاد نگاشتی است که ترافیک را از یک پورت خاص روی دستگاه میزبان شما به پورتی روی دستگاه شبیهسازی شده هدایت میکند و روتر مجازی را دور میزند.
شما میتوانید تغییر مسیر شبکه را به دو روش پیکربندی کنید:
- دستورات کنسول شبیهساز : از کنسول داخلی برای تنظیم نگاشتهای پورت برای نمونه شبیهساز در حال اجرا استفاده کنید.
- پل اشکالزدایی اندروید (adb) : از دستورات adb برای پیکربندی قوانین لازم برای ارسال پورت استفاده کنید.
تنظیم تغییر مسیر از طریق کنسول شبیهساز
هر نمونه شبیهساز یک کنسول کنترل ارائه میدهد که میتوانید به آن متصل شوید و دستوراتی را که مختص آن نمونه هستند، به آن صادر کنید. از دستور redir console برای تنظیم تغییر مسیر مورد نیاز برای یک نمونه شبیهساز استفاده کنید.
ابتدا، شماره پورت کنسول را برای نمونه شبیهساز هدف تعیین کنید. برای مثال، شماره پورت کنسول برای اولین نمونه شبیهساز اجرا شده ۵۵۵۴ است. سپس، با مشخص کردن شماره پورت کنسول آن، به کنسول نمونه شبیهساز هدف متصل شوید، به شرح زیر:
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 استفاده کنید. برای اطلاعات بیشتر در مورد این دستورات و سایر دستورات کنسول، به بخش ارسال دستورات کنسول شبیهساز مراجعه کنید.
شماره پورتها توسط محیط محلی شما محدود شدهاند. این معمولاً به این معنی است که شما نمیتوانید از شماره پورتهای میزبان زیر ۱۰۲۴ بدون امتیازات ویژه مدیر استفاده کنید. همچنین، شما قادر نخواهید بود برای پورت میزبانی که در حال حاضر توسط فرآیند دیگری در دستگاه شما در حال استفاده است، تغییر مسیر ایجاد کنید. در این صورت، redir یک پیام خطا به همین منظور ایجاد میکند.
تنظیم تغییر مسیر از طریق adb
ابزار Android Debug Bridge ( adb ) قابلیت port forwarding را ارائه میدهد که روشی جایگزین برای تنظیم تغییر مسیر شبکه است. برای اطلاعات بیشتر، به بخش Set up port forwarding در مستندات adb مراجعه کنید.
adb در حال حاضر راهی برای حذف تغییر مسیر ارائه نمیدهد، مگر اینکه سرور adb را متوقف کند.
نمونههای شبیهساز اتصال
برای اینکه یک نمونه شبیهساز بتواند با نمونه دیگر ارتباط برقرار کند، تغییر مسیر شبکه را همانطور که در مراحل زیر توضیح داده شده است، تنظیم کنید.
فرض کنید محیط شما به شکل زیر است:
- A ماشین توسعه شماست.
- B اولین نمونه شبیهساز شماست که روی A اجرا میشود.
- C دومین نمونه شبیهساز شماست که آن هم روی A اجرا میشود.
اگر میخواهید سروری روی B اجرا کنید که C به آن متصل شود، آن را به صورت زیر تنظیم کنید:
- سرور را روی B تنظیم کنید، به
10.0.2.15:<serverPort>گوش دهید. - در کنسول B، یک تغییر مسیر از A:
localhost:<localPort>به B:10.0.2.15:<serverPort>تنظیم کنید. - در C، کلاینت را به
10.0.2.2:<localPort>متصل کنید.
برای مثال، اگر میخواهید یک سرور HTTP اجرا کنید، <serverPort> را روی 80 و <localPort> را روی 8080 انتخاب کنید:
- B در
10.0.2.15:80گوش میدهد. - در کنسول B،
redir add tcp:8080:80اجرا کنید. - C به
10.0.2.2:8080 متصل میشود.