다중 기기 상호작용이 포함된 애플리케이션을 테스트하려면 서로 통신할 수 있도록 여러 Android Emulator 인스턴스를 연결하면 됩니다. 연결을 설정하는 방법은 사용 중인 에뮬레이터 버전에 따라 다릅니다.
Android 에뮬레이터 버전 36.5 이상
Android Emulator 버전 36.5 이상에서는 공유 Wi-Fi 네트워크를 통해 인스턴스를 연결하는 간소화된 네트워킹 모델을 제공합니다.
이 네트워킹 스택을 사용하면 여러 에뮬레이터가 동일한 가상 Wi-Fi 네트워크에서 별도의 기기로 표시됩니다. 이를 통해 표준 Wi-Fi 기반 프로토콜을 사용하여 서로 자동으로 검색하고 통신할 수 있습니다.
에뮬레이터는 네트워크 서비스 검색(NSD) 및 Wi-Fi Direct와 같은 기술을 사용하여 가상 네트워크에서 서로를 찾을 수 있습니다.
에뮬레이터가 동일한 Wi-Fi 네트워크에 있으므로 에뮬레이터의 특정 IP 주소를 찾아 다른 에뮬레이터 인스턴스에서 직접 연결할 수도 있습니다. 가상 Wi-Fi 인터페이스 (wlan0)의 IP 주소를 가져오려면 호스트 머신에서 다음 명령어를 실행하세요.
adb shell ip addr show wlan0
버전 36.5 이전의 Android Emulator
이전 버전의 Android Emulator를 사용하는 경우 인스턴스 간 직접 통신은 기본적으로 불가능합니다. 각 에뮬레이터 인스턴스는 자체 가상 라우터 뒤에서 작동하여 로컬 네트워크 및 다른 에뮬레이터에서 격리됩니다.
통신을 사용 설정하려면 네트워크 리디렉션을 수동으로 설정해야 합니다. 이 프로세스에는 가상 라우터를 우회하여 호스트 머신의 특정 포트에서 에뮬레이션된 기기의 포트로 트래픽을 전달하는 매핑을 만드는 작업이 포함됩니다.
다음 두 가지 방법으로 네트워크 리디렉션을 구성할 수 있습니다.
- 에뮬레이터 콘솔 명령어: 내장 콘솔을 사용하여 실행 중인 에뮬레이터 인스턴스의 포트 매핑을 설정합니다.
- Android 디버그 브리지 (adb): adb 명령어를 사용하여 필요한 포트 전달 규칙을 구성합니다.
에뮬레이터 콘솔을 통한 리디렉션 설정
각 에뮬레이터 인스턴스에 제공되는 제어 콘솔에 연결하여 인스턴스에 특정한 명령어를 실행할 수 있습니다. redir 콘솔 명령어를 사용하여 에뮬레이터 인스턴스에 필요한 리디렉션을 설정합니다.
먼저 타겟 에뮬레이터 인스턴스의 콘솔 포트 번호를 결정합니다. 예를 들어 첫 번째로 실행된 에뮬레이터 인스턴스의 콘솔 포트 번호는 5554입니다. 그런 다음 타겟 에뮬레이터 인스턴스의 콘솔에 연결하고 다음과 같이 콘솔 포트 번호를 지정합니다.
telnet localhost 5554
연결된 후에는 인증을 해야 리디렉션을 설정할 수 있습니다. 자세한 방법은 콘솔 세션 시작 및 중지를 참고하세요. 인증되면 redir 명령어를 사용하여 리디렉션 작업을 실행합니다.
리디렉션을 추가하려면 다음 명령어를 사용합니다.
redir add <protocol>:<host-port>:<guest-port>
여기서 <protocol>은 tcp 또는 udp이고 <host-port>와 <guest-
port>는 머신과 에뮬레이션된 시스템 간의 매핑을 설정합니다.
예를 들어 다음 명령어는 127.0.0.1:5000에서 호스트(개발) 머신으로 들어오는 모든 TCP 연결을 처리하고 10.0.2.15:6000의 에뮬레이션된 시스템으로 전달하는 리디렉션을 설정합니다.
redir add tcp:5000:6000
리디렉션을 삭제하려면 redir del 명령어를 사용합니다. 특정 인스턴스의 모든 리디렉션을 나열하려면 redir list를 사용하세요. 이러한 명령어와 기타 콘솔 명령어에 관한 자세한 내용은 에뮬레이터 콘솔 명령어 전송을 참고하세요.
포트 번호는 로컬 환경에 따라 제한됩니다. 이는 일반적으로 특별한 관리자 권한이 없으면 1024 미만의 호스트 포트 번호를 사용할 수 없음을 의미합니다. 또한 컴퓨터의 다른 프로세스에서 이미 사용 중인 호스트 포트의 리디렉션을 설정할 수 없습니다. 이 경우 redir은 그 결과에 관한 오류 메시지를 생성합니다.
adb를 통한 리디렉션 설정
Android 디버그 브리지(adb) 도구를 통해 네트워크 리디렉션을 설정하는 다른 방법인 포트 전달을 할 수 있습니다. 자세한 내용은 adb 문서에서 포트 전달 설정을 참고하세요.
현재 adb에서는 adb 서버를 중지하는 방법을 제외하고 리디렉션을 삭제하는 방법을 제공하지 않습니다.
에뮬레이터 인스턴스 상호 연결
에뮬레이터 인스턴스 하나가 다른 에뮬레이터 인스턴스와 통신할 수 있게 하려면 다음 단계에 설명된 대로 네트워크 리디렉션을 설정하세요.
환경이 다음과 같다고 가정합니다.
- A는 개발 머신입니다.
- B는 A에서 실행되는 첫 번째 에뮬레이터 인스턴스입니다.
- C는 두 번째 에뮬레이터 인스턴스이며 또한 A에서 실행됩니다.
C가 연결될 B에서 서버를 실행하려면 다음과 같이 설정합니다.
10.0.2.15:<serverPort>를 수신 대기하는 서버를 B에 설정합니다.- 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에 연결됩니다.