การเชื่อมต่ออินสแตนซ์ของโปรแกรมจำลอง

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

  1. คำสั่งคอนโซลโปรแกรมจำลอง: ใช้คอนโซลในตัวเพื่อตั้งค่าการแมปพอร์ตสำหรับอินสแตนซ์โปรแกรมจำลองที่กำลังทำงาน
  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 จะเชื่อมต่อ ให้ตั้งค่าดังนี้

  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