Android/Custom Framework

Android 사용자 정의 Framework Service 디버깅 및 문제 해결

임베디드 친구 2025. 5. 30. 22:37
728x90
반응형

Android 사용자 정의 Framework Service 디버깅 및 문제 해결

Android에서 사용자 정의 Framework Service를 개발할 때, 정상적으로 동작하는지 확인하고 예상치 못한 문제를 해결하는 과정이 필수적입니다. 이번 포스팅에서는 adb shell dumpsys, logcat 및 strace를 활용한 디버깅 기법, Binder Transaction 분석, adb shell service list를 통한 서비스 등록 여부 확인, am 명령어를 활용한 서비스 호출 및 상태 점검 등을 다루겠습니다.


1. adb shell dumpsys를 활용한 서비스 상태 확인

adb shell dumpsys 명령어는 Android 시스템에서 실행 중인 서비스들의 상태를 확인할 때 가장 유용한 도구 중 하나입니다. 특정 서비스의 동작 상태를 확인하려면 다음과 같이 실행합니다.

adb shell dumpsys <서비스명>

예를 들어, activity 서비스를 확인하려면 다음과 같이 입력할 수 있습니다.

adb shell dumpsys activity

사용자 정의 서비스의 상태를 확인하려면 해당 서비스의 패키지명이나 서비스명을 입력해야 합니다. 예를 들어, com.example.customservice라는 서비스가 있다면 다음과 같이 실행할 수 있습니다.

adb shell dumpsys activity service com.example.customservice

이 명령어를 실행하면 해당 서비스의 현재 상태, 실행 여부, 관련된 프로세스 정보를 확인할 수 있습니다.


2. logcat 및 strace를 이용한 디버깅 기법

logcat을 활용한 로그 분석

Android에서는 logcat을 활용하여 서비스 실행 중 발생하는 로그를 확인할 수 있습니다. 로그를 확인하려면 다음 명령어를 사용합니다.

adb logcat -s <태그>

예를 들어, 특정한 태그를 가진 로그를 필터링하고 싶다면 다음과 같이 실행합니다.

adb logcat -s CustomServiceTag

혹은 사용자 정의 서비스의 패키지를 기준으로 로그를 확인하려면 다음과 같이 사용할 수 있습니다.

adb logcat | grep com.example.customservice

strace를 활용한 시스템 호출 추적

strace는 Linux 시스템에서 프로세스의 시스템 호출을 추적하는 도구로, Android에서도 활용할 수 있습니다. 서비스의 PID(Process ID)를 확인한 후 strace를 적용하면 서비스가 어떤 시스템 호출을 수행하는지 분석할 수 있습니다.

  1. 실행 중인 프로세스의 PID 확인:

     adb shell ps | grep customservice
  2. strace를 사용하여 시스템 호출 추적:

     adb shell strace -p <PID>

이 방법을 활용하면 서비스가 특정 동작을 수행할 때 어떤 시스템 호출을 실행하는지 확인할 수 있습니다.


3. Binder Transaction 분석 (binder_debugfs)

Android의 서비스들은 내부적으로 Binder IPC를 통해 동작합니다. binder_debugfs를 활용하면 Binder 트랜잭션을 분석하여 서비스가 정상적으로 호출되는지 확인할 수 있습니다.

  1. /sys/kernel/debug/binder/ 경로에 접근하여 사용 가능한 정보 확인:

     adb shell ls /sys/kernel/debug/binder/
  2. 특정 프로세스의 Binder 트랜잭션을 확인:

     adb shell cat /sys/kernel/debug/binder/transactions

이 정보는 서비스가 예상대로 트랜잭션을 수행하는지 확인할 때 유용하게 활용될 수 있습니다.


4. adb shell service list로 서비스 등록 여부 확인

Android에서 실행 중인 서비스 목록을 확인하려면 adb shell service list 명령어를 사용할 수 있습니다.

adb shell service list

이 명령어를 실행하면 등록된 서비스 목록이 출력됩니다. 특정 서비스가 정상적으로 등록되었는지 확인하려면 다음과 같이 사용할 수 있습니다.

adb shell service check <서비스명>

예를 들어, customservice라는 서비스가 등록되었는지 확인하려면 다음과 같이 입력합니다.

adb shell service check customservice

서비스가 정상적으로 등록되지 않았다면, 등록 과정에서 문제가 발생한 것이므로 logcat이나 dumpsys를 활용하여 원인을 분석해야 합니다.


5. am 명령어를 사용한 서비스 호출 및 상태 점검

am(Activity Manager) 명령어를 활용하면 서비스 실행 및 상태 점검을 수행할 수 있습니다.

서비스 시작하기

서비스를 수동으로 시작하려면 다음 명령어를 사용합니다.

adb shell am startservice -n <패키지명>/<서비스명>

예를 들어, com.example.customservice/.MyService를 시작하려면 다음과 같이 실행할 수 있습니다.

adb shell am startservice -n com.example.customservice/.MyService

서비스 종료하기

실행 중인 서비스를 종료하려면 다음 명령어를 사용합니다.

adb shell am stopservice -n <패키지명>/<서비스명>

예를 들어, 위에서 실행한 서비스를 종료하려면 다음과 같이 입력합니다.

adb shell am stopservice -n com.example.customservice/.MyService

이 명령어를 활용하면 서비스가 정상적으로 시작 및 종료되는지 확인할 수 있으며, 서비스 실행 도중 발생하는 문제를 쉽게 분석할 수 있습니다.


결론

이번 포스팅에서는 Android 사용자 정의 Framework Service의 디버깅 및 문제 해결 방법을 살펴보았습니다.

  1. adb shell dumpsys를 활용하여 서비스의 상태를 확인하는 방법
  2. logcatstrace를 이용한 디버깅 기법
  3. binder_debugfs를 활용한 Binder 트랜잭션 분석
  4. adb shell service list로 서비스 등록 여부 확인
  5. am 명령어를 이용한 서비스 실행 및 종료

이러한 방법들을 조합하여 사용자 정의 서비스를 효과적으로 디버깅하고 안정성을 높일 수 있습니다. 개발 과정에서 발생하는 문제를 해결하는 데 도움이 되기를 바랍니다.

728x90
반응형