شبکه شبیه ساز اندروید را راه اندازی کنید

این شبیه ساز قابلیت های شبکه ای همه کاره را ارائه می دهد که می توانید از آنها برای راه اندازی محیط های مدل سازی و آزمایش پیچیده برای برنامه خود استفاده کنید. این صفحه معماری و قابلیت های شبکه شبیه ساز را معرفی می کند.

فضای آدرس شبکه

هر نمونه از شبیه ساز در پشت یک روتر مجازی یا سرویس فایروال اجرا می شود که آن را از رابط ها و تنظیمات شبکه ماشین توسعه شما و از اینترنت جدا می کند. دستگاه شبیه‌سازی‌شده نمی‌تواند دستگاه توسعه یا سایر نمونه‌های شبیه‌ساز شما را در شبکه شناسایی کند. فقط تشخیص می دهد که از طریق اترنت به روتر یا فایروال متصل است.

روتر مجازی برای هر نمونه فضای آدرس شبکه 10.0.2/24 را مدیریت می کند. تمامی آدرس های مدیریت شده توسط روتر به صورت 10.0.2 می باشد. xx ، که در آن xx یک عدد است. آدرس‌های داخل این فضا توسط شبیه‌ساز یا روتر به شرح زیر از قبل تخصیص داده می‌شوند:

آدرس شبکه توضیحات
10.0.2.1 آدرس روتر یا دروازه
10.0.2.2 نام مستعار ویژه رابط Loopback میزبان شما (127.0.0.1 در ماشین توسعه شما)
10.0.2.3 اولین سرور DNS
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 هستند و احتمالاً در دستگاه‌های واقعی بسیار متفاوت هستند (که احتمالاً آدرس شبکه ترجمه شده است، به‌ویژه پشت روتر یا فایروال).

محدودیت های شبکه های محلی

برنامه های اندرویدی که روی یک شبیه ساز اجرا می شوند می توانند به شبکه موجود در ایستگاه کاری شما متصل شوند. با این حال، برنامه ها از طریق شبیه ساز متصل می شوند، نه مستقیماً به سخت افزار، و شبیه ساز مانند یک برنامه معمولی در ایستگاه کاری شما عمل می کند. این می تواند محدودیت هایی ایجاد کند:

  • ارتباط با دستگاه شبیه سازی شده ممکن است توسط یک برنامه فایروال که روی دستگاه شما اجرا می شود مسدود شود.
  • ارتباط با دستگاه شبیه سازی شده ممکن است توسط فایروال یا روتر دیگری (فیزیکی) که دستگاه شما متصل است مسدود شود.

روتر مجازی شبیه ساز باید بتواند تمام اتصالات و پیام های TCP و UDP خروجی را از طرف دستگاه شبیه سازی شده کنترل کند، مشروط بر اینکه محیط شبکه ماشین توسعه شما این امکان را داشته باشد. هیچ محدودیت داخلی برای شماره یا محدوده پورت وجود ندارد، فقط محدودیت هایی که توسط سیستم عامل و شبکه میزبان شما اعمال می شود.

بسته به محیط، شبیه ساز ممکن است نتواند از پروتکل های دیگر (مانند ICMP، که برای "پینگ" استفاده می شود) پشتیبانی کند. در حال حاضر، شبیه ساز از IGMP یا Multicast پشتیبانی نمی کند.

از تغییر مسیر شبکه استفاده کنید

برای برقراری ارتباط با یک نمونه شبیه ساز در پشت روتر مجازی آن، تغییر مسیر شبکه را در روتر مجازی تنظیم کنید. سپس کلاینت ها می توانند به یک پورت مهمان مشخص شده در روتر متصل شوند، در حالی که روتر ترافیک را به و از آن پورت به پورت میزبان دستگاه شبیه سازی شده هدایت می کند.

برای راه اندازی تغییر مسیر شبکه، نقشه ای از پورت ها و آدرس های میزبان و مهمان در نمونه شبیه ساز ایجاد کنید. دو راه برای تنظیم تغییر مسیر شبکه وجود دارد: استفاده از دستورات کنسول شبیه ساز و استفاده از ابزار 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 ارائه نمی دهد.

تنظیمات DNS شبیه ساز را پیکربندی کنید

هنگام راه اندازی، شبیه ساز لیست سرورهای DNS را که سیستم شما در حال حاضر از آنها استفاده می کند، می خواند. سپس آدرس‌های IP حداکثر چهار سرور را در این لیست ذخیره می‌کند و در صورت نیاز، نام مستعار آنها را در آدرس‌های شبیه‌سازی شده 10.0.2.3، 10.0.2.4، 10.0.2.5 و 10.0.2.6 تنظیم می‌کند.

در لینوکس و macOS، شبیه‌ساز آدرس‌های سرور DNS را با تجزیه فایل /etc/resolv.conf به دست می‌آورد. در ویندوز، شبیه ساز آدرس ها را با فراخوانی GetNetworkParams() API بدست می آورد. توجه داشته باشید که این معمولاً به این معنی است که شبیه‌ساز محتوای فایل "hosts" شما را نادیده می‌گیرد ( /etc/hosts در Linux/macOS، %WINDOWS%/system32/HOSTS در ویندوز).

هنگام راه‌اندازی شبیه‌ساز از خط فرمان، می‌توانید از گزینه -dns-server <serverList> برای تعیین دستی آدرس‌های سرورهای DNS برای استفاده استفاده کنید، جایی که <serverList> لیستی از نام سرورها یا آدرس‌های IP است که با کاما از هم جدا شده‌اند. اگر در شبکه شبیه‌سازی‌شده با مشکلات وضوح DNS مواجه می‌شوید، ممکن است این گزینه مفید باشد (برای مثال، پیام «خطای میزبان ناشناخته» که هنگام استفاده از مرورگر وب ظاهر می‌شود).

از شبیه ساز با یک پروکسی استفاده کنید

در بسیاری از شبکه‌های شرکتی، مدیران شبکه از اتصال مستقیم به اینترنت خودداری می‌کنند. در عوض، اتصالات اینترنتی باید از طریق یک پروکسی خاص عبور کنند. برای دسترسی به اینترنت در یک شبکه با نیاز به پروکسی، شبیه ساز باید بداند که یک پروکسی وجود دارد و باید به آن متصل شود.

با توجه به ماهیت HTTP، اتصال مستقیم وب سرور و اتصال از طریق یک پروکسی منجر به درخواست های مختلف GET می شود. شبیه ساز به طور شفاف درخواست های GET را از دستگاه مجازی قبل از صحبت با پروکسی بازنویسی می کند تا کار کند.

اگر شبیه ساز شما باید از طریق یک سرور پراکسی به اینترنت دسترسی داشته باشد، می توانید یک پراکسی HTTP سفارشی را از صفحه کنترل های توسعه یافته شبیه ساز پیکربندی کنید:

  1. با باز کردن شبیه ساز، روی More کلیک کنید.
  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. در کنسول B، یک تغییر مسیر از 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 گوش می دهد.
  • در کنسول B، دستور redir add tcp:8080:80.
  • C به 10.0.2.2:8080 متصل می شود.

یک تماس صوتی یا پیامک به نمونه شبیه ساز دیگری ارسال کنید

شبیه ساز به طور خودکار تماس های صوتی شبیه سازی شده و پیام های SMS را از یک نمونه به نمونه دیگر ارسال می کند. برای ارسال تماس صوتی یا پیامک به ترتیب از اپلیکیشن شماره گیر یا اپلیکیشن پیامک از یکی از شبیه سازها استفاده کنید.

برای شروع یک تماس صوتی شبیه سازی شده با یک نمونه شبیه ساز دیگر:

  1. برنامه شماره گیر را در نمونه اولیه شبیه ساز راه اندازی کنید.
  2. به عنوان شماره ای که باید شماره گیری کنید، شماره پورت کنسول نمونه مورد نظر را وارد کنید.

    می‌توانید شماره پورت کنسول نمونه مورد نظر را با بررسی عنوان پنجره آن، در صورتی که در پنجره جداگانه اجرا می‌شود، تعیین کنید، اما اگر در پنجره ابزار اجرا می‌شود، نه. شماره پورت کنسول به عنوان "Android Emulator (<port>)" گزارش شده است.

    از طرف دیگر، دستور adb devices فهرستی از دستگاه های مجازی در حال اجرا و شماره پورت کنسول آنها را چاپ می کند. برای اطلاعات بیشتر، به درخواست دستگاه‌ها مراجعه کنید.

  3. روی دکمه شماره گیری کلیک کنید. یک تماس ورودی جدید در نمونه شبیه ساز هدف ظاهر می شود.

برای ارسال پیامک به یک نمونه شبیه ساز دیگر:

  1. در صورت وجود، برنامه SMS را راه اندازی کنید.
  2. شماره پورت کنسول نمونه شبیه ساز هدف را به عنوان آدرس پیامک مشخص کنید.
  3. متن پیام را وارد کنید
  4. پیام را ارسال کنید. پیام به نمونه شبیه ساز هدف تحویل داده می شود.
  5. همچنین می توانید برای شبیه سازی تماس صوتی یا پیامک ورودی به یک کنسول شبیه ساز متصل شوید. برای اطلاعات بیشتر، شبیه سازی تلفن و شبیه سازی پیامک را ببینید.