Android adb命令中pm工具的作用及用法说明
作者:leon1741 发布时间:2022-05-27 23:38:42
玩安卓的人都知道adb,玩adb的人都知道install和uninstall,但是为什么adb shell pm install packagename命令中间要有一个pm?pm是什么意思,起什么作用的?这个问题恐怕不是每个人都能回答的出来的。
pm工具为包管理(package manager)的简称,可以使用pm工具来执行应用的安装和查询应用包的信息、系统权限、控制应用。pm工具是Android开发与测试过程中必不可少的工具,通常放在/system/bin/下。
在命令行模式下输入pm,系统给出的帮助手册如下:
usage: pm [list|path|install|uninstall]
pm list packages [-f] [-d] [-e] [-u] [FILTER]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm list libraries
pm path PACKAGE
pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH
pm uninstall [-k] PACKAGE
pm clear PACKAGE
pm enable PACKAGE_OR_COMPONENT
pm disable PACKAGE_OR_COMPONENT
pm setInstallLocation [0/auto] [1/internal] [2/external]
....略去....
由此可见,pm工具单独使用时是没有意义的,它必须与相关命令一起使用,置于相应命令之前。而其他命令如果没有加上pm的前缀,则也同样不能使用。比如,你可以在命令行输入一个list packages命令试试,系统会提示“list: permission denied!”也就是说,任何与应用包相关的命令必须是pm + “具体命令”的格式才有效,否则是无效的!
OK,说清了pm工具的基本用法,那么下面我们就来分析一下pm工具中常用的一些命令(所谓常不常用,是指我个人感觉,如有发现遗漏,请告知本人 ^_^):
一、查询类
list packages:列出设备中已经安装的所有应用包(包括系统应用和用户应用);
list features:列出所有硬件相关信息;
list libraries :列出当前设备支持的libs;
list users:列出系统上所有的users;
list permissions:列出所有已知的权限;
list ‘pkgname':列出指定包名的associated文件(APK存档文件)所在;
path ‘pkgname':查询package的安装位置。
二、操作类
install [-lrtsfd] [PATH]:安装命令;
** -l :锁定应用程序;
** -r:重新安装应用,且保留应用数据;
** -i:指定安装包的包名;
** -s:安装到sd卡;
** -f:安装到系统内置存储中(默认安装位置);
** -g:授予应用程序清单中列出的所有权限(只有6.0系统可用);
uninstall [options] ‘pkgname':卸载命令;
** -k:卸载应用且保留数据与缓存(如果不加-k则全部删除);
clear ‘pkgname' :对指定的package删除所有数据;
enable ‘pkgname' :使package或component可用。(如:pm enable “package/class”);
disable ‘pkgname' :使package或component不可用。(如:pm disable “package/class”);
grant ‘pkgname':授权给应用;
revoke ‘pkgname':撤销权限;
set-install-location ‘location':设置默认的安装位置。其中0:让系统自动选择最佳的安装位置。
1:安装到内部的设备存储空间。
2:安装到外部的设备存储空间;
get-install-location :返回当前的安装位置。返回结果同上参数选项;
create-user ‘USER_NAME' :增加一个新的USER;
remove-user ‘USER_ID' :删除一个USER;
补充知识:adb命令之pm hide 与 disable
pm disable <PACKAGE_OR_COMPONENT> :使package或component不可用。(如:pm disable "package/class")(disable了指定的package,但是getComponentEnabledSetting该package里的components依然是enable状态的。disable-user一样原理。)需要root权限。
等效代码:
getActivity().getPackageManager().
setApplicationEnabledSetting(getActivity().getPackageName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);//不杀死app,app进程终止后才会隐藏;0立即终止
pm hide <PACKAGE_OR_COMPONENT> :使package或component不可用。
hide | disable | |
getPackageManager().getInstalledPackages (PackageManager.GET_UNINSTALLED_PACKAGES); | 可见 | 可见 |
getPackageManager().getInstalledPackages (PackageManager.GET_DISABLED_COMPONENTS); | 不可见 | 可见 |
getPackageManager().getInstalledPackages(0); | 不可见 | 可见 |
pm lf | 不可见 | 可见 |
pm list package -d | 不可见 | 可见 |
pm list package -u | 可见 | 可见 |
设置-应用管理已下载 | 魅族安装app不可见 | 魅族安装app不可见 |
设置-应用管理已全部 | 魅族安装app不可见 | 魅族安装app不可见 |
am start | 不可用 | 不可用 |
来源:https://blog.csdn.net/leon1741/article/details/54933365


猜你喜欢
- 之前已经为大家介绍过利用Java实现带GUI的气泡诗词特效,本文将为大家介绍另一种方法同样也可以实现气泡诗词的效果。下面是示例代码impor
- C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声明)——构造函数、析
- 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对。这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好。但是在大量图片比对
- 秒杀功能秒杀场景现在已经非常常见了,各种电商平台都有秒杀的产品,接下来我们模拟一个秒杀的项目,最终能够确保高并发下的线程安全。界面比较简单,
- 题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将
- 1. 问题描述springboot的面世,成为Java开发者的一大福音,大大提升了开发的效率,其实springboot只是在maven的基础
- 客户端代码:/// <summary>/// 批量上传图片/// </summary>/// <param n
- ViewModel的创建方式在我们项目中, 引入了viewModel 做MVI 设计模式的组成部分,它是JetPack 组件库中的重要成员。
- 本文讲述了Android使用国内镜像在线更新SDK的方法。分享给大家供大家参考,具体如下:什么是Android SDK:SDK:(softw
- C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类。这个包包含于System.Text.RegularExpressions命
- 前言本文主要给大家介绍了关于Android中GridView布局整体居中的相关内容,是对于自己在项目中遇到问题的一个记录,分享出来供大家参考
- 本实例主要实现下面三个基本功能1、C#开发windows服务2、禁止QQ等程序运行3、为windows服务创建自动安装程序下面针对这三个基本
- 1.MyBatis简介MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的
- 本文实例讲述了Android亮屏和熄屏控制实现方法。分享给大家供大家参考,具体如下:一、概述我们的Android应用程序很多需要和亮屏和熄屏
- Failed to fectch URl
- 在处理模板时,可以由模板逻辑决定是否加载数据,以提高性能。在Spring Boot控制器中设置数据时,使用LazyContextVariab
- 1、Pull概述Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 X
- 一、代码先上代码(以下这段代码会有多种执行结果)@Testpublic void test_interrupted_thread() thr
- 本文实例分析了java遍历Map的几种方法。分享给大家供大家参考,具体如下:Java代码:Map<String,String>
- 这篇实例中有四个类,分别为CacheItem 缓存实体类CachePool 缓存池Student 学生实