Android - adbコマンドでアプリ無効化、有効化

adbコマンドでアプリを無効または有効にする方法を紹介します。

1. Disable アプリ: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. Enable アプリ: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の状態が変更された確認と、次のようにパッケージ情報で enabledComponentsdisabledComponentsを確認ください。

このリストに含まれている場合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
codechachaCopyright ©2019 codechacha