디버깅 목적으로, 현재 Top에 실행 중인 액티비티가 무엇인지 확인하고 싶을 때가 있는데요. ADB 명령어를 이용하여 확인할 수 있습니다. 어떤 명령어로 확인하는지 자세히 알아보겠습니다.

1. ADB로 현재 실행 중인 액티비티 찾기

리눅스나 MAC에서 다음과 같이 adb로 dumpsys 로그에서 현재 Top에 실행 중인 액티비티 이름을 찾을 수 있습니다.

  • grep은 명령어의 출력 내용에서 특정 키워드로 검색되는 문자열 한줄을 찾는 명령어
  • adb shell dumpsys window windows으로 모든 내용을 출력하고, 거기에서 mCurrentFocus, mFocusedApp, mObscuringWindow에 해당하는 내용을 찾아도 됨
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp|mObscuringWindow'

예를 들어, Chrome을 실행한 상태에서 명령어를 입력하면, mObscuringWindow로 Top에 실행 중인 Chrome의 Window 정보가 보이며 여기서 패키지 이름과 액티비티 이름을 찾을 수 있습니다.

  • com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivity : package name / activity name
$ adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp|mObscuringWindow'
  mObscuringWindow=Window{b47abf2 u0 com.android.chrome/org.chromium.chrome.browser.firstrun.FirstRunActivity}

참고로, Windows에서 grep 명령어가 안된다면, 아래와 같이 "..."로, 따옴표로 묶어서 입력하면, 디바이스 내부의 shell에서 동작하여, 디바이스의 grep을 사용하여 특정 키워드를 찾습니다.

$ adb shell "dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp|mObscuringWindow'"

2. ADB로 현재 실행 중인 액티비티의 PID 찾기

아래 명령어로 현재 Top에 실행 중인 액티비티의 PID를 찾을 수 있습니다.

$ adb shell dumpsys activity | grep top-activity

Chrome이 실행된 상태에서 명령어를 입력하면, 아래와 같이 출력되며, 여기서 2625가 pid입니다.

$ adb shell dumpsys activity | grep top-activity
    Proc # 0: fg     T/A/TOP  LCMN  t: 0 2625:com.android.chrome/u0a119 (top-activity)
    Proc # 0: fg     T/A/TOP  LCMN  t: 0 2625:com.android.chrome/u0a119 (top-activity)

루팅 디바이스에서 아래와 같이 명령어로 특정 프로세스를 종료시킬 수 있습니다.

$ adb root
$ adb shell kill -9 2625

루팅이 안된 디바이스라면, 아래와 같이 am force-stop <package name> 명령어로 특정 패키지의 프로세스를 종료시킬 수 있습니다.

$ adb shell am force-stop com.android.chrome