一、PMS的作用

Package Manage Service是Android 系统核心服务之一,主要负责各种APK的安装,卸载,优化和查询。

二、PMS 启动流程

简单的将其分为以下几个步骤

  • SystemServer通过PMS的main方法启动PMS
  • PMS构造方法中初始化Settings
  • 扫描各个系统目录下APP相关信息

具体步骤

1.在SystemServer中启动PackageManagerService.main

2.newPackageManagerService()并添加到ServiceManager中

3.newinstaller(建立installer和installd的socket连接,最终在底层实现install,remove,dexopt等功能)

4.通过systemConfig获取到xml文件中信息

5.创建PackageHandler Message Looper(安装/卸载请求)

6.readPLW()(读取data/system/packages.xml)

7.检查/system/etc/permissions/platform.xml中定制的library及/system/framework下的jar档案是否需要dex提取进行优化。若需要优化,会调用installer.dexopt提取dex到/data/dalvik-cache中

8.调用scanDirLI扫描存放apk的各个目录

9.系统应用安装—通过scanPackageLI逐一解析AndroidManifest.xml文件,建立每个apk的配置结构,并将apk配置信息添加到全局列表进行管理。

10.调用writeLPr()从全局列表中将apk信息写到packages.xml和packages.list中。

三、pm使用

Android系统中,pm工具是PMS的一个展现命令。通过了解pm的使用,可以了解PMS究竟提供了哪些具体的功能,进而帮助我们理解和分析PMS的源码实现。

  • 包名信息查询

pm list packages [options] [FILTER]

打印所有的已经安装的应用的包名,如果设置了文件过滤则值显示包含过滤文字的内容.

参数:

-f 显示每个包的文件位置

-d 使用过滤器,只显示禁用的应用的包名

-e 使用过滤器,只显示可用的应用的包名

-s 使用过滤器,只显示系统应用的包名

-3 使用过滤器,只显示第三方应用的包名

-i 查看应用的安装者

  • 权限信息查询

打印所有已知的权限组

pm list permission-groups

打印权限:

pm list permissions [options] [GROUP]

参数:

g 按组进行列出权限

-f 打印所有信息

-s 简短的摘要

-d 只有危险的权限列表

-u 只有权限的用户将看到列表用户自定义权限

Android 6.0之后,允许授权和取消权限:

pm grant <package_name> <permission>
pm revoke <package_name> <permission>

授权和取消是针对APK中申请的权限的来说的。即APK中没有申请的权限,是没办法通过此命令添加的。

  • 测试包

pm list instrumentation 参数

无参数 列出所有的instrumentation测试包

-f 列出apk文件位置

target_package 列出某个app的测试包

  • 包路径

pm path package_name
  • 系统硬件特性

pm list features
  • 设备依赖的java库

pm list libraries
  • dump包信息

pm dump package_name
  • 安装与卸载apk

安装apk

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:

pm uninstall [options] <PACKAGE>

参数:
-k 卸载应用且保留数据与缓存(如果不加-k则全部删除)

  • 清除应用数据

pm clear package_name
  • 禁用和启用系统应用

