האמולטור מספק יכולות רשת מגוונות שבהן אפשר להשתמש כדי להגדיר סביבות מורכבות של מודלים ובדיקות לאפליקציה. בדף הזה מוסבר על ארכיטקטורת הרשת והיכולות של האמולטור.
מרחב כתובות רשת
כל מופע של האמולטור פועל מאחורי נתב וירטואלי או שירות חומת אש שמבודד אותו מממשקי הרשת וההגדרות של מכונת הפיתוח ומאינטרנט. מכשיר שמופעל באמצעות אמולטור לא יכול לזהות את מכונת הפיתוח או מופעים אחרים של אמולטורים ברשת. הוא מזהה רק שהוא מחובר דרך אתרנט לנתב או לחומת אש.
הנתב הווירטואלי של כל מכונה מנהל את מרחב כתובות הרשת 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 Emulator, וסביר להניח שהן יהיו שונות מאוד במכשירים אמיתיים (שגם סביר להניח שהכתובות שלהם יעברו תרגום כתובות רשת, במיוחד אם הם נמצאים מאחורי נתב או חומת אש).
הגבלות על רשתות מקומיות
אפליקציות ל-Android שפועלות באמולטור יכולות להתחבר לרשת שזמינה בתחנת העבודה שלכם. עם זאת, האפליקציות מתחברות דרך האמולטור, ולא ישירות לחומרה, והאמולטור פועל כמו אפליקציה רגילה בתחנת העבודה. הדבר עלול לגרום לכמה מגבלות:
- יכול להיות שתוכנת חומת אש שפועלת במחשב שלכם חוסמת את התקשורת עם המכשיר המדומה.
- יכול להיות שחומת אש או נתב אחרים (פיזיים) שהמכונה שלכם מחוברת אליהם יחסמו את התקשורת עם המכשיר המדומה.
הנתב הווירטואלי של האמולטור אמור להיות מסוגל לטפל בכל הודעות וחיבורי ה-TCP וה-UDP היוצאים בשם המכשיר המדומה, בתנאי שסביבת הרשת של מכונת הפיתוח מאפשרת זאת. אין מגבלות מובנות על מספרי יציאות או טווחים, רק אלה שמוגבלים על ידי מערכת ההפעלה והרשת של המארח.
יכול להיות שהאמולטור לא יוכל לתמוך בפרוטוקולים אחרים (כמו ICMP, שמשמש ל-'פינג'), בהתאם לסביבה. בשלב הזה, האמולטור לא תומך ב-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
.
הגדרת הגדרות DNS של אמולטור
בתחילת ההפעלה, האמולטור קורא את רשימת שרתי ה-DNS שהמערכת שלכם משתמשת בהם כרגע. לאחר מכן, הוא מאחסן את כתובות ה-IP של עד ארבעה שרתים ברשימה הזו ומגדיר להם כתובות אימייל כלליות בכתובות המדומות 10.0.2.3, 10.0.2.4, 10.0.2.5 ו-10.0.2.6, לפי הצורך.
ב-Linux וב-macOS, כתובות שרתי ה-DNS מתקבלות על ידי ניתוח הקובץ /etc/resolv.conf
. ב-Windows, האמולטור מקבל את הכתובות על ידי קריאה ל-API GetNetworkParams()
. שימו לב שבדרך כלל המשמעות היא שהאמולטור מתעלם מהתוכן של הקובץ hosts (/etc/hosts
ב-Linux/macOS, %WINDOWS%/system32/HOSTS
ב-Windows).
כשמפעילים את האמולטור משורת הפקודה, אפשר להשתמש באפשרות -dns-server <serverList>
כדי לציין באופן ידני את הכתובות של שרתי ה-DNS שבהם רוצים להשתמש. <serverList>
היא רשימה מופרדת בפסיקים של שמות שרתים או כתובות IP. האפשרות הזו יכולה להיות שימושית אם נתקלתם בבעיות ברזולוציית DNS ברשת המדומה (לדוגמה, הודעת השגיאה 'מארח לא ידוע' שמופיעה כשמשתמשים בדפדפן האינטרנט).
שימוש באמולטור עם שרת proxy
ברשתות ארגוניות רבות, האדמינים של הרשת מסרבים לאפשר חיבורים ישירים לאינטרנט. במקום זאת, החיבורים לאינטרנט צריכים לעבור דרך שרת Proxy ספציפי. כדי לגשת לאינטרנט ברשת עם דרישת Proxy, האמולטור צריך לדעת שיש Proxy ושהוא צריך להתחבר אליו.
בגלל האופי של HTTP, חיבור ישיר לשרת אינטרנט וחיבור דרך proxy יוצרים בקשות GET שונות. האמולטור משכתב באופן שקוף את בקשות ה-GET מהמכשיר הווירטואלי לפני שהוא מתקשר עם ה-proxy, כדי שהן יפעלו.
אם האמולטור צריך לגשת לאינטרנט דרך שרת proxy, אפשר להגדיר שרת proxy HTTP מותאם אישית.
כשמשתמשים באמולטור בתוך Android Studio, אפשר להגדיר שרת proxy באמצעות ההגדרות בתפריט של Android Studio (Settings > Appearance & Behavior > System Settings > HTTP Proxy
). פרטים נוספים זמינים במאמר הגדרת שרת proxy ב-Android Studio במסמכי התיעוד של Android Studio
.
כשמשתמשים באמולטור באופן עצמאי (מחוץ ל-Android Studio), אפשר להגדיר שרת proxy ממסך ההגדרות המתקדמות של האמולטור:
- כשהאמולטור פתוח, לוחצים על עוד
.
- לוחצים על הגדרות ואז על Proxy (זמין רק אם האמולטור לא הופעל מ-Android Studio).
- מגדירים את ה-HTTP proxy.

