Android System & AOSP Engineering/Debug, ADB & System Tools

안드로이드 ADB 앱 제어: 강제 종료 및 실행 명령어 총정리

임베디드 친구 2025. 2. 28. 08:51
반응형

안드로이드 애플리케이션을 개발하다 보면 특정 앱이 응답하지 않거나, 초기 설정 상태부터 다시 테스트해야 하는 상황을 자주 마주하게 됩니다. 매번 기기 설정 메뉴에 들어가 애플리케이션 정보를 찾고 강제 중지 버튼을 누르는 과정은 반복될수록 생산성을 떨어뜨리는 주범이 됩니다. 안드로이드 프레임워크는 ActivityManager(am)라는 강력한 도구를 제공하며, ADB(Android Debug Bridge)를 통해 이를 호출하면 터미널 명령 한 줄로 애플리케이션의 라이프사이클을 완벽하게 제어할 수 있습니다. 이번 포스팅에서는 앱을 완전히 멈추는 force-stop과 프로세스만 내리는 kill, 그리고 특정 액티비티를 겨냥하여 앱을 실행하는 start 명령어를 실무 관점에서 정리해 보겠습니다.

Generated by Gemini AI.

핵심 요약

  • adb shell am force-stop은 애플리케이션의 모든 프로세스와 백그라운드 서비스를 즉시 정지시키는 가장 확실한 강제 종료 명령어입니다.
  • adb shell am start는 특정 패키지 내의 진입점(액티비티)을 지정하여 앱을 실행하며, 자동화 스크립트의 핵심 요소로 활용됩니다.
  • force-stop과 kill은 앱의 종료 범위와 재시작 가능 여부에 따라 동작이 크게 다르므로 상황에 맞는 선택이 필요합니다.

1. 안드로이드 프로세스 제어 명령어 비교

명령어별 동작 방식과 종료 범위가 다르므로 목적에 맞춰 선택적으로 사용해야 합니다.

명령어 제어 대상 종료 범위 및 동작 방식
force-stop 패키지 전체 모든 프로세스, 서비스, 백그라운드 태스크를 즉시 정지시킵니다. 다시 실행 전까지 재시작되지 않습니다.
kill 특정 프로세스 메인 프로세스만 종료합니다. 백그라운드 서비스는 그대로 남을 수 있으며 자동 재시작이 가능합니다.
start 특정 액티비티 지정한 패키지와 액티비티 이름을 결합하여 앱의 화면을 강제로 띄웁니다.
restart 시스템 UI 전체 앱이 아닌 상태 표시줄, 홈 화면 등 시스템 인터페이스를 새로고침합니다.

2. 실무 활용 명령어 사용법

특정 앱 강제 종료 (force-stop)

테스트 환경에서 가장 많이 쓰이는 명령입니다. 앱이 백그라운드에 남아있어 발생하는 모든 문제를 원천 차단합니다.

Bash
 
# 기본 구문
adb shell am force-stop <패키지_이름>

# 예시: 유튜브 앱 종료
adb shell am force-stop com.google.android.youtube

특정 액티비티 지정 실행 (start)

앱을 실행할 때는 패키지명/액티비티명 구조를 입력해야 합니다.

Bash
 
# 기본 구문
adb shell am start -n <패키지_이름>/<액티비티_이름>

# 예시: 크롬 실행
adb shell am start -n com.android.chrome/com.google.android.apps.chrome.Main

개발을 위한 팁

  • 액티비티 이름 찾는 법: 어떤 앱의 메인 액티비티 이름을 모를 때는 adb shell dumpsys package | grep -i <앱이름> 명령을 이용하거나, 앱을 수동으로 실행한 뒤 adb shell dumpsys window | grep mCurrentFocus 명령을 치면 현재 화면에 떠 있는 액티비티 명칭을 즉시 확인할 수 있습니다.
  • 자동화 스크립트 작성: 테스트 자동화를 위해 앱을 껐다 켜는 작업을 반복한다면 셸 스크립트로 묶어두는 것이 효율적입니다. force-stop 후에는 시스템이 프로세스를 완전히 정리할 시간을 주어야 하므로 sleep 2 정도의 지연 시간을 주는 것을 권장합니다.
  • 패키지 이름 검색: 내가 설치한 앱의 정확한 패키지 이름을 모르겠다면 adb shell pm list packages | grep <검색어> 명령으로 필터링하여 찾아낼 수 있습니다.

흔히 하는 실수

  • 액티비티 이름의 점(.) 생략: adb shell am start 사용 시 패키지 내부 액티비티 앞에 점(.)을 붙여야 하는 경우가 많습니다. 예를 들어 패키지가 com.example.app이고 메인 액티비티가 MainActivity라면 -n com.example.app/.MainActivity 처럼 표기해야 정상 동작합니다. 이 점을 누락하면 Activity not found 에러가 발생합니다.
  • force-stop과 kill 혼동: kill은 가벼운 종료이지만, 앱이 백그라운드 서비스를 중요하게 사용하는 경우 곧바로 다시 살아납니다. 완전히 앱을 멈추고 처음부터 테스트하고 싶다면 반드시 force-stop을 사용해야 합니다.
  • 시스템 앱 강제 종료: 너무 빈번하게 시스템 핵심 앱(시스템 UI 등)을 force-stop 하면 기기가 부팅 루프에 빠지거나 강제 재부팅되는 등 시스템 불안정을 초래할 수 있습니다. 본인이 개발 중인 서드파티 앱 위주로 명령어를 적용하시기 바랍니다.

결론

ADB를 통한 앱 제어는 안드로이드 개발자의 일상적인 반복 업무를 획기적으로 줄여주는 필수 기술입니다. am 명령어를 적절히 조합하면 앱의 생명주기를 완벽하게 장악할 수 있으며, 이를 자동화 스크립트에 포함하면 QA 환경을 구축하거나 일관된 테스트 조건을 만드는 데 매우 큰 도움이 됩니다. 본 포스팅의 명령어들을 활용하여 디버깅의 효율성을 한 단계 높여보시기 바랍니다.

반응형