Linux pm命令学习
2020-12-06 本文已影响0人
过期的薯条
1.引言
之所以特意记录下这个知识点,是因为自己工作中犯过的错误。我在adb push 到system/app/ 。推送成功 但是重启之后,发现apk并没有生效。在同事提醒下,使用pm path 包名 查看到原因当前运行的apk,不是我那个目录下的。而是data下面的base.apk。难怪会没得反应。所以,我得好好学习下pm命令知识。
2.正题
2.1 命令列表
pm <command>
| 命令 | 功能 | 实现方法 |
|---|---|---|
| list packages | 列举app包信息 | PMS.getInstalledPackages |
install [options] <PATH> |
安装应用 | PMS.installPackageAsUser |
uninstall [options]<package> |
卸载应用 | IPackageInstaller.uninstall |
enable <包名或组件名> |
enable | PMS.setEnabledSetting |
disable <包名或组件名> |
disable | PMS.setEnabledSetting |
hide <package> |
隐藏应用 | PMS.setApplicationHiddenSettingAsUser |
unhide <package> |
显示应用 | PMS.setApplicationHiddenSettingAsUser |
| get-install-location | 获取安装位置 | PMS.getInstallLocation |
| set-install-location | 设置安装位置 | PMS.setInstallLocation |
path <package> |
查看App路径 | PMS.getPackageInfo |
clear <package> |
清空App数据 | AMS.clearApplicationUserData |
| get-max-users | 最大用户数 | UserManager.getMaxSupportedUsers |
force-dex-opt <package> |
dex优化 | PMS.forceDexOpt |
dump <package> |
dump信息 | AM.dumpPackageStateStatic |
trim-caches <目标size> |
紧缩cache目标大小 | PMS.freeStorageAndNotify |
pm命令实的实现方式在Pm.java,最后大多数都是调用PackageManagerService相应的方法来完成的。disbale之后,在桌面和应用程序列表里边都看到不该app。
2.2 pm list packages命令
查看所有的package
list packages [options] <FILTER>
其中[options]参数:
- -f: 显示包名所关联的文件;
- -d: 只显示disabled包名;
- -e: 只显示enabled包名;
- -s: 只显示系统包名;
- -3: 只显示第3方应用的包名;
- -i: 包名所相应的installer;
- -u: 包含uninstalled包名.
规律: disabled + enabled = 总应用个数; 系统 + 第三方 = 总应用个数。
比如:查看第3方应用:
pm list packages -3
<FILTER>参数:
当FILTER为不为空时,则只会输出包名带有FILTER字段的应用;当FILTER为空时,则默认显示所有满足条件的应用。
比如,查看包名带google字段的包名
pm list packages launcher
会将带有“launcher” 字段的packages 输出出来。
2.3 pm install命令
安装应用
pm install [options] <PATH>
- -r: 覆盖安装已存在Apk,并保持原有数据;
- -d: 运行安装低版本Apk;
- -t: 运行安装测试Apk
- -i : 指定Apk的安装器;
- -s: 安装apk到共享快存储,比如sdcard;
- -f: 安装apk到内部系统内存;
- -l: 安装过程,持有转发锁
- -g: 准许Apk manifest中的所有权限;