안드로이드 애플리케이션을 개발하고 품질 보증(QA) 테스트를 진행하다 보면 배터리 잔량이나 충전 소스 유형에 따라 앱의 동작이 어떻게 변화하는지 검증해야 하는 상황을 마주하게 됩니다. 예를 들어 배터리가 15% 이하로 떨어졌을 때 앱이 저전력 모드로 올바르게 진입하는지, 혹은 충전 케이블이 연결되었을 때만 대용량 파일 다운로드나 동기화 작업을 수행하는지 등의 시나리오 테스트가 대표적입니다. 이때 실제 단말기의 배터리를 방전시키거나 물리적으로 케이블을 뽑아가며 테스트하는 방식은 시간과 효율 측면에서 한계가 명확합니다. 안드로이드 프레임워크는 배터리 서브시스템의 상태를 터미널 콘솔에서 임의로 조작할 수 있는 강력한 디버깅 인터페이스를 제공합니다. 이번 포스팅에서는 ADB(Android Debug Bridge)의 dumpsys battery 명령어를 활용하여 단말기의 배터리 메트릭 정보를 정밀하게 파싱하고, 가상 런타임 환경에서 충전 소스 및 잔량을 임의로 변조하여 테스트하는 기법을 살펴보겠습니다.

핵심 요약
- dumpsys battery 서브시스템 덤프 명령을 실행하면 현재 단말기의 전원 소스 연결 상태, 배터리 온도, 전압 및 내부 건강 상태 데이터를 실시간으로 조회할 수 있습니다.
- set 서브 명령어를 조합하면 가상 환경(에뮬레이터 및 엔지니어링 빌드)에서 배터리 충전 상태 코드와 물리 잔량 수치를 원하는 테스트 조건으로 즉시 오버라이트할 수 있습니다.
- 디버깅 목적으로 변조된 가상 배터리 테이블 정보는 reset 명령 한 줄로 프레임워크 실시간 데이터베이스를 물리 하드웨어 센서 주체값으로 원복시킬 수 있습니다.
1. ADB 배터리 서비스 출력 데이터 및 상태 코드 매핑
adb shell dumpsys battery 명령어를 실행했을 때 콘솔창에 찍히는 주요 필드의 물리적 의미와 런타임 시스템 코드값의 세부 매핑 정보입니다.
| 데이터 필드명 | 의미 및 단위 스케일 | 데이터 상태 코드 및 세부 판독 기준 |
| AC / USB / Wireless powered | 외부 전원 공급 장치 연결 플래그 | true 또는 false 로 리턴되며 현재 디바이스에 연결된 물리 전원 선로를 식별합니다. |
| Max charging current / voltage | 최대 허용 전력 프로파일 | 전류는 마이크로암페어($\mu\text{A}$), 전압은 마이크로볼트($\mu\text{V}$) 스케일로 출력됩니다. |
| status | 현재 배터리 충전 및 방전 상태 | 1: 충전 중 아님 (Unknown/Discharging) 2: 충전 중 (Charging) 3: 충전 대기 중 (Not Charging) 4: 완충됨 (Full) |
| health | 배터리 물리 셀의 건강 상태 점수 | 2: 정상 (Good) 3: 과열 (Overheat) 4: 죽은 셀 (Dead) 5: 과전압 (Over Voltage) |
| level / scale | 배터리 잔량 및 기준 스케일 | scale 이 100일 때 level 플래그 숫자가 현재 단말기의 퍼센트 잔량을 의미합니다. |
| voltage | 배터리 단자 전압 | 밀리볼트($\text{mV}$) 단위로 출력됩니다. (예: 4000 수치는 실제 4.0V를 뜻함) |
| temperature | 배터리 셀 실시간 온도 | 0.1°C 스케일을 사용합니다. 콘솔에 320이 출력되면 실제 온도는 32.0°C입니다. |
2. 시나리오별 배터리 상태 가상 변경 명령어 세트
테스트 자동화 스크립트 나 콘솔 환경에서 가상 플래그를 주입하여 하드웨어 상태를 시뮬레이션하는 명령어 모음입니다.
| 시뮬레이션 타깃 | 실행 명령어 형태 | 가상 상태 반영 및 시스템 제어 내용 |
| 배터리 잔량 조작 | adb shell dumpsys battery set level <숫자> | 단말기의 현재 배터리 남은 양을 0에서 100 사이의 임의 값으로 고정 주입합니다. |
| 충전 상태 변조 | adb shell dumpsys battery set status <코드> | 시스템 상 상태 플래그를 충전 중(2) 또는 완충(4) 등으로 변경하여 앱 런타임에 전송합니다. |
| USB 케이블 시뮬레이션 | adb shell dumpsys battery set usb [1|0] | USB 데이터 라인을 통한 전력 공급 공급망의 연결(1) 및 분리(0) 상태를 모니터링 테이블에 주입합니다. |
| AC 어댑터 시뮬레이션 | adb shell dumpsys battery set ac [1|0] | 전원 콘센트 어댑터 소스로부터 전력이 유입되는 상태(1)와 차단된 상태(0)를 제어합니다. |
| 무선 충전 시뮬레이션 | adb shell dumpsys battery set wireless [1|0] | 패드형 무선 충전 모듈의 거치 및 이탈 플래그를 시스템 데이터베이스에 가상으로 설정합니다. |
| 하드웨어 동기화 원복 | adb shell dumpsys battery reset | 임의로 수정한 가상 설정 테이블을 즉시 파기하고 물리 하드웨어 센서 본연의 데이터로 동기화합니다. |
3. 테스트 자동화 시나리오 실전 명령어 파이프라인
에뮬레이터 런타임 환경에서 저전력 경고 알림 시나리오를 자동 검증할 때 순차적으로 바인딩하여 사용할 수 있는 콘솔 실행 트리 구조 예시입니다.
# 단계 1: 배터리 상태를 가상 조작하기 전의 원본 하드웨어 메트릭 정보 기록
adb shell dumpsys battery
# 단계 2: 배터리 잔량을 즉시 저전력 임계점인 15%로 강제 드롭
adb shell dumpsys battery set level 15
# 단계 3: USB 충전 케이블이 차단되어 방전 중인 상태(status 1 또는 3)로 시스템 플래그 변경
adb shell dumpsys battery set usb 0
adb shell dumpsys battery set status 3
# 단계 4: [여기서 앱의 저전력 알림 팝업 및 리소스 절약 모드 진입 로직 정상 작동 여부 검증 진행]
# 단계 5: 검증 프로세스 완료 후 가상 설정 레이어를 걷어내고 원래 배터리 주체값으로 시스템 복원
adb shell dumpsys battery reset
개발을 위한 팁
- 브로드캐스트 인텐트 연동 상태 확인: adb shell dumpsys battery set 명령어로 값을 바꾸면 안드로이드 OS는 시스템 전역에 ACTION_BATTERY_CHANGED 브로드캐스트 인텐트를 발송합니다. 내가 만든 앱 내부의 브로드캐스트 리시버가 이 신호를 정상적으로 캐치하는지 보려면 명령어를 치는 시점에 로그캣 덤프 필터에 Intent.action.BATTERY_CHANGED를 걸어두어 인텐트가 정상적으로 수신되는지 시각적으로 매핑해 보는 것이 좋습니다.
- 물리 단말에서의 USB 연결 유지 테크닉: 실제 스마트폰 단말기에서 adb shell dumpsys battery set usb 0 명령을 실행하면 단말기 UI 상에서는 충전 표시가 사라지고 배터리가 방전 중인 것처럼 인식되지만, PC와의 ADB 통신 회선은 끊어지지 않고 그대로 유지됩니다. 따라서 물리 장비 기반의 자동화 테스트 리그를 구축할 때도 USB 케이블 유실 걱정 없이 전원 차단 시나리오를 스크립트로 구현할 수 있습니다.
- 배터리 온도 및 전압 시뮬레이션 활용: 본문에서 다룬 잔량 옵션 외에도 과열 상황에 따른 앱의 안전 장치 구동을 테스트하고 싶다면 adb shell dumpsys battery set temp 500 명령어 구조를 통해 가상 온도를 50.0°C로 올려버리는 써멀 스로틀링 시뮬레이션도 가능합니다.
흔히 하는 실수
- 테스트 종료 후 reset 명령어 누락: 가상 제어 명령어로 배터리 상태를 바꾸면 사용자가 명시적으로 reset 커맨드를 날리기 전까지 안드로이드 프레임워크는 가상 주입된 값에 고정되어 멈춰버립니다. 물리 단말기에서 테스트를 끝낸 뒤 초기화 명령어를 빠트리면 USB 케이블을 꼽아두어도 실제 충전 프로세스가 동작하지 않거나 배터리 잔량 표기가 고정되어 시스템 오동작을 유발하므로 스크립트 마무리에 반드시 reset 플래그를 명시해야 합니다.
- status 코드 인자의 유효 범위 혼동: 원문에서 일부 혼용되었던 배터리 상태 코드 체계를 명확히 인지해야 합니다. status 설정 시 입력하는 정수값은 안드로이드 표준 API 상 1은 충전 중 아님(방전), 2는 충전 중, 4는 완충 상태를 의미합니다. 만약 엉뚱한 인덱스 숫자를 주입하면 프레임워크 런타임 에러나 내부 데이터베이스 참조 무효 예외가 발생할 수 있으므로 표준 매핑 테이블 주기를 준수해야 합니다.
- 단말기 노후화에 따른 온도 단위 착각: dumpsys battery 출력 화면의 temperature 항목 데이터는 소수점이 생략된 인덱스 구조입니다. 가끔 출력창의 350이라는 숫자를 보고 배터리 온도가 350도까지 치솟았다고 오인하여 하드웨어 결함으로 판단하는 실수를 범하곤 합니다. 안드로이드 리눅스 커널 레이어는 가벼운 데이터 전송을 위해 소수점 첫째 자리를 정수형태로 밀어 올리는 10배수 스케일을 취하므로 판독 시 항상 10으로 나누어 계산해야 에러가 없습니다.
결론
ADB 서브시스템 기반의 배터리 프로파일링 조작 메커니즘은 제한된 실험실 환경이나 빌드 자동화 서버 내 에뮬레이터 인프라 레이어에서 전원 변동에 따른 애플리케이션의 회복 탄력성을 검증할 수 있는 가장 빠르고 비용 효율적인 디버깅 인터페이스입니다. 물리적인 하드웨어 조작 없이 스크립트 한 줄로 하드웨어 인터럽트 수준의 전원 이벤트를 모사할 수 있어 전체적인 시스템 검증 수명 주기를 획기적으로 단축시켜 줍니다. 본 가이드에 기술된 설정 테이블 코드 스펙과 세부 단위 분석 공식을 기반으로 신뢰성 높은 전원 관리 테스트 시나리오를 구성하여 품질 검증 프로세스에 도입해 보시기 바랍니다.
'Android System & AOSP Engineering > Debug, ADB & System Tools' 카테고리의 다른 글
| 안드로이드 ADB 입력 자동화 가이드: keyevent 및 터치 스크립트 작성법 (0) | 2025.02.27 |
|---|---|
| 안드로이드 ADB GPS 위치 조작 가이드: 가짜 위치(Mock Location) 및 모드 변경법 (0) | 2025.02.26 |
| 안드로이드 ADB 성능 분석 가이드: CPU 사용량부터 메모리 및 온도 확인까지 (0) | 2025.02.24 |
| 안드로이드 ADB 시스템 설정 변경 가이드: adb shell settings 명령어 활용법 (0) | 2025.02.23 |
| 안드로이드 ADB 데이터 백업 및 복원 방법: 전체 백업부터 앱 데이터 추출까지 (0) | 2025.02.22 |