콘솔에서 Android 앱 중지


205

콘솔에서 Android 앱을 중지 할 수 있습니까? 다음과 같은 것 :

adb stop com.my.app.package

테스트 프로세스가 너무 빨라질 것입니다. 지금은 수동 테스트 사례가 깨끗한 상태로 시작되도록 매번 앱을 제거 / 설치합니다.

답변:


146

편집 : 나는이 게시물을 작성한 사람과는 응답으로, 허용 된 후 긴 am force-stop명령했다 구현 에 언급 한 바와 같이, 안드로이드 팀 이 답변 .

또한 : 오히려 당신이, 당신이 사용할 수있는 각 테스트 실행에 대해 "깨끗한 슬레이트"을 원하는 말할 것도 있기 때문에 그냥 응용 프로그램을 중지하는 것보다 adb shell pm clear com.my.app.package응용 프로그램 프로세스를 중지 할, 그리고 그 응용 프로그램에 저장된 모든 데이터를 지 웁니다.


Linux를 사용하는 경우 :
adb shell ps | grep com.myapp | awk '{print $2}' | xargs adb shell kill

쉘을 실행하자마자 루트가있는 장치 / 에뮬레이터에서만 작동합니다. su미리 전화해서 약간 다듬을 수 있습니다 .

그렇지 않으면 (수동으로 또는 스크립트로 가정) 할 수 있습니다.
pc $ adb -d shell
android $ su
android # ps
android # kill <process id from ps output>


6
그것을 작동시킬 수 없었습니다 (kill과 su 모두에 대한 권한이 거부되었습니다).
hpique

9
아, 루팅 된 기기가없는 것 같습니다. 적어도 에뮬레이터에서 작동합니다! :)
Christopher Orr 2016 년

1
파티션 읽기 / 쓰기를 다시 마운트하고 루트로 adb를 실행해야 할 수도 있습니다. adb remount; adb root # 그저 바보 같은 생각입니다
Rorist

570

앱을 중지하는 가장 좋은 방법은 다음과 같습니다.

adb shell am force-stop com.my.app.package

이렇게하면 프로세스 ID를 알 필요가 없습니다.


28
이것은이 문제에 대한 대답으로 받아 들여 져야합니다. 질문에는 루팅 된 기기가 포함되어 있지 않습니다.
Dimitris

10
@ Dimitris 나는 force-stop명령이 존재 하기 전에 위의 답변을 썼습니다 . 이 답변을 가리 키도록 답변을 업데이트했습니다.
Christopher Orr

2
또한 테스트 실행을위한 "클린 슬레이트"를 제공하는 좋은 방법으로 답변을 업데이트했습니다.
Christopher Orr

이 후에는 BroadcastReceiver가 작동하지 않습니다 (다음 앱이 열릴 때까지) commonsware.com/blog/2011/07/13/…
CAMOBAP

에서 테스트 한 상태 Android 9.0 API Level 28에서 앱 과 관련하여 앱을 찾 더라도 최신 앱에 계속 표시됩니다 PID. 백그라운드 앱에서도 앱을 완전히 중지하는 방법을 알고 있습니까?
talha06

32

먼저 앱을 백그라운드에 놓습니다 (기기의 홈 버튼을 누름)

그런 다음 .... 터미널에서 ....

adb shell am kill com.your.package

11
참고 API 레벨> 22에서 더 이상 작동하지 않는다고 생각합니다.
dell116

Marshmallow와 함께 Nexus 5에서 실행
urSus

작동합니다. 그래도 앱을 배경에 먼저 넣으십시오.
PhillyTheThrilly

17

장치 콘솔에서 다음을 사용할 수 있습니다 pm disable com.my.app.package. 그런 다음 pm enable com.my.app.package다시 시작할 수 있도록 사용 하십시오.


1
뿌리가없는 전화에서는 아무것도하지 않는 것 같습니다.
Robert Muil

루팅되지 않은 휴대 전화에서 확인했습니다. 처음에는 일부 권한 거부 메시지가 있는데 DalvicVM 앱 / 서비스가 종료되었습니다. 잠깐만 기다려
LikeYou

1
루팅 된 기기에서 작동하며 앱 / 서비스를 유지할 수 있다는 추가 이점이 있습니다. 이것은 테스트 목적으로 바람직 할 수 있습니다.
miki

2
참고 : 먼저 adb shell실행 해야합니다 su.
kakyo

경고 : 이렇게하면 다시 활성화 한 후에도 해당 패키지의 실행기 아이콘 바로 가기가 사라집니다.
Elad Nava

10

응용 프로그램 패키지에 액세스 할 수있는 경우 -r 옵션을 사용하여 설치할 수 있으며 현재 부작용으로 실행중인 프로세스가 종료됩니다. 이처럼 :

adb -d install -r MyApp.apk ; adb -d shell am start -a android.intent.action.MAIN -n com.MyCompany.MyApp/.MyActivity

-r 옵션은 현재 앱과 관련된 데이터를 유지합니다. 그러나 언급 한 것처럼 깨끗한 슬레이트를 원하면 해당 옵션을 사용하지 않을 수 있습니다.


7

루팅되지 않은 기기를 타겟팅하거나 APK에 중지하고 싶지 않은 서비스가 있으면 다른 솔루션이 작동하지 않습니다.

이 문제를 해결하기 위해 활동을 중지시키기 위해 활동에 추가 한 브로드 캐스트 메시지 수신자를 사용했습니다.

public class TestActivity extends Activity {
    private static final String STOP_COMMAND = "com.example.TestActivity.STOP";

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            TestActivity.this.finish();
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //other stuff...

        registerReceiver(broadcastReceiver, new IntentFilter(STOP_COMMAND));
    }
}

이렇게하면이 adb 명령을 실행하여 활동을 중지 할 수 있습니다.

adb shell am broadcast -a com.example.TestActivity.STOP

2

당신이 찾고있는 모든 패키지를 죽이고있다

pkill package_name 

작동해야합니다


참고 : 이것은 최신 Android 버전에서만 작동합니다. pkill은 4.4 에뮬레이터에서는 사용할 수 없지만 Android 6 에뮬레이터에서는 사용할 수 있습니다.
Simon Warta

1

adb shell killall -9 com.your.package.name

MAC "필수 액세스 제어"에 따르면 아마도 루트에 의해 시작되지 않은 프로세스를 종료 할 수있는 권한이있을 것입니다

재미 있어요!


이 명령을 실행 한 것에 대한 응답으로 "조작이 허용되지 않습니다"
Abdul Rahman Shamair

0

일식에서 DDMS 퍼스펙티브로 이동하고 장치 탭에서 종료하려는 장치 아래에서 종료하려는 프로세스를 클릭하십시오. 그런 다음 중지 버튼을 누르면 프로세스가 종료됩니다.

명령 줄 도구에서 어떻게하는지 모르겠지만 방법이 있어야합니다. 아마도 당신은 adb shell을 통해 그것을 할 수 있습니다 ...


Eclipse를 실행하지 않고 명령 줄 에서이 작업을 수행하는 방법 에 대한 GitHub코드 스 니펫을 발견하고 약간 확장했습니다 .
sschuberth

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.