요즘 필자가 하는 업무들이 스마트폰이 아닌 Android OS가 올라간 보드를 통해 테스트를 해야하는 상황이 늘어나고 있어 adb 명령어를 자주 쓰고 있다. 다양하게 쓰고 있지는 않지만, 많이 쓰고 있는 명령어들을 모아두고자 글을 쓴다.
Android Board 와 연결한 PC에 Android Board 의 출력 디스플레이를 보고 싶다면, scrcpy(스크린카피) 를 사용하면 된다. 설치 방법과 사용 방법은 공식 문서에 잘 설명되어 있다.
https://github.com/Genymobile/scrcpy
0. adb 연결된 기기 목록
adb devices
adb 를 사용할 때 가장 기본이 되는 명령어가 아닐까 싶다. 위 명령어로 현재 PC와 연결된 Android 디바이스들의 목록을 볼 수 있다.
위 이미지의 목록은 현재 연결된 Android 디바이스이며, 위에서부터 "유선 연결된 스마트폰", "WIFI(디버깅) 연결된 갤탭", "안드로이드 스튜디오의 애뮬레이터" 이다. Android Board 로 작업을 하면, 보통 하나의 보드만 연결할 일이 많다. 그러나 위와 같이 여러 기기가 연결되었을 때도 있을 것이다.
여러 기기가 연결되었을 때, adb 명령어를 그대로 실행하면 하나만 선택하라는 에러가 나타난다.
여러 기기가 연결 되어있을 때는, adb 의 "-s" 옵션을 사용해서 명령어를 실행시킬 기기를 타겟팅 해주어야 한다. 타겟팅 할 기기는 "adb devices" 로 보이는 목록의 "R3CN70EHJPV" 나 "emulator-555" 와 같이 Serial Number 를 입력해주면 된다. 예를 들어, scrcpy 를 할 때 특정 기기를 타겟팅해야 한다면 아래 사진과 같이 명령어를 입력해주면 된다.
1. adb APK 설치
- 컴퓨터와 연결된 디바이스가 하나만 있을 경우
adb install -r -t [APK_PATH]
- 컴퓨터와 연결된 디바이스가 여럿 있어서, 특정 디바이스에만 설치를 하고자 할 때,
adb -s [DEVICE_SERIAL] install -r -t [APK_PATH]
APK_PATH 는 말그대로 설치하고자 하는 APK 의 경로이다. 절대 경로와 상대 경로 모두 사용 가능하다.
install 명령어 다음에 따라오는 -r 과 -t 는 옵션이다. 필수는 아니므로 필요에 따라 사용하면 된다. 각 옵션에 대한 의미는 다음과 같다.
adb install [-lrtsdg] <file>
- push this package file to the device and install it
( -l : forward lock application )
( -r : replace existing application )
( -t : allow test packages )
( -s : install application on sdcard )
( -d : allow version code downgrade )
( -g : grant all runtime permissions )
2. adb 기기 내 설치된 패키지 리스트 보기
adb shell pm list packages
현재 adb 로 연결된 기기 내에 설치된 앱 리스트를 보기 위해 사용한다. scrcpy(스크린카피)를 사용하면 스마트폰을 사용하는 것처럼 화면에서 확인이 가능하나, 더 자세히 알아볼 수 있다. 게다가 adb 로 설치된 앱을 실행할 때, 해당 앱의 Package 명이 필요하다.
만약 emulator 나 다른 기기가 연결되어 특정 기기를 타겟팅하고 싶다면, "-s" 옵션을 사용해서 특정 기기에 명령어를 실행할 수 있다.
adb -s [DEVICE_SERIAL] shell pm list packages
3. adb 기기 내 설치된 앱 실행
adb를 사용하여 앱을 실행하는 방법은 크게 두 가지가 있다. Activity를 지정하여 앱을 실행하는 방법과 앱 자체를 실행하는 방법이다. 본인이 개발한 앱을 adb로 실행한다면 Launcher Activity의 이름을 알고 있기 때문에 그대로 실행해도 되지만, 필자 같은 경우엔 다른 개발자의 앱을 띄워야 하는 경우도 있었다. 게다가 다른 앱이 언리얼로 Android 패키징된 앱이었고, 언리얼 개발자 분이 Android에 대한 지식이 없는 상황이라 그 분께 어떤 Activity를 실행하면 되는지 물어봐도 원하는 대답을 얻을 수 없었다. 그래서 특정 Activity가 아닌 앱 자체를 키는 명령어가 필요했다. 구글링을 통해 알아낼 수 있었고, Activity를 지정하여 호출하는 것보다 더 쉬운 것 같아 필자가 개발한 앱도 이 명령어를 통해 실행하고 있다. 앱의 패키지 이름을 사용하여 앱 자체를 키는 명령어는 다음과 같다.
adb shell monkey -p [PACKAGE_NAME] 1
"2. adb 기기 내 설치된 패키지 리스트 보기" 에 있는 명령어를 사용해서 기기 내에 설치된 패키지 리스트를 보고, 원하는 패키지 이름을 경로 안에 넣어서 명령어를 완성하면 된다. 특정 기기를 타겟팅 하고 싶다면, "-s" 옵션을 사용하면 된다.
adb -s [DEVICE_SERIAL] shell monkey -p [PACKAGE_NAME] 1
4.adb 기기의 Screen Size 와 Density
Android Board 만 가지고 있을 경우, 스마트폰처럼 화면 크기와 화면 밀도가 정해져있지 않다. 그래서 adb 명령어를 통해 보드에서 출력하는 화면의 크기와 밀도를 설정할 수 있다.
4-1. Screen Size
adb shell wm size [WIDTH]x[HEIGHT]
or
adb -s [DEVICE_SERIAL] shell wm size [WIDTH]x[HEIGHT]
두 코드 중 단일 기기와 연결되어 있다면 윗 코드를, 여러 기기 중에 특정 기기를 타겟팅 하고 싶다면 아래 코드를 사용하면 된다. [WIDTH] 와 [HEIGHT] 사이에는 알파벳 "x" 를 넣어준다.
4-2. Screen Density
Screen Density는 다소 생소한 개념일 수도 있다. 그러나 작은 화면에서도 넓어 보이는 느낌을 주거나, 넓은 화면도 좁게 느껴지는 건 Density 차이에서 비롯된다고 볼 수 있다.
adb shell wm density [DENSITY_VALUE]
or
adb -s [DEVICE_SERIAL] shell wm density [DENSITY_VALUE]
위 두 이미지는 Density 320(위), 200(아래) 로 각각 설정했을 때 화면이다. 1920x1080 으로 화면 해상도는 똑같으나, Density 에 따라 다른 느낌을 준다.
5. adb 기기의 볼륨 제어
Android Board 에는 스마트폰처럼 볼륨 버튼이 없을 때가 많다. 게다가 키오스크 전용 보드가 아니라면 OS 화면 안에 볼륨을 제어하는 방법이 별로 없다. 이럴 때, keyevent 를 통해 볼륨 제어를 할 수있다.
adb shell input keyevent 24 // Volume Up
adb shell input keyevent 25 // Volume Down
위 코드를 사용하여 연결된 단일 기기의 볼륨 업/다운을 할 수 있다. 여러 기기 중에 타겟팅을 해야한다면 명령어는 다음과 같다.
adb -s [DEVICE_SERIAL] shell input keyevent 24 // Volume Up
adb -s [DEVICE_SERIAL] shell input keyevent 25 // Volume Down
6. adb 기기의 IP 주소 정보 얻기
Android 기반의 기기는 정말 다양하다. 그래서 어쩔 때는 기기 옆에서 노트북을 유선으로 연결한채 작업을 하기 힘들 때가 있다. 그럴 때는 무선 ADB 연결을 하면 좋다. 무선 ADB 연결은 유선 연결인 상태에서 무선 연결로 전환을 해줘야하고, 그 과정에서 연결할 Android 기기의 IP 주소를 알아야한다. 그런데, 기기를 조작해서 IP 주소를 얻기보다는, Shell 이나 명령 프롬프트에서 유선 연결된 상태로 IP 주소를 보는 것이 더 좋을 것이다.
adb -s [DEVICE_SERIAL] shell ifconfig
단일 기기일 경우에는 "-s [DEVICE_SERIAL]" 부분을 생략해도 된다.
7. adb 기기 무선 연결
Android 기기와 연결하는 방법은 유선 외에도 무선으로 가능하다. "6. adb 기기의 IP 주소 정보 얻기" 에서 언급했듯이, 무선 연결을 하기 위해서는 직전에 유선 연결 상태로 연결이 되어있어야한다. 그리고 다음 두 과정을 통해 연결을 할 수 있다.
- TCP/IP Port 설정
- IP 주소로 무선 연결
물론, 여러 대의 Android 기기와 연결되어 있는 상태에서는 무선 연결하고자 하는 Android 기기의 디바이스 시리얼도 알아둬야할 것이다. 본론으로 돌아와서, 먼저 TCP/IP 포트를 열어줘야한다. 명령어는 다음과 같다.
adb -s [DEVICE_SERIAL] tcpip [PORT_NUMBER]
단일 기기와 연결되어 있을 때는 "-s [DEVICE_SERIAL]" 부분을 생략해도 된다. [PORT_NUMBER] 에는 PC 와 Android 기기 간에 TCP/IP 연결에 사용할 포트 번호를 지정해준다.
포트를 열어준 후에, Android 기기의 IP 주소로 무선 연결을 시켜준다.
adb -s [DEVICE_SERIAL] connect [IP_ADDRESS]
connected 결과를 본다면, 정상적으로 무선 연결이 된 것이다. 이제 유선 연결했던 선을 뽑아도 adb 연결이 끊기지 않을 것이다.
'Android Developer' 카테고리의 다른 글
Android Zoom Meeting SDK : 1. 데모앱 살펴보기 (0) | 2022.06.24 |
---|---|
Androidx ViewPager2 정리 (0) | 2022.06.21 |
Retrofit2 의 Callback 자동 완성을 찾기 귀찮을때 (0) | 2022.05.24 |
[번역] Google Pigweed는 무엇인가? Google, IoT 개발자들을 위한 새로운 장난감을 공개하다. (0) | 2020.04.03 |
[번역] Google Play 인디 게임 페스티벌 결선 진출작들을 만나다. (0) | 2020.04.01 |