pm enable <PACKAGE_OR_COMPONENT>   使package或component可用
pm disenable <PACKAGE_OR_COMPONENT>    使package或component不可用(直接就找不到应用了)
pm disenable-user [options] <PACKAGE_OR_COMPONENT> 使package或component不可用(会显示已停用
  • 隐藏与恢复应用

pm hide PACKAGE_OR_COMPONENT
pm unhide PACKAGE_OR_COMPONENT

被隐藏应用在应用管理中变得不可见,桌面图标也会消失

设置和查看应用的安装位置

pm   set-install-location 参数 package_name
pm   get-install-location package_name

参数:
0:自动-让系统决定最好的位置
1:内部存储-安装在内部设备上的存储
2:外部存储-安装在外部媒体

  • 查看当前系统user信息

pm list users

可以指的apk安装在某个user下,这样只有切换到该user时,才能显示和使用该apk。

参考链接
https://blog.csdn.net/qq_31429205/article/details/105232472
https://blog.csdn.net/LOVE000520/article/details/70459530

Android PMS的理解相关推荐

  1. Android 系统(239)---Android PMS的创建过程

    Android PMS的创建过程 ------转自   刘望舒 刘望舒 前言 PMS的创建过程分为两个部分进行讲解,分别是SyetemServer处理部分和PMS构造方法.其中SyetemServer ...

  2. Android Activity的理解

    Android Activity的理解 Activity 生命周期的四个状态 Activity的生命周期分为运行.暂停.停止.销毁四个状态. 运行状态:该Activity生命开始,Activity在前 ...

  3. android 背光灯分析,Android灯光系统--深入理解背光灯

    Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...

  4. android handler的理解

    android handler的理解 在看handler源码前,我一直以为google构造handler的目的是方便开发者在其他线程中 调用执行主线程的方法或者在主线程中调用执行其他线程的方法.看完源 ...

  5. Android系统分区理解及目录细解

    Android系统分区 分区种类 Android 通常有以下分区: System分区: 就是我们刷ROM的分区 Data分区:   分区就是我们装APK的分区 Catch分区:是缓存分区 SDCard ...

  6. Android回调函数理解

    Android回调函数理解,比如我用一个activity去做显示下载进度的一个进度条,但是下载是另外一个B类来做的,这个时候我Activity获取下载的进度就可以提供一个回调接口,然后让下载类来回调就 ...

  7. Android—PMS: PackageInstaller到PMS

    PackageManager 与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能.PackageManager是 ...

  8. Android之最好理解的Binder机制

    转载:http://weishu.me/2016/01/12/binder-index-for-newer/ Binder学习指南 发表于 2016-01-12   |   92条评论   |   3 ...

  9. Android PMS运行规则

    前面介绍了pm命令如何使用,从侧面也反应出了PMS提供了哪些功能.那么在真正分析源码之前,还要了解一下PMS的一些默认规则. 本文主要介绍与PMS相关的目录与文件,以及PMS操作它们的规则. APK文 ...

最新文章

  1. 8 月--菜鸟吐槽日志
  2. GUI实战|Python做一个文档图片提取软件
  3. 基于QoE的实时视频编码优化:低功耗,低延时,高质量
  4. body curl 设置post_curl 命令详解
  5. Very Deep Convolutional Networks for Large-scale Image Recognition(vggnet)
  6. Nginx反向代理之HTTP 请求头中的 X-Forwarded-For
  7. 理解mini-batch、Momentum、RMSpror、Admin优化算法
  8. handbook/CentOS/使用免费SSL证书让网站支持HTTPS访问.md
  9. [c#] HttpContext.Cache和AppFabric的性能对比
  10. ES6学习笔记三(字符串)
  11. php+美图秀秀,美图秀秀头像编辑器的使用? thinkphp+七牛方案
  12. arcgis中 shift数据重新定义投影_【更新85篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  13. DirectX 3D图形
  14. 关于HTML学习重点-绝对布局和相对布局总结
  15. STM32学习过程一
  16. jquery图片放大镜插件—jqzoom
  17. 利用PopButton实现类似Path的点聚式导航
  18. 局域网安全之ARP攻击
  19. 如何用 AI 实现视频结构化管理?
  20. 读书笔记{11} VLAN及其在生产中的应用

热门文章

  1. 卫星遥感—地块/边界提取相关论文
  2. 儿童成长曲线 (WHO标准)
  3. HF_装饰者模式(Decorator_Pattern)_20200308
  4. 安装 Linux mint后的一些设置
  5. 阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
  6. 内外盘期货市场的介绍(一)
  7. rounded-{0 | top | right | bottom | left | circle } 边角半径设置 - bootStrap4常用CSS笔记(2019-05-16 09:38)...
  8. Alpha版本冲刺(二)
  9. 浏览器字体和html字体,如何正确设置兼容浏览器的中文字体
  10. 超高精度时间频率同步及其应用