UIautomator2를 활용한 동시 단말 조작 방법 및 자주겪는 이슈들에 대해서 소개한다.
PC에서 UIAutomator2 Library
통해서 자동으로 연결(ADB 및 network연결)방법을 설정해서 단말기에 설치된 Atx-agent서버(7912)
포트에 단말 조작 명령을 전달한다. 이 내용을 Atx-agent
는 단말기에 설치된 UIAutomator2 전용 APP
과 JsonRPC방식을 통해 수행결과를 통신한다.
결국 단말기와 통신을 위해서는 단말IP:7912
에 접근할 수 있는 환경이 구성되어야 한다.
구체적인 연결방법을 설명하려면 우선 UIAutomator2가 어떤방식으로 단말과 연결하는지 살펴봐야 한다.
UIAutomator2에서 단말과 조작하기 위해서 u2.connect()
function을 사용하였다.
해당 function의 소스를 살펴보면
def connect(addr=None):
"""
...
(생략)
...
if wifi_addr:
return connect_wifi(addr)
return connect_usb(addr)
입력된 주소가 ip address(x.x.x.x)
형식이면 connect_wifi
를 수행하고, 아니라면 usb연결
방법을 수행한다. 이점을 확인한 상태에서 동시단말을 조작하는 방법들을 소개한다.
adb devices
를 수행한 후 얻게되는 ID값이 다음과 같다면> adb devices
List of devices attached
ID1xxxxxxxxxxxxxxx device
ID2xxxxxxxxxxxxxxx device
다음과 같이 2개의 device를 연결할 수 있다.
device1 = u2.connect('ID1xxxxxxxxxxxxxxx')
device2 = u2.connect('ID1xxxxxxxxxxxxxxx')
device1 = 192.168.1.100
device2 = 192.168.1.101
다음과 같이 2개의 device를 연결할 수 있다.
device1 = u2.connect('192.168.1.100:7912')
device2 = u2.connect('192.168.1.101:7912')
port forwarding
기능을 통해서 PC에 연결된 단말의 7912포트로 접속 할 수 있다.> adb devices
List of devices attached
ID1xxxxxxxxxxxxxxx device
ID2xxxxxxxxxxxxxxx device
외부에서 접속이 가능하도록 Port fowarding
을 위해서는 ADB를 종료하고 -a nodaemon server start
모드로 수행해야 한다.
> adb kill-server
> adb -a nodaemon server start
그렇게 하면 adb forward
수행 시 외부에서 pc의 device에 접근 할 수 있다.
이 방법을 통해서 2개 device에 연결은 다음과 같이 할 수 있다.
기존의 cmd창은 서버가 구동되고 있으니.
새로 cmd창을 열고
먼저 port forward를 통해 pc의 7912
포트와 단말의 7912
포트를 연결한다.
adb -s ID1xxxxxxxxxxxxxxx forward tcp:7912 tcp:7912
두번재 단말은 7913
으로 연결한다 다음과 같이
adb -s ID1xxxxxxxxxxxxxxx forward tcp:7912 tcp:7913
이렇게 정의한 단말 2개를 다음과 같이 연결할 수 있다.
device1 = u2.connect('<PC_IP>:7912')
device2 = u2.connect('<PC_IP>:7913')
shell
을 통해서 접속 후 netstat -anp | grep 7912
를 수행해 본다.adb shell /data/local/tmp/atx-agent server -d
오!!2. 추가예정도 잇군여!!궁그미