programing

콘솔에서 Android 앱 중지

padding 2023. 10. 5. 21:16
반응형

콘솔에서 Android 앱 중지

콘솔에서 안드로이드 앱을 정지할 수 있습니까?다음과 같은 경우:

adb stop com.my.app.package

그렇게 되면 테스트 과정이 매우 빨라질 것입니다.지금은 매번 앱을 제거/설치하여 수동 테스트 케이스가 깨끗한 상태로 시작하는지 확인합니다.

앱을 중지하는 깨끗한 방법은 다음과 같습니다.

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

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

편집 : 제가 이 게시물을 작성한 지 오래되어 답으로 받아들여졌습니다.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>

먼저 앱을 배경에 넣으십시오(단말기 홈 버튼 누름).

그럼.. 터미널에서..

adb shell am kill com.your.package

에서 를(를) 할 수 pm disable com.my.app.package죽이게 될 겁니다그럼 사용.pm enable com.my.app.package다시 시작할 수 있도록 말입니다.

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

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

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

뿌리가 없는 장치를 대상으로 하거나 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

은 "stop" 됩니다.force-stop; 백그라운드 앱의 실행을 중지합니다.만약 그것이 전경에 있다면, 그것은 또한 멈출 것입니다: 예를 들어.

adb shell am force-stop com.android.providers.telephony

패키지를 지우면 해당 데이터도 삭제됩니다.

adb shell pm clear com.android.providers.telephony

당신의 모든 SMS를 삭제할 것입니다.

어느 쪽을 고르는지 조심하세요.

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

MAC "mandatory access control"에 따르면 루트에 의해 시작되지 않은 프로세스를 죽일 수 있는 권한이 있을 수 있습니다.

재미있게 보내!

당신이 원하는 것이 소포를 죽이는 것뿐이라면

pkill package_name 

되야 할

저는 리눅스에서 모든 답변을 시도했지만 루트가 없는 장치 API 레벨 23에서 디버깅할 수 있는 것은 아무것도 없었습니다. 그래서 개발자 옵션에서 디버깅을 위한 대안을 찾았습니다 -> 앱 섹션 -> 앱을 백그라운드에 둘 때마다 작업을 그렇게 유지하지 않음을 선택합니다.

추신: 디버깅을 마친 후에는 반드시 선택을 취소해야 합니다.

Eclipse(일식)에서 DDMS 관점으로 이동한 후 장치 탭에서 삭제할 장치 아래에서 삭제할 프로세스를 클릭합니다.그러면 중지 버튼만 누르면 프로세스가 종료됩니다.

명령 줄 도구에서 어떻게 이걸 할지는 모르겠지만 방법이 있을 겁니다.어쩌면 애드비 셸을 통해서 할 수도 있습니다.

이것은 제가 사용한 것입니다.

adb shell pidof com.payjoy.status | xargs adb shell kill
pkill NAMEofAPP

비근본 마시멜로, 터먹스 및 터미널 에뮬레이터.

언급URL : https://stackoverflow.com/questions/3117095/stopping-an-android-app-from-console

반응형