Sitemap

안드로이드 앱 원격 배포

4 min readMay 18, 2017

--

Jason은 오늘 안드로이드 프로그래머를 만났다. 안드로이드 프로그래머가 Jason에게 자신이 만든 안드로이드 앱을 빌드해서 보여줄려고 했는데 그의 맥북은 USB-C 포트 밖에 없는 최신형이었다. 컨버터가 없는 상황에서 에뮬레이터로 앱을 봐야 되는 상황에 직면했다.

이때 Jason은 예전에 Unity3D로 게임 개발을 하던 때 안드로이드 앱을 빌드하기 위해 USB 포트를 꼽는 것이 귀찮다고 투털거리던 시절을 떠올렸다. 당시 턱수염이 가득한 시니어 안드로이드 개발자가 Jason에게 원격으로 앱을 배포할 수 있는 방법을 알려준 적이 있었다.

원격 배포는 Android Debug Bridge(adb) 커맨드 라인 툴의 server component를 활용한다. 안드로이드 디바이스와 컴퓨터는 한 네트워크 영역 내에 연결되어 있어야 하고 원격 연결을 위해서 한번은 안드로이드 디바이스를 컴퓨터에 연결해야 한다.

Get Jason Park’s stories in your inbox

Join Medium for free to get updates from this writer.

USB 연결이 잘 인식되었는지 확인하기 위해서 다음 명령어를 이용한다.

adb devices
Press enter or click to view image in full size
USB Connection

연결한 뒤 다음 명령어를 실행한다.

adb tcpip 5555

그러면 USB로 연결된 디바이스에 5555 포트로 TCP/IP 연결을 리스닝하게 되고 디버그 허용 팝업이 나타면 허용한 뒤 USB 커넥터를 컴퓨터에서 연결 해제한다. 그리고 다음 명령어를 실행한다.

adb connect 192.168.XXX.XXX:5555

안드로이드 디바이스에서 IP 주소는 보통 WIFI > Advanced 혹은 About Phone > Status 에서 찾을 수 있다.

Press enter or click to view image in full size

하나의 네트워크 존에 연결된 것이 맞다면 USB 커넥터가 직접 컴퓨터에 연결되어 있지 않아도 디버그 허용 팝업이 뜨는 것을 확인할 수 있다. 허용한 뒤 디바이스 연결 상태를 본다.

adb devices
TCP/IP Connection

위와 같이 IP 주소로 연결되고 device로 나온다면 정상 진행된 것이다.
Android Studio에서 실행을 하면 USB 커넥터가 연결되어 있지 않아도 다음과 같이 디바이스 식별되고 Monitor에도 정상적으로 로그가 남는다.

Press enter or click to view image in full size
Run in Android Studio

연결을 끊고 싶다면 다음 명령어를 실행한다.

adb kill-server

여기까지 봤을 때 한가지 의문이 들것이다.
위에서 TCP/IP 리스닝을 위해 한번은 USB 연결을 해야 된다고 언급했는데 Jason이 만난 안드로이드 개발자는 USB-C 밖에 연결할 수 없는 상황이었다.
여기에는 어떻게 보면 보안 취약이라고 할 수 있는데 어떤 컴퓨터에 연결하든지 안드로이드 디바이스가 TCP/IP 리스닝을 지정된 포트로 열어만 놓으면 된다는 조건이기 때문이다. 그래서 Jason이 소지한 구 맥북 프로에 안드로이드 개발자의 디바이스를 연결한 뒤 TCP/IP 리스닝을 특정 포트로 열고 다시 그 안드로이드 개발자의 신형 맥북에서 adb 명령을 통해 원격 배포를 실행한 것이다.

물론 TCP/IP 리스닝을 위해서는 개발자 옵션이 활성화되어 있어야 하므로 장벽이 있지만 취약점은 존재한다.

실제 USB 연결로 배포하는 것보다 배포 속도는 떨어지지만 여러 디바이스에 배포하고 테스트, 관리할 때는 원격 배포가 더 편할 것으로 예상된다.

--

--

Jason Park
Jason Park

Written by Jason Park

I’m a explorer in the binary world.