--help选项的本地文档一同查阅运行方式有两种
adb shell pm list packages -s -d|nl
adb shellpm ...或am ...下面默认当前已经进入了adb shell 模式,采用第二种方式运行
Shizuku(moe.shizuku.privileged.api) (coolapk.com)授权的方式使用(通过无线调试来激活shizuku,需要android11或更高版本),激活后配合以下之一的app使用:
当然,还存在一些其他的app可以借助无线调试来执行adb命令行
检查所包
pm list packages
list packages [-f] [-d] [-e] [-s] [-3] [-i] [-l] [-u] [-U]
[--show-versioncode] [--apex-only] [--uid UID] [--user USER_ID] [FILTER]
Prints all packages; optionally only those whose name contains
the text in FILTER. Options are:
-f: see their associated file
-a: all known packages (but excluding APEXes)
-d: filter to only show disabled packages
-e: filter to only show enabled packages
-s: filter to only show system packages
-3: filter to only show third party packages
-i: see the installer for the packages
-l: ignored (used for compatibility with older releases)
-U: also show the package UID
-u: also include uninstalled packages
--show-versioncode: also show the version code
--apex-only: only show APEX packages
--uid UID: filter to only show packages with the given UID
--user USER_ID: only list packages belonging to the given user
pm list packages|grep
pm list packages|grep thaons列出已经禁用的包:
pm list package -s -d
package:com.miui.systemAdSolution
package:com.android.vending
package:com.miui.analytics
package:com.google.android.ext.shared
package:com.miui.yellowpage
package:com.google.android.configupdater
package:com.google.android.gms
package:com.google.android.gsf
package:com.xiaomi.gamecenter.sdk.service
package:com.xiaomi.migameservice
package:com.google.android.printservice.recommendation
package:com.milink.service
package:com.google.android.onetimeinitializer
package:com.miui.voiceassist
导出后,方便分享给别人🎈
cd /sdcard/
#back up the current disabled packages list
pm list package -d|sed 's/package://g'|tee disabled_packaged_list.bak
cd /sdcard/
#back up the current disabled packages list
pm list package -d|sed 's/package://g'|tee disabled_packaged_list.bak
#生成/创建冻结脚本(create the shell file of list of packages that need to be disable)
pm list packages -d|sed 's/package:/pm disable /g'|tee disable_pkg_list.sh
不出意外的话,你会得到位于/sdcard/目录下的一个脚本文件:
内容大概是这样的:
pm disable com.miui.systemAdSolution
pm disable com.android.vending
pm disable com.miui.analytics
pm disable com.xiaomi.mi_connect_service
pm disable com.google.android.ext.shared
pm disable com.google.android.configupdater
pm disable com.xiaomi.mirror
pm disable com.google.android.gms
pm disable com.termux
pm disable com.google.android.gsf
pm disable com.android.quicksearchbox
pm disable com.miui.carlink
pm disable com.miui.cloudservice
pm disable com.google.android.printservice.recommendation
pm disable com.microsoft.skydrive
pm disable com.google.android.onetimeinitializer
pm disable com.miui.mishare.connectivity
禁用包:pm disable
pm disable com.miui.analytics启用包pm enable
pm enable com.miui.analytics批量启用包
可以将已禁用的包列举出来
再用编辑器将packages:替换为pm enable ,然后执行这些替换好指令的命令行
具体命令如下:
cd /sdcard/
#back up the current disabled packages list
pm list package -d|sed 's/package://g'|tee disabled_packaged_list.bak
#生成/创建解冻脚本(create the shell file of list of packages that need to be enable)
pm list packages -d|sed 's/package:/pm enable /g'> enable_pkg_list.sh
nl enable_pkg_list.sh
source ./enable_pkg_list.sh
不是所有app都可以被冻结成功
另一方面,肆意冻结可能导致系统异常,导致无法开机
系统更新和应用商店比一般的系统自带应用级别更高一些,无法通过adb shell pm disable冻结(执行过程会报错)
mondrian:/ $ pm disable com.xiaomi.market
Exception occurred while executing 'disable':
java.lang.SecurityException: Shell cannot change component state for null to 2
at com.android.server.pm.PackageManagerService.setEnabledSettings(PackageManagerService.java:3925)
at com.android.server.pm.PackageManagerService.-$$Nest$msetEnabledSettings(Unknown Source:0)
...
com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6187)
at android.os.Binder.execTransactInternal(Binder.java:1290)
at android.os.Binder.execTransact(Binder.java:1249)
使用pm uninstall配合`` --user `选项(通常搭配参数0),则不会报错
uninstall [-k] [--user USER_ID] [--versionCode VERSION_CODE]
PACKAGE [SPLIT...]
Remove the given package name from the system. May remove an entire app
if no SPLIT names specified, otherwise will remove only the splits of the
given app. Options are:
-k: keep the data and cache directories around after package removal.
--user: remove the app from the given user.
--versionCode: only uninstall if the app has the given version code.
即,可以通过伪卸载的方式实现冻结的效果,下面以MIUI的应用商店为例进行禁用操作
不保留数据伪卸载
mondrian:/ $ pm uninstall --user 0 com.xiaomi.market
Success
保留数据伪卸载(使用-k选项)
mondrian:/ $ pm uninstall -k --user 0 com.xiaomi.market
Success
安装复原(取消伪卸载)
mondrian:/ $ pm install-existing --user 0 com.xiaomi.market
Packag e com.xiaomi.market installed for user: 0
系统更新的禁用或恢复操作类似
mondrian:/ $ pm uninstall -k --user 0 com.android.updater
Success
mondrian:/ $ pm install-existing --user 0 com.android.updater
Package com.android.updater installed for user: 0
/data,/product目录下的内容)
/下的某个子目录,例如MIUI位于/product/apppm和am都支持多用户app调试
例如pm下:
下面的例子是扫描用户999的可用的包(app)
xaga:/ # pm list packages --user 999|nl
1 package:com.miui.securitycore
2 package:com.miui.analytics
3 package:android
4 package:com.tencent.mm
5 package:org.mipay.android.manager
6 package:com.google.android.gms
7 package:com.android.nfc
8 package:com.android.permissioncontroller
9 package:com.tencent.soter.soterserver
10 package:com.google.android.gsf
11 package:com.miui.phrase
12 package:com.xiaomi.gamecenter.sdk.service
13 package:org.ifaa.aidl.manager
14 package:com.miui.rom
15 package:com.google.android.webview
16 package:com.android.keychain
17 package:com.miui.contentcatcher
18 package:com.android.phone
多用户 am
下面这条命尝试为ID=999的用户启动微信
am start --user 999 com.tencent.mm/com.tencent.mm.ui.LauncherUI
例如,查找桌面启动器相关的包
xaga:/ $ pm list packages|grep -e home -e launcher|nl
1 package:android.miui.home.launcher.res
2 package:com.yuk.miuihome
3 package:com.miui.home
4 package:com.miui.newhome
5 package:cn.fuckhome.xiaowine
6 package:bitpit.launcher
dumpsys package com.miui.home|nlpm list packages|grep -e music -e player -e tv -e ku|nl
xaga:/ $ dumpsys package com.tencent.mm|nl|grep LauncherUI
487 b29e6a7 com.tencent.mm/.ui.LauncherUI filter 1484754
492 b29e6a7 com.tencent.mm/.ui.LauncherUI filter 7a26fd
adb shell am 和monkey进行管理am start PackageName/activity
例如启动微信
am start com.tencent.mm/com.tencent.mm.ui.LauncherUI
简写:am start com.tencent.mm/.ui.LauncherUI
xaga:/ $ am start com.tencent.mm/.ui.LauncherUI
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mm/.ui.LauncherUI }
Warning: Activity not started, its current task has been brought to the front
该命令将启动微信主页页面
am start还可以其他选项可以接受其他参数,比如,am start -n
但是,这不总是方便的,有时我们就只需要启动默认主页面,那么Activity就不是一个很有必要写的部分
但是我们不写activity名字,就不再是用am,而是改用monkey
monkey -p PackageName 1
需要将PackageName改为包名(相比于am start方式,不需要指定具体Activity)
例如启动微信 monkey -p com.tencent.mm 1
xaga:/ $ monkey -p com.tencent.mm 1
bash arg: -p
bash arg: com.tencent.mm
bash arg: 1
args: [-p, com.tencent.mm, 1]
arg: "-p"
arg: "com.tencent.mm"
arg: "1"
data="com.tencent.mm"
Events injected: 1
## Network stats: elapsed time=18ms (0ms mobile, 0ms wifi, 18ms not connected)
如果启动失败,您可以尝试变动参数(将数字1改为其他值再试)
testing - Stopping an Android app from console - Stack Overflow
使用adb shell am force-stop PackageName
adb shell am force-stop com.microsoft.emmx或者进入shell
调用am force-stop PackageName进行杀灭