ตั้งค่าเครือข่าย Android Emulator

โปรแกรมจำลองนี้มีความสามารถด้านเครือข่ายที่หลากหลายซึ่งคุณสามารถใช้เพื่อ สร้างสภาพแวดล้อมการสร้างแบบจำลองและการทดสอบที่ซับซ้อนสำหรับแอปของคุณ หน้านี้ ขอแนะนำสถาปัตยกรรมและความสามารถของเครือข่ายโปรแกรมจำลอง

พื้นที่ของที่อยู่เครือข่าย

โปรแกรมจำลองแต่ละอินสแตนซ์จะทำงานหลังบริการเราเตอร์เสมือนหรือไฟร์วอลล์ ที่แยกออกจากอินเทอร์เฟซและการตั้งค่าเครือข่ายของเครื่องสำหรับการพัฒนา และจากอินเทอร์เน็ต อุปกรณ์จำลองไม่พบเครื่องพัฒนาซอฟต์แวร์ของคุณ หรืออินสแตนซ์โปรแกรมจำลองอื่นๆ บนเครือข่าย แต่ตรวจพบเพียงว่า เชื่อมต่อผ่านอีเทอร์เน็ตไปยังเราเตอร์หรือไฟร์วอลล์

เราเตอร์เสมือนสำหรับแต่ละอินสแตนซ์จะจัดการที่อยู่เครือข่าย 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 ที่กำหนดเองจากหน้าจอการควบคุมแบบขยายของโปรแกรมจำลอง

  1. ขณะที่โปรแกรมจำลองเปิดอยู่ ให้คลิกเพิ่มเติม
  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 เป็นอินสแตนซ์โปรแกรมจำลองรายการที่ 2 ซึ่งทำงานบน 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 ไปยังอินสแตนซ์โปรแกรมจำลองอื่น

โปรแกรมจำลองจะส่งต่อการโทรด้วยเสียงและข้อความ SMS ที่จำลองขึ้นจากอินสแตนซ์หนึ่งไปยัง อีกรายการ หากต้องการส่งการโทรด้วยเสียงหรือ SMS ให้ใช้แอปโทรศัพท์หรือแอป SMS ตามลำดับ จากโปรแกรมจำลองตัวใดตัวหนึ่ง

วิธีเริ่มต้นการโทรด้วยเสียงจำลองไปยังอินสแตนซ์โปรแกรมจำลองอื่น

  1. เปิดแอปแป้นโทรศัพท์บนอินสแตนซ์โปรแกรมจำลองต้นทาง
  2. ป้อนหมายเลขพอร์ตคอนโซลของอินสแตนซ์เป้าหมายเป็นหมายเลขที่จะโทร

    คุณสามารถ กำหนดหมายเลขพอร์ตคอนโซลของอินสแตนซ์เป้าหมายโดยตรวจสอบชื่อหน้าต่างของอินสแตนซ์ ถ้าเป็น ทำงานในหน้าต่างแยกต่างหาก แต่จะไม่ทำงานหากทำงานอยู่ในหน้าต่างเครื่องมือ ระบบจะรายงานหมายเลขพอร์ตของคอนโซลเป็น "Android Emulator (<port>)"

    อีกวิธีหนึ่งคือ คำสั่ง adb devices พิมพ์รายการอุปกรณ์เสมือนที่กำลังทำงานและพอร์ตคอนโซลของอุปกรณ์ดังกล่าว ตัวเลข สำหรับข้อมูลเพิ่มเติม โปรดดูข้อความค้นหาสำหรับ อุปกรณ์

  3. คลิกปุ่มโทรออก การโทรเข้าใหม่จะปรากฏในอินสแตนซ์โปรแกรมจำลองเป้าหมาย

หากต้องการส่งข้อความ SMS ไปยังอินสแตนซ์โปรแกรมจำลองอื่น ให้ทำดังนี้

  1. เปิดแอป SMS หากมี
  2. ระบุหมายเลขพอร์ตคอนโซลของอินสแตนซ์โปรแกรมจำลองเป้าหมายเป็นที่อยู่ SMS
  3. ป้อนข้อความที่ต้องการ
  4. ส่งข้อความ ระบบส่งข้อความไปยังอินสแตนซ์โปรแกรมจำลองเป้าหมาย
  5. คุณยังสามารถเชื่อมต่อกับคอนโซลโปรแกรมจำลองเพื่อจำลองการโทรด้วยเสียงหรือ SMS ที่เข้ามา สำหรับข้อมูลเพิ่มเติม โปรดดู การจำลองโทรศัพท์และ การจำลอง SMS