Android - adb 명령어로 앱 비활성화, 활성화

adb 명령어로 앱을 비활성화 또는 활성화하는 방법을 소개합니다.

1. App 비활성화 : adb shell pm disable --user USER_ID PACKAGE

다음 명령어는 User 0에 설치된 com.google.android.youtube 패키지를 비활성 상태로 변경합니다.

$ adb shell pm disable-user --user 0 com.google.android.youtube
Success

다음 명령어로 비활성화 상태로 변경되었는지 확인할 수 있습니다. enabled=3는 비활성화 상태를 의미합니다.

$ adb shell dumpsys package com.google.android.youtube

Packages:
  Package [com.google.android.youtube] (3d1fcc2):
    userId=10121
    pkg=Package{b77ead3 com.google.android.youtube}
    codePath=/product/app/YouTube
    flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ]
    ....
    User 0: ceDataInode=122910 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=3 instant=false virtual=false

User 0은 System의 사용자를 의미하며, 멀티유저가 생성되면 User 10, User 11 처럼 다른 사용자 공간이 생성됩니다.

2. App 활성화 : adb shell pm enable --user USER_ID PACKAGE

다음 명령어는 User 0에 설치된 com.google.android.youtube 패키지를 활성화 상태로 변경합니다.

$ adb shell pm enable --user 0 com.google.android.youtube
Package com.google.android.youtube new state: enabled

다음 명령어로 활성화 상태로 변경되었는지 확인할 수 있습니다. enabled=1는 활성화 상태를 의미합니다.

$ adb shell dumpsys package com.google.android.youtube

Packages:
  Package [com.google.android.youtube] (3d1fcc2):
    userId=10121
    pkg=Package{b77ead3 com.google.android.youtube}
    codePath=/product/app/YouTube
    flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ]
    ....
    User 0: ceDataInode=122910 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=1 instant=false virtual=false

3. App을 default 상태로 변경

다음 명령어는 App을 default 상태로 변경합니다.

default 상태는 App의 Manifest에서 설정한 enabled 설정대로 활성화 또는 비활성화하겠다는 의미입니다.

일반적으로 App에서 Application을 android:enabled=false로 설정하지 않기 때문에 default 상태를 enable과 동일하게 생각하시면 됩니다.

$ adb shell pm default-state --user 0 com.google.android.youtube
Package com.google.android.youtube new state: default

다음 명령어로 default 상태로 변경되었는지 확인할 수 있습니다. enabled=0는 활성화 상태를 의미합니다.

$ adb shell dumpsys package com.google.android.youtube

Packages:
  Package [com.google.android.youtube] (3d1fcc2):
    userId=10121
    pkg=Package{b77ead3 com.google.android.youtube}
    codePath=/product/app/YouTube
    flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ]
    ....
    User 0: ceDataInode=122910 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=0 instant=false virtual=false

4. Component의 비활성화, 활성화, default 상태 변경

App의 Activity, Service, Provider, Receiver들을 비활성화, 활성화, default 상태로 변경할 수도 있습니다.

App의 상태를 변경할 때 사용한 명령어에서 패키지 대신 Component 정보를 전달하면 됩니다.

다음과 같이 Component의 상태를 변경할 수 있습니다. Activity 뿐만 아니라 Provider나 다른 Component도 변경 가능합니다.

$ adb shell pm disable-user --user 0 com.google.android.youtube/com.google.android.youtube.MainActivity

$ adb shell pm enable --user 0 com.google.android.youtube/com.google.android.youtube.MainActivity

$ adb shell pm default-state --user 0 com.google.android.youtube/com.google.android.youtube.MainActivity

Component의 상태가 변경되었는지 확인할 때, 다음과 같이 패키지 정보에서 enabledComponents, disabledComponents를 확인하시면 됩니다.

이 리스트에 포함되어있으면 enable 또는 disable 상태를 의미합니다. 이 리스트에 포함되어있지 않으면 default 상태를 의미합니다.

$ adb shell dumpsys package com.google.android.youtube

Packages:
  Package [com.google.android.youtube] (3d1fcc2):
    userId=10121
    pkg=Package{b77ead3 com.google.android.youtube}
    ....

    User 0: ceDataInode=122910 installed=true hidden=false suspended=false distractionFlags=0 stopped=false notLaunched=false enabled=0 instant=false virtual=false
      gids=[3003]
      runtime permissions:
        android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
      enabledComponents:
        com.google.android.youtube.ManageNetworkUsageActivity
      disabledComponents:
        androidx.work.impl.background.systemalarm.RescheduleReceiver
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha