Android源码分析-pm命令的实现,列出包名pm list package,列出系统库pm list libraries

adb的adb shell pm list packages命令用来查看当前设备app应用包 无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 adb shell pm list packages [options] <FILTER>打印所有软件包,可选择只打印软件包名称中包含<FILTER>的软件包。不使用参数:adb shell pm ... 阅读详情

pm,即package manager, 还记得Android Framework层的PackageManager吗?利用PackageManager,可以访问到PackageManagerService。

本篇分析pm命令的源码,与“Android源码分析-am命令的实现”形成姊妹篇。

pm命令的使用:

一个简单的pm命令: 列出已经安装的第三方packagename(包名)

$ pm list package -3
$ pm list package -3                                                                              
package:com.test.mydemofrag2
package:com.example.myapp
package:com.test.mytestapp

pm命令的用法:

再看一个例子: 列出系统库

 

pm源码分析:

源码位置:

frameworks/base/cmds/pm

 

Pm类(Pm.java)就是pm命令的代码实现,我们主要来分析这个java文件。

Pm类的主要数据成员和部分方法:

数据成员:

IPackageManager mPm; //即PackageManager在client端的实例,用于与PackageManagerService通过binder进行通信,主要功能都是通过它来实现;

private WeakHashMap<String, Resources> mResourceCache
        = new WeakHashMap<String, Resources>();//资源文件缓存

private String[] mArgs;//pm命令的参数

方法:

 

 1. run方法:

初始化mPm以及进行命令行解析。

初始化mPm:

mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));

2. runListLibraries方法:

获取系统库(即jar包,而非so)

String[] rawList = mPm.getSystemSharedLibraryNames();

3.runListPackages:列出包名

以pm list package -3为例:

final List<PackageInfo> packages = getInstalledPackages(mPm, getFlags);

            int count = packages.size();
            for (int p = 0 ; p < count ; p++) {
                PackageInfo info = packages.get(p);
                if (filter != null && !info.packageName.contains(filter)) {
                    continue;
                }
                final boolean isSystem =
                        (info.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0;
                if ((!listDisabled || !info.applicationInfo.enabled) &&
                        (!listEnabled || info.applicationInfo.enabled) &&
                        (!listSystem || isSystem) &&
                        (!listThirdParty || !isSystem)) {
                    System.out.print("package:");
                    if (showApplicationPackage) {
                        System.out.print(info.applicationInfo.sourceDir);
                        System.out.print("=");
                    }
                    System.out.print(info.packageName);
                    if (listInstaller) {
                        System.out.print("  installer=");
                        System.out.print(mPm.getInstallerPackageName(info.packageName));
                    }
                    System.out.println();
                }
            }

mPm.getInstallerPackageName(info.packageName), 用于获取package list。

 可见,主要功能都是通过mPm来实现的,而mPm真正的实例是ApplicationPackageManager:

final class ApplicationPackageManager extends PackageManager {

      ......

}

PackageManager是抽象类,ApplicationPackageManager是具体的实现类。

 


Android 10 通知-源码解析 /frameworks/base/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java //通知弹出屏幕 106 /** 107 * Set up screenshot channel, respecting any previously committed user settings on legacy 108 * channel. 109 * @return 110 . 阅读详情

相关推荐

pm list相关命令汇总

【代码】pm list相关命令汇总。

无法支撑我那丰满的欲望和消瘦的理想 682

adb shell pm list packages 的一些用法

1.查看当前连接设备或者虚拟机的所有包 abd shell pm list packages 2.只输出系统的包 adb shell pm list packages -s 3.输出所有第三方包 adb shell pm list packages -3 4.输出包和包相关联的文件(安装路径) adb shell pm list packages -f 5.输出包和安装信息(安装来...

Framework-coder的博客 1万+

宝塔面板 python管理器2.0安装Mrdoc

自从python管理器从1.9升级2.0后,导致原教程不能使用。 故关于2.0新开教程如下。 关于python管理器2.0 最大的区别在于: python管理器2.0不再需要进入虚拟环境,直接在当前环境进行操作,但是需要指定python路径及pip路径。 1、新建mrdoc工程目录,下载源码: 新建目录【mrdoc】,进入mrdoc目录,并在宝塔ssh或或远程ssh中执行 ,下载源码 git clone https://gitee.com/yang_lite/MrDoc.git .

debj031634的专栏 5993

adb 命令

8.adb shell pm list packages -u:只输出包和未安装信息(安装来源)7.adb shell pm list packages -i:只输出包和安装信息(安装来源)5.adb shell pm list packages -s:只输出系统的包。3.adb shell pm list packages -d:输出禁用的包。4.adb shell pm list packages -e:输出启用的包。.adb shell pm list packages -3:只输出第三方包。

azhangyi188的专栏 2136

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 755

问题:dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)

 1. 问题:Ubuntu安装软件的过程中出现依赖项的问题 “E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).” 按照指示执行如下两条命令都没有解决问题。 sudo apt-get -f install sudo apt-get --fix-broken ...