אפשרות אחרת היא להגדיר שרת proxy משורת הפקודה באמצעות האפשרות -http-proxy <proxy>
כשמפעילים את האמולטור.
במקרה כזה, צריך לציין את פרטי השרת הפרוקסי ב-<proxy>
באחד מהפורמטים הבאים:
http://<machineName>:<port>
או
http://<username>:<password>@<machineName>:<port>
האפשרות -http-proxy
מאלצת את האמולטור להשתמש ב-proxy של HTTP או HTTPS שצוין לכל חיבורי ה-TCP היוצאים. אין תמיכה בהפניה אוטומטית ל-UDP.
אפשר גם להגדיר את משתנה הסביבה http_proxy
עם הערך שרוצים להשתמש בו עבור <proxy>
. במקרה כזה, אין צורך לציין ערך ל-<proxy>
בפקודה -http-proxy
– האמולטור בודק את הערך של משתנה הסביבה http_proxy
בהפעלה ומשתמש בו באופן אוטומטי, אם הוא מוגדר.
אפשר להשתמש באפשרות -debug-proxy
כדי לאבחן בעיות בחיבור לשרת proxy.
מכונות אמולטור של Interconnect
כדי לאפשר למופע אחד של אמולטור לתקשר עם מופע אחר, צריך להגדיר הפניה אוטומטית של הרשת כמו שמתואר בהמשך.
נניח שהסביבה שלכם מיוצגת באופן הבא:
- 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.
שליחת שיחה קולית או SMS למופע אחר של אמולטור
האמולטור מעביר אוטומטית שיחות קוליות והודעות SMS מסימולציה ממופע אחד למופע אחר. כדי להתקשר או לשלוח הודעת SMS, משתמשים באפליקציית החייגן או באפליקציית ה-SMS, בהתאמה, באחד מהאמולטורים.
כדי להתחיל שיחה קולית מדומה למופע אחר של אמולטור:
- מפעילים את אפליקציית החייגן במופע האמולטור שממנו מתקשרים.
כמספר לחיוג, מזינים את מספר יציאת המסוף של מופע היעד.
אפשר לקבוע את מספר יציאת המסוף של מופע היעד על ידי בדיקת כותרת החלון שלו, אם הוא פועל בחלון נפרד, אבל לא אם הוא פועל בחלון כלי. מספר היציאה של המסוף מדווח כ-Android Emulator (<port>).
אפשרות אחרת היא להשתמש בפקודה
adb devices
כדי להדפיס רשימה של מכשירים וירטואליים שפועלים ואת מספרי יציאות המסוף שלהם. מידע נוסף מופיע במאמר בנושא שאילתות לגבי מכשירים.- לוחצים על לחצן החיוג. שיחה נכנסת חדשה מופיעה במופע היעד של האמולטור.
כדי לשלוח הודעת SMS למופע אחר של אמולטור:
- מפעילים את אפליקציית ה-SMS, אם היא זמינה.
- מציינים את מספר יציאת המסוף של מופע האמולטור של היעד ככתובת ה-SMS.
- מזינים את הטקסט של ההודעה.
- שולחים את ההודעה. ההודעה מועברת למופע היעד של האמולטור.
אפשר גם להתחבר למסוף של אמולטור כדי לדמות שיחה קולית או SMS נכנסים. מידע נוסף זמין במאמרים בנושא חיקוי של טלפוניה וחיקוי של SMS.