Android PMS的理解

Android PMS的理解一 PMS 的作用 PackageManag 是 Android 系统核心服务之一 主要负责各种 APK 的安装 卸载 优化和查询 二 PMS 启动流程简单的将其分为以下几个步骤 SystemServer 通过 PMS 的 main 方法启动 PMS PMS 构造方法中初始化 Settings 扫描各个系统目录下 APP 相关信息具体步骤 1 在 SystemServer 中启动 PackageManag main2 newPackageMa

一、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 
   
   
     pm revoke 
     
      
     
    
  

授权和取消是针对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] 
   
  
  • 清除应用数据

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

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

pm hide PACKAGE_OR_COMPONENT pm unhide PACKAGE_OR_COMPONENT 

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

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

pm set-install-location 参数 package_name pm get-install-location package_name
  • 查看当前系统user信息

pm list users 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203232.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:17
下一篇 2026年3月19日 下午10:18


相关推荐

  • python3+Scrapy爬虫实战(一)—— 初识Scrapy

    python3+Scrapy爬虫实战(一)—— 初识Scrapy目录目录初识Scrapy开发环境创建项目创建爬虫项目结构图创建Item分析HTML爬取网页Markdown及扩展表格定义列表代码块脚注目录数学公式UML图:离线写博客浏览器兼容初识Scrapy本人是一名Scrapy的爱好者和初学者,写这文章主要是为了加深对Scrapy的了解,如果文章中有写的不对或者有更好的方式方…

    2022年6月26日
    32
  • Manus AI APP最新版

    Manus AI APP最新版

    2026年3月15日
    3
  • .Net审计之.Net Json反序列化

    .Net审计之.NetJson反序列化前言偶然下遇到一个.NET下有意思的Json反序列化点,记录一下反序列化内容,直入主题。.NetJson常见序列化与反序列化NET中常见的数据格

    2021年12月13日
    55
  • qlineedit自动补全_qlineedit只能输入数字

    qlineedit自动补全_qlineedit只能输入数字转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=referral显示密码显示密码时,利用lineedit-password-character属性更改密文显示字符内容。QLineEdit[echoMode=”2″]{lineedit…

    2025年6月25日
    3
  • 普罗米修斯 软件_Prometheus普罗米修斯

    普罗米修斯 软件_Prometheus普罗米修斯Prometheus普罗米修斯是一款针对苹果用户专属打造的苹果手机系统降级工具。很多的果粉更新了ios10以后觉得系统无比的卡,觉得部分功能比较之前的系统差的太多了,就用Prometheus普罗米修斯工具进行系统降级,从而获得更好的使用体验。感兴趣的欢迎到西西下载。Prometheus普罗米修斯详情介绍:Prometheus不只是一款GUI工具,它将“nonceenabler”、“futurere…

    2022年7月19日
    35
  • Axure 8.1.0.3372亲测可用授权码

    Axure 8.1.0.3372亲测可用授权码授权人 Koshykey wTADPqxn3KCh Ii6xYkey wTADPqxn3KCh Ii6xY 有收到很多私信以上授权码有发现不可用的可以使用下面最新授权 被授权人 zdfans com

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号