โปรแกรมจำลองนี้มีความสามารถด้านเครือข่ายที่หลากหลายซึ่งคุณสามารถใช้เพื่อ สร้างสภาพแวดล้อมการสร้างแบบจำลองและการทดสอบที่ซับซ้อนสำหรับแอปของคุณ หน้านี้ ขอแนะนำสถาปัตยกรรมและความสามารถของเครือข่ายโปรแกรมจำลอง
พื้นที่ของที่อยู่เครือข่าย
โปรแกรมจำลองแต่ละอินสแตนซ์จะทำงานหลังบริการเราเตอร์เสมือนหรือไฟร์วอลล์ ที่แยกออกจากอินเทอร์เฟซและการตั้งค่าเครือข่ายของเครื่องสำหรับการพัฒนา และจากอินเทอร์เน็ต อุปกรณ์จำลองไม่พบเครื่องพัฒนาซอฟต์แวร์ของคุณ หรืออินสแตนซ์โปรแกรมจำลองอื่นๆ บนเครือข่าย แต่ตรวจพบเพียงว่า เชื่อมต่อผ่านอีเทอร์เน็ตไปยังเราเตอร์หรือไฟร์วอลล์
เราเตอร์เสมือนสำหรับแต่ละอินสแตนซ์จะจัดการที่อยู่เครือข่าย 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 รายการที่ 2, 3 และ 4 (ไม่บังคับ) |
15.0.2.15 | เครือข่ายอุปกรณ์ที่จำลองเมื่อเชื่อมต่อโดยใช้อีเทอร์เน็ต |
16.0.2.16 | เครือข่ายอุปกรณ์ที่จำลองเมื่อเชื่อมต่อโดยใช้ Wi-Fi |
127.0.0.1 | อินเทอร์เฟซ Loopback ของอุปกรณ์ที่จำลอง |
โปรแกรมจำลองที่ใช้งานอยู่ทั้งหมดจะใช้การกำหนดที่อยู่เดียวกัน อินสแตนซ์ ซึ่งหมายความว่าหากคุณมี 2 อินสแตนซ์ที่ทำงานพร้อมกัน เครื่องของคุณ ซึ่งแต่ละเครื่องจะมีเราเตอร์ของตนเอง และด้านหลังเครื่องแต่ละเครื่องจะมีเราเตอร์ ที่อยู่ IP ของ 10.0.2.15 โดยอินสแตนซ์จะแยกโดยเราเตอร์และไม่สามารถ หากันเจอในเครือข่ายเดียวกัน สำหรับข้อมูลเกี่ยวกับวิธี ให้อินสแตนซ์โปรแกรมจำลองสื่อสารผ่าน TCP/UDP โปรดดูส่วนเกี่ยวกับการเชื่อมต่ออินสแตนซ์โปรแกรมจำลอง
ที่อยู่ 127.0.0.1 ในเครื่องการพัฒนาสอดคล้องกับ ไปยังอินเทอร์เฟซ Loopback ของโปรแกรมจำลอง เพื่อเข้าถึงบริการที่ทำงานอยู่ ในอินเทอร์เฟซ Loopback ของเครื่องการพัฒนา ให้ใช้ 10.0.2.2 แทน
ที่อยู่ที่จัดสรรไว้ล่วงหน้าของอุปกรณ์จำลองคือ กับโปรแกรมจำลอง Android โดยเฉพาะ และมีแนวโน้มที่จะแตกต่างอย่างมากในเวอร์ชันจริง อุปกรณ์ (ซึ่งมีแนวโน้มที่จะได้รับการแปลที่อยู่เครือข่าย โดยเฉพาะ หลังเราเตอร์หรือไฟร์วอลล์)
ข้อจำกัดเกี่ยวกับเครือข่ายเฉพาะที่
แอป 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 โปรดทราบว่า
มักจะหมายความว่าโปรแกรมจำลองไม่สนใจเนื้อหาของ "โฮสต์" ของคุณ ไฟล์
(/etc/hosts
ใน Linux/macOS, %WINDOWS%/system32/HOSTS
บน Windows)
เมื่อเริ่มต้นโปรแกรมจำลองจากบรรทัดคำสั่ง คุณสามารถใช้
-dns-server <serverList>
เพื่อระบุด้วยตนเอง
ที่อยู่ของเซิร์ฟเวอร์ DNS ที่จะใช้ โดย <serverList>
เป็นข้อมูลที่คั่นด้วยคอมมา
ซึ่งเป็นรายชื่อเซิร์ฟเวอร์หรือที่อยู่ IP ตัวเลือกนี้อาจเป็นประโยชน์หาก
พบปัญหาการแปลง DNS ในเครือข่ายที่จำลอง (ตัวอย่างเช่น
"ข้อผิดพลาดของโฮสต์ที่ไม่รู้จัก" ที่ปรากฏขึ้นเมื่อใช้เว็บเบราว์เซอร์)
ใช้โปรแกรมจำลองกับพร็อกซี
บนเครือข่ายองค์กรหลายแห่ง การเชื่อมต่ออินเทอร์เน็ตโดยตรงถูกปฏิเสธจาก ผู้ดูแลเครือข่าย แต่การเชื่อมต่ออินเทอร์เน็ตจะต้องผ่าน พร็อกซี ในการเข้าถึงอินเทอร์เน็ตบนเครือข่ายที่มีข้อกำหนดของพร็อกซี โปรแกรมจำลอง จำเป็นต้องทราบว่ามีพร็อกซีและต้องเชื่อมต่อกับพร็อกซีนั้น
เนื่องด้วยลักษณะของ HTTP การเชื่อมต่อเว็บเซิร์ฟเวอร์โดยตรง และการเชื่อมต่อผ่าน พร็อกซีส่งผลให้มีคำขอ GET ที่แตกต่างกัน โปรแกรมจำลองจะเขียนสคริปต์ รับคำขอจากอุปกรณ์เสมือนก่อนพูดกับพร็อกซี เพื่อให้ใช้งานได้
หากโปรแกรมจำลองของคุณต้องเข้าถึงอินเทอร์เน็ตผ่านพร็อกซีเซิร์ฟเวอร์ คุณสามารถกำหนดค่า พร็อกซี HTTP ที่กำหนดเองจากหน้าจอการควบคุมแบบขยายของโปรแกรมจำลอง
- ขณะที่โปรแกรมจำลองเปิดอยู่ ให้คลิกเพิ่มเติม
- คลิกการตั้งค่า และ พร็อกซี
- กำหนดการตั้งค่าพร็อกซี 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