本文转载于:http://www.iloveandroid.net/2016/06/20/Android_PackageManagerService-1/
Android系统中PackageManagerService简称PMS,主要负责各种APK的安装,卸载,优化和查询。
Android系统中,pm工具是PMS的一个展现命令。通过了解pm的使用,可以了解PMS究竟提供了哪些具体的功能,进而帮助我们理解和分析PMS的源码实现。
pm使用
利用adb shell命令,进入Android设备的终端,pm工具在/system/bin中,所以可以直接使用:
1
| pm <command>
|
包名信息查询
1
| pm list packages [options] [FILTER]
|
打印所有的已经安装的应用的包名,如果设置了文件过滤则值显示包含过滤文字的内容.
参数:
-f 显示每个包的文件位置
-d 使用过滤器,只显示禁用的应用的包名
-e 使用过滤器,只显示可用的应用的包名
-s 使用过滤器,只显示系统应用的包名
-3 使用过滤器,只显示第三方应用的包名
-i 查看应用的安装者
权限信息查询
打印所有已知的权限组
1
| pm list permission-groups
|
打印权限:
1
| pm list permissions [options] [GROUP]
|
参数:
g 按组进行列出权限
-f 打印所有信息
-s 简短的摘要
-d 只有危险的权限列表
-u 只有权限的用户将看到列表用户自定义权限
Android 6.0之后,允许授权和取消权限:
1
| pm grant <package_name> <permission>
pm revoke <package_name> <permission>
|
授权和取消是针对APK中申请的权限的来说的。即APK中没有申请的权限,是没办法通过此命令添加的。
测试包
1
| pm list instrumentation 参数
|
无参数 列出所有的instrumentation测试包
-f 列出apk文件位置
target_package 列出某个app的测试包
包路径
1
| pm path package_name
|
系统硬件特性
1
| pm list features
|
设备依赖的java库
1
| pm list libraries
|
dump包信息
1
| pm dump package_name
|
安装与卸载apk
安装apk
1
| pm install [-lrtsfd] [-i PACKAGE] [PATH]
|
adb install实际上就是对pm install的封装调用。
参数:
-l 锁定应用程序
-r 重新安装应用,且保留应用数据
-t 允许测试apk被安装
-i INSTALLER_PACKAGE_NAME 指定安装包的包名
-s 安装到sd卡
-f 安装到系统内置存储中(默认安装位置)
-d 允许降级安装(同一应用低级换高级)
-g 授予应用程序清单中列出的所有权限(只有6.0系统可用)
卸载apk:
1
| pm uninstall [options] <PACKAGE>
|
参数:
-k 卸载应用且保留数据与缓存(如果不加-k则全部删除)
清除应用数据
1
| pm clear package_name
|
禁用和启用系统应用
1
| pm enable <PACKAGE_OR_COMPONENT> 使package或component可用
pm disenable <PACKAGE_OR_COMPONENT> 使package或component不可用(直接就找不到应用了)
pm disenable-user [options] <PACKAGE_OR_COMPONENT> 使package或component不可用(会显示已停用
|
隐藏与恢复应用
1
| pm hide PACKAGE_OR_COMPONENT
pm unhide PACKAGE_OR_COMPONENT
|
被隐藏应用在应用管理中变得不可见,桌面图标也会消失
设置和查看应用的安装位置
1
| pm set-install-location 参数 package_name
pm get-install-location package_name
|
参数:
0:自动-让系统决定最好的位置
1:内部存储-安装在内部设备上的存储
2:外部存储-安装在外部媒体
查看当前系统user信息
1
| pm list users
|
可以指的apk安装在某个user下,这样只有切换到该user时,才能显示和使用该apk。