โปรแกรมจำลองมีฟีเจอร์เครือข่ายที่หลากหลายซึ่งคุณสามารถใช้เพื่อ ตั้งค่าสภาพแวดล้อมการจำลองและการทดสอบที่ซับซ้อนสำหรับแอปของคุณ หน้านี้ จะแนะนำสถาปัตยกรรมและความสามารถของเครือข่ายโปรแกรมจำลอง
พื้นที่ที่อยู่เครือข่าย
แต่ละอินสแตนซ์ของโปรแกรมจำลองจะทำงานอยู่เบื้องหลังเราเตอร์เสมือนหรือบริการไฟร์วอลล์ ซึ่งแยกอินสแตนซ์ดังกล่าวออกจากอินเทอร์เฟซและการตั้งค่าเครือข่ายของเครื่องพัฒนา และจากอินเทอร์เน็ต อุปกรณ์ที่จำลองไม่สามารถตรวจหาเครื่องพัฒนา หรืออินสแตนซ์โปรแกรมจำลองอื่นๆ ในเครือข่ายได้ โดยจะตรวจจับได้เฉพาะว่าอุปกรณ์ เชื่อมต่อผ่านอีเทอร์เน็ตกับเราเตอร์หรือไฟร์วอลล์
เราเตอร์เสมือนสำหรับแต่ละอินสแตนซ์จะจัดการพื้นที่ที่อยู่เครือข่าย 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 | เซิร์ฟเวอร์ DNS แรก |
10.0.2.4 / 10.0.2.5 / 10.0.2.6 | เซิร์ฟเวอร์ DNS ที่ 2, 3 และ 4 (ไม่บังคับ) |
10.0.2.15 | เครือข่ายอุปกรณ์จำลองเมื่อเชื่อมต่อโดยใช้อีเทอร์เน็ต |
10.0.2.16 | เครือข่ายอุปกรณ์จำลองเมื่อเชื่อมต่อโดยใช้ Wi-Fi |
127.0.0.1 | อินเทอร์เฟซการวนรอบของอุปกรณ์ที่จำลอง |
อินสแตนซ์อีมูเลเตอร์ที่ทำงานทั้งหมดจะใช้การกำหนดที่อยู่เดียวกัน ซึ่งหมายความว่าหากคุณมีอินสแตนซ์ 2 รายการที่ทำงานพร้อมกันในเครื่อง อินสแตนซ์แต่ละรายการจะมีเราเตอร์ของตัวเอง และอินสแตนซ์แต่ละรายการจะมีที่อยู่ IP เป็น 10.0.2.15 เราเตอร์จะแยกอินสแตนซ์ออกจากกันและอินสแตนซ์จะตรวจหา กันและกันในเครือข่ายเดียวกันไม่ได้ ดูข้อมูลเกี่ยวกับวิธี อนุญาตให้อินสแตนซ์โปรแกรมจำลองสื่อสารผ่าน TCP/UDP ได้ที่ส่วนเกี่ยวกับการเชื่อมต่ออินสแตนซ์โปรแกรมจำลอง
ที่อยู่ 127.0.0.1 ในเครื่องที่ใช้พัฒนาจะสอดคล้องกับอินเทอร์เฟซ Loopback ของโปรแกรมจำลอง หากต้องการเข้าถึงบริการที่ทำงาน ในอินเทอร์เฟซ Loopback ของเครื่องพัฒนา ให้ใช้ที่อยู่พิเศษ 10.0.2.2 แทน
ที่อยู่ที่จัดสรรไว้ล่วงหน้าของอุปกรณ์ที่จำลองจะ เฉพาะเจาะจงสำหรับ Android Emulator และมีแนวโน้มที่จะแตกต่างจากอุปกรณ์จริง อย่างมาก (ซึ่งมีแนวโน้มที่จะมีการแปลที่อยู่เครือข่ายด้วย โดยเฉพาะ ที่อยู่หลังเราเตอร์หรือไฟร์วอลล์)
ข้อจำกัดด้านเครือข่ายภายใน
แอป Android ที่ทำงานในโปรแกรมจำลองสามารถเชื่อมต่อกับเครือข่ายที่พร้อมใช้งานในเวิร์กสเตชันได้ อย่างไรก็ตาม แอปจะเชื่อมต่อผ่านโปรแกรมจำลอง ไม่ได้เชื่อมต่อกับฮาร์ดแวร์โดยตรง และโปรแกรมจำลอง จะทำงานเหมือนแอปปกติในเวิร์กสเตชัน ซึ่งอาจทำให้เกิดข้อจำกัดบางอย่าง ดังนี้
- ไฟร์วอลล์ โปรแกรมที่ทำงานในเครื่องของคุณอาจบล็อกการสื่อสารกับอุปกรณ์ที่จำลอง
- การสื่อสารกับอุปกรณ์ที่จำลองอาจถูกบล็อกโดยไฟร์วอลล์หรือเราเตอร์ (จริง) อื่นที่เครื่องของคุณเชื่อมต่ออยู่
เราเตอร์เสมือนของโปรแกรมจำลองควรจัดการการเชื่อมต่อและข้อความ TCP และ UDP ขาออกทั้งหมดในนามของอุปกรณ์ที่จำลองได้ ตราบใดที่สภาพแวดล้อมเครือข่ายของเครื่องพัฒนาซอฟต์แวร์อนุญาต ไม่มี ข้อจำกัดในตัวเกี่ยวกับหมายเลขหรือช่วงพอร์ต มีเพียงข้อจำกัดที่กำหนดโดย ระบบปฏิบัติการโฮสต์และเครือข่ายของคุณเท่านั้น
โปรแกรมจำลองอาจไม่รองรับโปรโตคอลอื่นๆ (เช่น ICMP ซึ่งใช้สำหรับ "ping") ทั้งนี้ขึ้นอยู่กับสภาพแวดล้อม ปัจจุบัน โปรแกรมจำลองยังไม่รองรับ IGMP หรือการส่งแบบหลายผู้รับ
ใช้การเปลี่ยนเส้นทางเครือข่าย
หากต้องการสื่อสารกับอินสแตนซ์โปรแกรมจำลองที่อยู่หลังเราเตอร์เสมือน ให้ตั้งค่าการเปลี่ยนเส้นทางเครือข่ายในเราเตอร์เสมือน จากนั้นไคลเอ็นต์จะเชื่อมต่อ กับพอร์ตสำหรับผู้มาเยือนที่ระบุในเราเตอร์ได้ ขณะที่เราเตอร์จะนำการรับส่งข้อมูล ไปยังและจากพอร์ตนั้นไปยังพอร์ตโฮสต์ของอุปกรณ์ที่จำลอง
หากต้องการตั้งค่าการเปลี่ยนเส้นทางเครือข่าย ให้สร้างการแมปโฮสต์และแขกรับเชิญ
พอร์ตและที่อยู่บนอินสแตนซ์โปรแกรมจำลอง คุณตั้งค่าการเปลี่ยนเส้นทางเครือข่ายได้ 2 วิธี ได้แก่ การใช้คำสั่งคอนโซลของโปรแกรมจำลองและการใช้เครื่องมือ 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 ของเซิร์ฟเวอร์สูงสุด 4 เครื่องในรายการนี้ และตั้งค่าชื่อแทนสำหรับเซิร์ฟเวอร์เหล่านั้นในที่อยู่ที่จำลอง 10.0.2.3, 10.0.2.4, 10.0.2.5 และ 10.0.2.6 ตามต้องการ
ใน Linux และ macOS โปรแกรมจำลองจะรับที่อยู่เซิร์ฟเวอร์ DNS โดยการแยกวิเคราะห์ไฟล์ /etc/resolv.conf
ใน Windows โปรแกรมจำลองจะรับที่อยู่โดยการเรียกใช้ GetNetworkParams()
API โปรดทราบว่าโดยปกติแล้วการดำเนินการนี้หมายความว่าโปรแกรมจำลองจะละเว้นเนื้อหาของไฟล์ "hosts"
(/etc/hosts
ใน Linux/macOS, %WINDOWS%/system32/HOSTS
ใน Windows)
เมื่อเริ่มโปรแกรมจำลองจากบรรทัดคำสั่ง คุณสามารถใช้ตัวเลือก
-dns-server <serverList>
เพื่อระบุที่อยู่ของเซิร์ฟเวอร์ DNS ที่จะใช้ด้วยตนเอง โดย <serverList>
คือรายการชื่อเซิร์ฟเวอร์หรือที่อยู่ IP ที่คั่นด้วยเครื่องหมายจุลภาค
คุณอาจพบว่าตัวเลือกนี้มีประโยชน์หากพบปัญหาการแปลง DNS ในเครือข่ายจำลอง (เช่น ข้อความ "ข้อผิดพลาดเกี่ยวกับโฮสต์ที่ไม่รู้จัก" ที่ปรากฏเมื่อใช้เว็บเบราว์เซอร์)
ใช้โปรแกรมจำลองกับพร็อกซี
ในเครือข่ายขององค์กรหลายแห่ง ผู้ดูแลเครือข่ายจะปฏิเสธการเชื่อมต่ออินเทอร์เน็ตโดยตรง แต่การเชื่อมต่ออินเทอร์เน็ตต้องผ่าน พร็อกซีที่เฉพาะเจาะจง หากต้องการเข้าถึงอินเทอร์เน็ตในเครือข่ายที่มีข้อกำหนดพร็อกซี โปรแกรมจำลอง ต้องทราบว่ามีพร็อกซีและต้องเชื่อมต่อกับพร็อกซีนั้น
เนื่องจากลักษณะของ HTTP การเชื่อมต่อเว็บเซิร์ฟเวอร์โดยตรงและการเชื่อมต่อผ่านพร็อกซีจะส่งผลให้เกิดคำขอ GET ที่แตกต่างกัน โปรแกรมจำลองจะเขียนคำขอ GET จากอุปกรณ์เสมือนใหม่โดยไม่แสดงให้เห็นก่อนที่จะสื่อสารกับพร็อกซีเพื่อให้ทำงานได้
หากโปรแกรมจำลองต้องเข้าถึงอินเทอร์เน็ตผ่านพร็อกซีเซิร์ฟเวอร์ คุณสามารถกำหนดค่า พร็อกซี HTTP ที่กำหนดเองได้
เมื่อใช้โปรแกรมจำลองภายใน Android Studio คุณจะกำหนดค่าพร็อกซีได้โดยใช้
การตั้งค่าในเมนู Android Studio
(Settings > Appearance & Behavior > System Settings > HTTP Proxy
)
ดูรายละเอียดเพิ่มเติมได้ที่ตั้งค่าพร็อกซี Android Studio ใน
เอกสารประกอบAndroid Studio
เมื่อใช้โปรแกรมจำลองแบบสแตนด์อโลน (นอก Android Studio) คุณจะกำหนดค่าพร็อกซีได้จากหน้าจอการควบคุมเพิ่มเติมของโปรแกรมจำลอง
- เมื่อเปิดโปรแกรมจำลองแล้ว ให้คลิกเพิ่มเติม
- คลิกการตั้งค่าและ พร็อกซี (ใช้ได้เฉพาะในกรณีที่ไม่ได้เปิดโปรแกรมจำลองจาก Android Studio)
- กำหนดการตั้งค่าพร็อกซี 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 คืออินสแตนซ์โปรแกรมจำลองที่ 2 ซึ่งทำงานบน 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