Adb — App Control Extended Key
adb shell pm list packages --user 10 This lists only apps installed in the work profile. Combining --user with disable/suspend allows per-profile app control.
./advanced_app_control.sh com.facebook.katana suspend ./advanced_app_control.sh com.facebook.katana deep-link "https://facebook.com/events" Even with the extended key, obstacles exist. Problem 1: "Security exception: Shell cannot change component state" Solution: Some system apps are protected. Use adb shell pm disable --user 0 com.android.app first. If that fails, you need root or adb shell pm uninstall -k --user 0 (which doesn't remove the app but hides it for the user). Problem 2: Extended keys don't persist after reboot Solution: Suspension and disable-until-used are persistent. However, --user flags are per-session. Create an init.d script (root) or use Tasker with ADB WiFi to reapply extended keys on boot. Problem 3: "Unknown option --ez" when using am Solution: Ensure your am syntax is correct. Extras come after the component name.
| Command | Effect | | :--- | :--- | | pm disable-user | Disables for the current user only. | | pm disable-until-used | Disables until the user manually launches the app. | | pm disable-dm | Disables package verification. (Dangerous; for development only) | | pm enable | Re-enables a disabled app. | adb app control extended key
case $ACTION in suspend) echo "Suspending $PACKAGE (extended suspend key)" adb shell pm suspend --user $USER_ID $PACKAGE ;; unsuspend) echo "Unsuspending $PACKAGE" adb shell pm unsuspend --user $USER_ID $PACKAGE ;; disable-until-launch) echo "Disabling $PACKAGE until launched by user" adb shell pm disable-until-used --user $USER_ID $PACKAGE ;; grant-all-perms) echo "Granting all dangerous permissions to $PACKAGE" adb shell pm list permissions -d -g | grep "Permission:" | awk 'print $2' | while read perm; do adb shell pm grant $PACKAGE $perm done ;; deep-link) URL=$4 echo "Launching $PACKAGE with extended key deep link to $URL" adb shell am start -W -a android.intent.action.VIEW -d "$URL" $PACKAGE ;; *) echo "Usage: $0 <package> <suspend|unsuspend|disable-until-launch|grant-all-perms|deep-link> [user_id]" ;; esac
Download a GUI tool like ADB AppControl for Windows to see these extended keys visualized, or open a terminal and try the am extras on your own app. You’ll never look at adb install the same way again. Have you discovered your own unique use for the ADB extended key? Share your command combinations in the comments below. adb shell pm list packages --user 10 This
adb shell pm disable-user --user 0 com.google.android.youtube adb shell pm disable-user --user 0 com.android.camera2 adb shell pm grant com.google.android.gm android.permission.CAMERA Wait—the last line is crucial. Instead of disabling camera apps, you revoke the permission via the extended key. A game constantly runs background tracking services. Instead of uninstalling (which loses data), you suspend it.
But what exactly is this "extended key"? It is not a single button or a standalone command. It is a conceptual framework of advanced flags, intent filters, and permission modifiers that extend ADB’s native app control package manager (PM) functions. Problem 2: Extended keys don't persist after reboot
adb shell pm suspend --user 0 com.tencent.mobilegame When you want to play again: