Android ADB 원격지에서 로컬로 접속하기


목적 : 원격지 서버가 짱짱해서, 그쪽에서 바로 빌드하고, 그쪽 쉘에서 로컬 머신에 붙어 있는 에뮬레이터라던가, 실제 단말이라던가에 바로 접속해서 테스트 할 수 있음. Android Platform빌드등 빌드환경과 관련된 여러가지 설정들을 로컬머신인양 그대로 이용할 수 있어 편리하고, 딱히 다른 방법도 없음.

방법은 SSH 포트포워딩/터널링을 이용해서, 원격지 ADB서버의 포트에서 발생하는 패킷들을 로컬로 다 받아서 처리하는 것.

여러 글에 안드로이드 기본 에뮬레이터 포트가 5554, 5555라는게 있는데, 에뮬레이터일경우에만 쓰이고, 기본 ADB서버의 포트는 5037을 사용함. 이 부분을 알고 원격지에서 쓸 포트와 로컬에서 쓸 포트를 변경하거나할 필요가 있을 때, 적절히 수정해서 연결시켜줘야함.

  1. 원격지 서버 – Ubuntu등 리눅스 머신. SSH 연결을 제공함.
  2. 로컬 PC – 윈도우 일경우, putty내장 기능을 사용하는게 가장 편리함.
  3. 로컬 리눅스 머신 – 동일하게 putty 사용을 권장함. 아닐경우 ssh로 직접 포워딩 설정을 해줘야함.
  4. Macbook Pro – brew나 AndroidStudio등으로 adb 서버만 다시 띄울수 있으면 됨. 위치는 https://developer88.tistory.com/174 참고

1 ~ 2 를 사용할 경우.

a. 일단 로컬이던, 서버쪽이던, adb kill-server, killall adb 등으로 adb 서버를 모두 죽여준다. adb devices나 adb start-server를 하면 다시 실행되니까. 걱정말고 죽이자. 서버는 혼자 쓰는 시스템이라면 기본 포트에서 바꿀것 없이 바로 원격지 5037을 로컬 5037로 붙여 버리면, 원격지에서 발생하는 패킷들이 로컬로 와서, 단말제어에 사용됨.
Putty에서 SSH Session연결전에, 설정 트리 맨 아래에 SSH > tunnel쪽에
Source 에 5037
Desitnation에 localhost:5037 을 적고, 아래쪽의 방향을 반드시 Remote항목으로 설정해줘야 함. 이후에, SSH connection하고,
로컬에서 adb start-server
connection한 원격 쉘에서 adb start-server 혹은 adb devices를 하면 떠야함.
양쪽 adb 버전을 일치시키는 것이 좋음.

b. 원격지 혹은 로컬 포트를 바꿀 필요가 있을 경우, adb -P portnum start-server를 이용함.
예) 원격은 5099, 로컬은 5088로 포트를 바꾸어서 실제 단말을 로컬에 연결해서 원격에서 제어하려고 할 때.
putty로 source 5099, destination localhost:5088 설정후, 원격머신에 SSH연결
원격 SSH $ killall adb; adb kill-server
로컬 > adb kill-server
로컬 > adb -P 5088 start-server
로컬 > adb devices 로 로컬에서 접근 되는지 확인
원격 SSH $ adb -P 5099 start-server; adb devices로 마찬가지로 동일하게 작동하는지 확인

1 ~ 3혹은1 ~ 4연결시 . 로컬 리눅스 머신에서 ssh를 사용할 경우
ssh -R 5099:localhost:5088 원격지IP 로 바로 쉘연결해서, 사용하면 됨.

-P 옵션 일일히 적기 귀찮다면, : 안 적어주면 5037로 바로 돌아감.

원격지에서는
export ANDROID_ADB_SERVER_PORT=”5099″

로컬에서는
export ANDROID_ADB_SERVER_PORT=”5088″

해주고 하면 됨.