หากต้องการทดสอบแอปพลิเคชันที่เกี่ยวข้องกับการโต้ตอบแบบหลายอุปกรณ์ คุณสามารถเชื่อมต่อ อินสแตนซ์ของ Android Emulator หลายรายการเพื่อให้สื่อสารกันได้ วิธีการสร้างการเชื่อมต่อจะขึ้นอยู่กับเวอร์ชันของโปรแกรมจำลองที่คุณใช้
โปรแกรมจำลอง Android เวอร์ชัน 36.5 ขึ้นไป
Android Emulator เวอร์ชัน 36.5 ขึ้นไปมีรูปแบบเครือข่ายที่เรียบง่ายขึ้น ซึ่ง เชื่อมต่ออินสแตนซ์ผ่านเครือข่าย Wi-Fi ที่ใช้ร่วมกัน
เมื่อใช้สแต็กเครือข่ายนี้ อีมูเลเตอร์หลายตัวจะปรากฏเป็นอุปกรณ์ที่แตกต่างกันใน เครือข่าย Wi-Fi เสมือนเดียวกัน ซึ่งจะช่วยให้อุปกรณ์ค้นพบและสื่อสารกันโดยอัตโนมัติโดยใช้โปรโตคอลมาตรฐานที่อิงตาม Wi-Fi
โปรแกรมจำลองจะค้นหากันและกันในเครือข่ายเสมือนได้โดยใช้เทคโนโลยีต่างๆ เช่น การสำรวจบริการเครือข่าย (NSD) และ Wi-Fi Direct
เนื่องจากโปรแกรมจำลองอยู่ในเครือข่าย Wi-Fi เดียวกัน คุณจึงดูที่อยู่ IP เฉพาะของโปรแกรมจำลองและเชื่อมต่อกับโปรแกรมจำลองนั้นได้โดยตรงจากอินสแตนซ์โปรแกรมจำลองอื่น
หากต้องการรับที่อยู่ IP ของอินเทอร์เฟซ Wi-Fi เสมือน (wlan0) ให้เรียกใช้คำสั่งต่อไปนี้จากเครื่องโฮสต์
adb shell ip addr show wlan0
โปรแกรมจำลอง Android ก่อนเวอร์ชัน 36.5
หากคุณใช้ Android Emulator เวอร์ชันก่อนหน้า การสื่อสารโดยตรง ระหว่างอินสแตนซ์จะทำไม่ได้โดยค่าเริ่มต้น อินสแตนซ์ของโปรแกรมจำลองแต่ละรายการ จะทำงานอยู่เบื้องหลังเราเตอร์เสมือนของตัวเอง ซึ่งแยกออกจากเครือข่าย ในพื้นที่และโปรแกรมจำลองอื่นๆ
หากต้องการเปิดใช้การสื่อสาร คุณต้องตั้งค่าการเปลี่ยนเส้นทางเครือข่ายด้วยตนเอง กระบวนการนี้เกี่ยวข้องกับการสร้างการแมปที่ส่งต่อการเข้าชมจากพอร์ตที่เฉพาะเจาะจงในเครื่องโฮสต์ไปยังพอร์ตในอุปกรณ์ที่จำลอง โดยข้ามเราเตอร์เสมือน
คุณกําหนดค่าการเปลี่ยนเส้นทางเครือข่ายได้ 2 วิธี ดังนี้
- คำสั่งคอนโซลโปรแกรมจำลอง: ใช้คอนโซลในตัวเพื่อตั้งค่าการแมปพอร์ตสำหรับอินสแตนซ์โปรแกรมจำลองที่กำลังทำงาน
- Android Debug Bridge (adb): ใช้คำสั่ง adb เพื่อกำหนดค่ากฎการส่งต่อพอร์ตที่จำเป็น
ตั้งค่าการเปลี่ยนเส้นทางผ่านคอนโซลโปรแกรมจำลอง
อินสแตนซ์โปรแกรมจำลองแต่ละรายการมีคอนโซลควบคุมที่คุณเชื่อมต่อและ
ออกคำสั่งที่เฉพาะเจาะจงกับอินสแตนซ์นั้นได้ ใช้คำสั่ง redirconsole
เพื่อตั้งค่าการเปลี่ยนเส้นทางตามที่จำเป็นสำหรับอินสแตนซ์โปรแกรมจำลอง
ก่อนอื่น ให้กำหนดหมายเลขพอร์ตของคอนโซลสำหรับอินสแตนซ์โปรแกรมจำลองเป้าหมาย เช่น หมายเลขพอร์ตของคอนโซลสำหรับอินสแตนซ์โปรแกรมจำลองเครื่องแรกที่เปิดใช้คือ 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
อินสแตนซ์โปรแกรมจำลองการเชื่อมต่อถึงกัน
หากต้องการอนุญาตให้อินสแตนซ์โปรแกรมจำลอง 1 รายการสื่อสารกับอีกรายการ ให้ตั้งค่าการเปลี่ยนเส้นทางเครือข่าย ตามที่อธิบายไว้ในขั้นตอนต่อไปนี้
สมมติว่าสภาพแวดล้อมของคุณเป็นดังนี้
- 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