gloria_littlechi的博客 2万+

Android开发-使用pm命令进行package的管理,包括apk的安装和卸载(pm install && pm uninstall)

pm全称是package manager,是一个可执行程序。顾名思义,pm命令用来进行package的管理,例如安装apk,卸载apk,列出所有的应用的包名,列出权限等。

记录和分享程序人生的点点滴滴 6834

内存优化--LOGBACK导致内存告警

一.故事背景 由于开辟新市场需要,开发了新的项部署在海外平台,其中最消耗内存的功能是消费kafka消息(最开始预计一天有1千万的量),部署完之后运行一段时间发现出现内存告警问题。 二.分析问题 出现内存告警,(新项目是低配置机器 2C4G * 2台)第一个念头是去查看堆空间设置的情况,看到jvm启动命令中堆空间都是直接指定大小,说明问题不是出在堆空间 -Xmx3g -Xms3g 先不管这些,去查看总的内存使用情况,发现总的内存空间使用将近有92% = 3.68G,那么这多出来使用的0.6

qq_33199919的博客 6052

Android-Framework pm list packages命令查看当前设备app包名

不使用参数:adb shell pm list packages,打印设备/模拟器上的所有软件包。7、使用--user参数:根据用户id查询用户的空间的所有包,USER_ID代表当前连接设备的顺序,从零开始。6、使用-u参数:只输出包和未安装包信息(安装来源)5、使用-i参数:只输出包和安装信息(安装来源)1、使用-f参数:输出包和包相关联的文件。4、使用-3参数:只输出第三方的包。2、使用-d参数:只输出禁用的包。3、使用-e参数:只输出启用的包。4、使用-s参数:只输出系统的包。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 1272

微信小程序 - 真机调试调用接口报错{errno: 600001, errMsg: “request:fail -102:net::ERR_CONNECTION_REFUSED},真机运行测试请求异常

微信小程序,真机,调试测试,运行报错,API接口,服务器接口都报错了,小程序报错errno: 600001,小程序报错request:fail -102:net::ERR_CONNECTION_REFUSED,真实手机打开接口全都失效了,微信小程序真机测试失败,微信小程序{errno: 600001, errMsg: "request:fail -102:net::ERR_CONNECTION_REFUSED"},详细解决方法,https,服务器SSL证书,无法解决,服务器更换SSL证书,接口地址改了也不行

🏆 前端领域优质创作者 1万+

【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛D题数学建模竞赛思路解析摘要:本文针对美赛D题提供系统性解决方案,提出四层建模框架(数据层、机理层、模型层、决策层),强调逻辑闭环比模型复杂度更重要。包含通用建模步骤:指标体系构建、状态评估、动态预测和策略优化,并给出Python基础代码框架。论文建议采用七段式结构,突出从现实问题到决策方案的完整闭环。核心在于通过数据驱动方法揭示问题规律,结合多源数据整合、系统行为建模和风险评估,最终形成可落地的决策建议,体现数学建模解决实际问题的能力。

一键难忘的博客 1083

Android-Framework pm list packages和pm install返回指定应用信息

1、pm list packages -3 返回详细应用信息;2、pm install 返回包名和启动Activity。注:Android10 和Android13有些差异,代码位置不变,参照修改即可。可以使用pm工具来执行应用的安装和查询应用宝的信息、系统权限、控制应用。pm工具为包管理(package manager)的简称。三、pm命令对应的源码位置如下。高通 Android 13。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 1373

