Android PMS的理解
一、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的理解相关推荐
- Android 系统(239)---Android PMS的创建过程
Android PMS的创建过程 ------转自 刘望舒 刘望舒 前言 PMS的创建过程分为两个部分进行讲解,分别是SyetemServer处理部分和PMS构造方法.其中SyetemServer ...
- Android Activity的理解
Android Activity的理解 Activity 生命周期的四个状态 Activity的生命周期分为运行.暂停.停止.销毁四个状态. 运行状态:该Activity生命开始,Activity在前 ...
- android 背光灯分析,Android灯光系统--深入理解背光灯
Android灯光系统--深入理解背光灯 一.怎么控制背光灯(简述) APP将亮度值写入数据库 线程检测数据库的值是否发生变化 这种机制成为"内容观察者"--contentObse ...
- android handler的理解
android handler的理解 在看handler源码前,我一直以为google构造handler的目的是方便开发者在其他线程中 调用执行主线程的方法或者在主线程中调用执行其他线程的方法.看完源 ...
- Android系统分区理解及目录细解
Android系统分区 分区种类 Android 通常有以下分区: System分区: 就是我们刷ROM的分区 Data分区: 分区就是我们装APK的分区 Catch分区:是缓存分区 SDCard ...
- Android回调函数理解
Android回调函数理解,比如我用一个activity去做显示下载进度的一个进度条,但是下载是另外一个B类来做的,这个时候我Activity获取下载的进度就可以提供一个回调接口,然后让下载类来回调就 ...
- Android—PMS: PackageInstaller到PMS
PackageManager 与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能.PackageManager是 ...
- Android之最好理解的Binder机制
转载:http://weishu.me/2016/01/12/binder-index-for-newer/ Binder学习指南 发表于 2016-01-12 | 92条评论 | 3 ...
- Android PMS运行规则
前面介绍了pm命令如何使用,从侧面也反应出了PMS提供了哪些功能.那么在真正分析源码之前,还要了解一下PMS的一些默认规则. 本文主要介绍与PMS相关的目录与文件,以及PMS操作它们的规则. APK文 ...
最新文章
- 8 月--菜鸟吐槽日志
- GUI实战|Python做一个文档图片提取软件
- 基于QoE的实时视频编码优化:低功耗,低延时,高质量
- body curl 设置post_curl 命令详解
- Very Deep Convolutional Networks for Large-scale Image Recognition(vggnet)
- Nginx反向代理之HTTP 请求头中的 X-Forwarded-For
- 理解mini-batch、Momentum、RMSpror、Admin优化算法
- handbook/CentOS/使用免费SSL证书让网站支持HTTPS访问.md
- [c#] HttpContext.Cache和AppFabric的性能对比
- ES6学习笔记三(字符串)
- php+美图秀秀,美图秀秀头像编辑器的使用? thinkphp+七牛方案
- arcgis中 shift数据重新定义投影_【更新85篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
- DirectX 3D图形
- 关于HTML学习重点-绝对布局和相对布局总结
- STM32学习过程一
- jquery图片放大镜插件—jqzoom
- 利用PopButton实现类似Path的点聚式导航
- 局域网安全之ARP攻击
- 如何用 AI 实现视频结构化管理?
- 读书笔记{11} VLAN及其在生产中的应用
热门文章
- 卫星遥感—地块/边界提取相关论文
- 儿童成长曲线 (WHO标准)
- HF_装饰者模式(Decorator_Pattern)_20200308
- 安装 Linux mint后的一些设置
- 阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
- 内外盘期货市场的介绍(一)
- rounded-{0 | top | right | bottom | left | circle } 边角半径设置 - bootStrap4常用CSS笔记(2019-05-16 09:38)...
- Alpha版本冲刺(二)
- 浏览器字体和html字体,如何正确设置兼容浏览器的中文字体
- 超高精度时间频率同步及其应用