介绍
pm命令提供了app包的管理,即packagemanager以命令行的方式提供给开发者使用。以下将介绍常用pm命令的基本使用。
常用命令
查看当前用户的ID(USER_ID)
$pm list users
x20l_fhd_portrait:/ $ pm list users
Users:
UserInfo{0:机主:13} running
当前用户信息,USER_ID是0,用户名是13
查看已经安装的包
$pm -l
x20l_fhd_portrait:/ $ pm -l
package:com.android.fmradio
package:com.mediatek.gba
package:com.mediatek.ims
package:com.smc.hccarddemo
package:cn.heils.hap
package:com.android.cts.priv.ctsshim
package:com.smc.bitmapclap
package:com.android.providers.telephony
package:com.maniu.cameraopengldemo
package:com.mediatek.fwk.plugin
package:com.sohu.inputmethod.sogou
package:com.android.wallpapercropper
package:com.mediatek.schpwronoff
package:com.android.egg
package:com.android.mms
package:com.android.mtp
package:com.android.stk
package:com.android.launcher3
列举设备上安装好的所有的app包
$pm -l | grep com.android.launcher3
x20l_fhd_portrait:/ $ pm -l | grep com.android.launcher3
package:com.android.launcher3
查询某一个包是否安装,如果没有安装则结果为空
查看第三方安装包
格式: pm list package -3
$ pm list package -3
列出第三方开发的app的包名
查看测试包
格式: pm list instrumentation
$ pm list instrumentation
x20l_fhd_portrait:/ $ pm list instrumentation
instrumentation:com.tencent.android.qqdownloader/com.live.watermelon.Instrumentation (target=com.tencent.android.qqdownloader)
查看安装包的路径
格式: pm path [--user USER_ID] PACKAGE
如查看launcher3的安装包路径
$pm path --user 0 com.android.launcher3
x20l_fhd_portrait:/ $ pm path --user 0 com.android.launcher3
package:/system/priv-app/Launcher3_m/Launcher3_m.apk
查看一下这个路径是否正确
x20l_fhd_portrait:/ $ ls -l /system/priv-app/Launcher3_m/Launcher3_m.apk
-rw-r--r-- 1 root root 8205210 2019-01-17 19:02 /system/priv-app/Launcher3_m/Launcher3_m.apk
查找结果完全正确
输出安装包信息
格式: pm dump PACKAGE
$pm dump com.android.launcher3
x20l_fhd_portrait:/ $ pm dump com.android.launcher3
DUMP OF SERVICE package:
Activity Resolver Table:
Full MIME Types:
image/*:
6c52abe com.android.launcher3/.WallpaperCropActivity filter 60468b1
Action: "android.service.wallpaper.CROP_AND_SET_WALLPAPER"
Category: "android.intent.category.DEFAULT"
Type: "image"
mPriority=0, mHasPartialTypes=true
AutoVerify=false
Wild MIME Types:
image:
6c52abe com.android.launcher3/.WallpaperCropActivity filter 60468b1
Action: "android.service.wallpaper.CROP_AND_SET_WALLPAPER"
Category: "android.intent.category.DEFAULT"
Type: "image"
mPriority=0, mHasPartialTypes=true
AutoVerify=false
Non-Data Actions:
android.intent.action.MAIN:
863513 com.android.launcher3/.Launcher filter 5331e35
Action: "android.intent.action.MAIN"
Category: "android.intent.category.HOME"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.MONKEY"
AutoVerify=false
d029350 com.android.launcher3/.LauncherExtension filter bf632ca
Action: "android.intent.action.MAIN"
Category: "android.intent.category.HOME"
Category: "android.intent.category.DEFAULT"
Category: "android.intent.category.MONKEY"
AutoVerify=false
2db4949 com.android.launcher3/.ToggleWeightWatcher filter d895c3b
Action: "android.intent.action.MAIN"
Category: "android.intent.category.DEFAULT"
AutoVerify=false
f28a24e com.android.launcher3/.MemoryDumpActivity filter 1acb196
Action: "android.intent.action.MAIN"
Category: "android.intent.category.DEFAULT"
AutoVerify=false
android.intent.action.SET_WALLPAPER:
e77c03c com.android.launcher3/.LauncherWallpaperPickerActivity filter e386f58
Action: "android.intent.action.SET_WALLPAPER"
Category: "android.intent.category.DEFAULT"
AutoVerify=false
...
输出launcher3的安装信息,信息太多了,截取其中一段
包安装
格式: pm install [-lrtsfd] [-i PACKAGE] [--user USER_ID] [PATH]
参数说明:
[-lrtsfd]说明
参数
说明
-l
锁定应用
-r
强行安装(即便设备上已经存在该app,也重新安装并覆盖)
-t
安装测试包(一般是debug包)
-s
安装到sd卡(/mnt/sdcard,用户分区)中
-f
安装到内置卡(/data/data,data分区)中
-d
允许降级安装(同一应用低级换高级)
[-i PACKAGE]
表示指定包名
[--user USER_ID]
表示指定用户ID
[PATH]
apk的路径,如: /sdcard/release.apk
通常在开发过程中,如下使用:
强行安装apk包
$pm install -r /sdcard/release.apk
安装测试包
$pm install -t /sdcard/debug.apk
包卸载
格式: pm uninstall [-k] [--user USER_ID] PACKAGE
参数说明
参数
说明
-k
卸载应用且保留数据与缓存,如果不加 -k 则全部删除
--user
用户ID,android下目前只有一个用户,这个值默认为0
常用指令
$pm uninstall com.example.test
卸载普通应用包
#pm uninstall -k --user 0 com.android.launcher3
注意卸载系统包,需要root权限
清空应用缓存
格式: pm clear [--user USER_ID] PACKAGE
如: 清理launcher3的指令
$pm clear --user 0 com.android.launcher3
x20l_fhd_portrait:/ $ pm clear --user 0 com.android.launcher3
Success
隐藏和显示安装包
格式: pm hide [--user USER_ID] PACKAGE_OR_COMPONENT
以设置程序为例子,进行隐藏
$pm hide --user 0 com.android.settings
x20l_fhd_portrait:/ $ pm hide --user 0 com.android.settings
Error: java.lang.SecurityException: Neither user 2000 nor current process has android.permission.MANAGE_USERS.
报错了,这个指令需要root权限
格式: pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT
以设置程序为例子,进行显示
$pm unhide --user 0 com.android.settings
x20l_fhd_portrait:/ $ pm unhide --user 0 com.android.settings
Error: java.lang.SecurityException: Neither user 2000 nor current process has android.permission.MANAGE_USERS.
同样需要root权限
授权和撤销权限
格式: pm grant [--user USER_ID] PACKAGE PERMISSION
$pm grant --user 0 com.android.launcher3 android.permission.WRITE_EXTERNAL_STORAGE
格式: pm revoke [--user USER_ID] PACKAGE PERMISSION
$pm revoke --user 0 com.android.launcher3 android.permission.WRITE_EXTERNAL_STORAGE
需要root权限
获取系统支持最大用户数
格式: pm get-max-users
$pm get-max-users
x20l_fhd_portrait:/ $ pm get-max-users
Maximum supported users: 4