YOLO+OpenClaw缺陷检测智能体 | 低代码工业质检自动化方案 | 含YOLO模型训练/智能体集成/任务全流程,支持离线日报/预警/趋势分析,解决实时性瓶颈问题(下篇)

某PCB板制造商需要对生产线上的PCB板进行缺陷检测,主要检测划痕、凹坑、污渍和裂纹等缺陷。原有人工检测方式效率仅为200件/小时,漏检率达5%,且检测人员长期工作易疲劳。

qq_36130719的博客 206

android开发命令

pm list package 此时则显示所有已经安装的包名。 pm list package -f 也显示associated文件所在目录(即保存的APK文件)

温柔一刀 316

【QT/C++】事件过滤器之基于重写 eventFilter 方法的多种常见应用场景及实现

Qt事件过滤器通过重写eventFilter方法实现多种实用功能:1)鼠标事件处理(点击全选文本、禁用滚轮、悬停提示);2)键盘事件处理(输入内容限制、快捷键提交);3)焦点事件处理(自动弹出下拉框、实时验证);4)绘图事件处理(自定义控件绘制);5)窗口事件处理(防止意外关闭、尺寸限制)。事件过滤器提供非侵入式的事件处理方案,相比传统子类化方式更灵活,通过installEventFilter安装到目标控件即可实现各种交互增强功能。

yuhuasheng1997的博客 1484

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

包管理之pm命令

Android系统提供了pm命令,可以在一定程度上为手机系统开发者提供了便利。本文会简单介绍相关的文件和本人经常使用的命令。 一、pm在手机中的位置           /system/bin/pm         -rwxr-xr-x root     shell         191 2014-01-06 12:44 pm 二、相关文件     /frameworks/bas

y658t的专栏 3729

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android 应用包名的定义 & pm list packages查询的包名

如何确定adb查询应用时使用的包名?

。 1432

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Pm命令用法

一、Pm命令 1.1 命令列表 命令格式: pm <command> 命令列表: 命令 功能 实现方法 list packages 列举app包信息 PMS.getInstalledPackages

wq892373445的博客 1861

深入解析adb shell pm list packages | grep命令:原理、应用与性能优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94959702的博客 447

ADB之adb shell pm list packages

1.adb shell pm list packages:打印连接设备上所有软件包 2.adb shell pm list packages -f :输出包和包所在位置 3.adb shell pm list packages -d:输出禁用的包 4.adb shell pm list packages -e:输出启用的包 5.adb shell pm list packages -s:只输出系统的包 6.adb shell pm list packages -3:只输出第三方包 7.adb shell p

qq_39172055的博客 2648

adb shell pm(系统服务:package)

adb shell pm

深度安全实验室 4762

Android adb命令行调试技巧

调试的时候,需要启动应用或者发送广播,每个操作都写代码执行费时费力,用命令行操作的话就方便多了。 记录下常用的一些操作。 串口环境直接敲命令。 adb 环境需要在命令前加上 adb shell 。 1.am类 1.1 启动Activity 根据目标Activity定义的 action 启动, am start -a activity_action 根据完整的包名类名启动, am start -n 包名/类名 1.2 启动service 根据目标service定义的 action 启动, am s

weixin_44021334的博客 1789

adb打开packages_adb shell pm list packages 命令

abd shell pm list packages ####查看当前连接设备或者虚拟机的所有包adb shell pm list packages -d #####只输出禁用的包。adb shell pm list packages -e #####只输出启用的包。adb shell pm list packages -s #####只输出系统的包。adb shell ...

weixin_29159995的博客 776

adb之pm命令用法

adb之pm命令用法

似霰的博客 1884

PM命令分析

1, PM命令 命令格式: pm   命令列表: 命令 功能 实现方法 list packages 列举app包信息 PMS.getInstalledPackages install [options] 安装应用 PMS.installPackageAsUser

Jack的博客 3201
上一篇: Android源码分析-am命令的实现
下一篇: Python3-word文档操作(一):利用python创建word文档,并且设置标题和正文的内容,设置字体样式
liranke
博客等级 码龄20年 4939粉丝 594原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值