Android pm 命令详解

2023-10-27

一、pm命令介绍与包名信息查询

1.pm命令介绍

pm工具为包管理(package manager)的简称

可以使用pm工具来执行应用的安装和查询应用宝的信息、系统权限、控制应用

pm工具是Android开发与测试过程中必不可少的工具,shell命令格式如下:

pm <command>

2.包名信息查询

shell模式下:

pm list packages [options] [FILTER]

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

参数

描述

-f 显示每个包的文件位置
-d 使用过滤器,只显示禁用的应用的包名
-e 使用过滤器,只显示可用的应用的包名
-s 使用过滤器,只显示系统应用的包名
-3 使用过滤器,只显示第三方应用的包名
-i 查看应用的安装者

 

二、权限信息查询

1.权限基础

权限的组成:权限的名称,属于的权限组,保护级别

例如:

<permission android:description="string resource"
android:icon="drable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>

protectionLevel

说明

normal 表示权限是低风险的,不会对系统,用户或其他应用程序造成危害
dangerous 表示权限是高风险的,系统将可能要球用户输入相关信息,才会授予此权限
signature 表示只有当应用程序所用数字签名与声明引用权限的应用程序所用签名相同时,才能将权限授予给它
signatureOrSystem 需要签名或者系统级应用(放置在/system/app目录下)才能赋予权限
system 系统级应用(放置在/system/app目录下)才能赋予权限
自定义权限 应用自行定义的权限

 

2.权限查询

shell模式下:

pm list permission-groups

#打印所有已知的权限组

pm list permissions [options] [GROUP]

#打印权限

参数可以组合使用例如:pm list permissions –g -d

参数

说明

-g 按组进行列出权限
-f 打印所有信息
-s 简短的摘要
-d 只有危险的权限列表
-u 只有权限的用户将看到列表 
用户自定义权限

 

3.授权与取消

注意:目标apk的minSdkVersion、targetSdkVersion也必需为23及以上

子命令

说明

grant <package_name> <permission> 授予应用权限许可。必需android6.0(API级别23)以上的设备
revoke <package_name> <permission> 撤销应用权限。必需android6.0(API级别23)以上的设备

例如:

需要注意的是所谓的授权是指你的apk里面已有的权限进行授权,相当于启用的概念

adb shell pm grant <packageName> android.permission.READ_CONTACTS
#授权( 取消权限同理)

 

三、其他信息查询

1.测试包与apk路径查询

pm

子命令

参数

说明

list instrymentation 无参数 列出所有的instrumentation测试包
-f 列出apk文件位置
<target_package> 列出某个app的测试包
path <package> <package> 打印指定包名的apk路径

例如:

adb shell pm list instrumentation

adb shell pm list instrumentation TARGET_PACKAGE

adb shell pm path PACKAGE_NAME

2.系统功能与支持库查询

pm

子命令

说明

list feature 打印系统的所有功能 
列出所有硬件相关信息
list libraries 打印当前设备所支持的所有库

例如:

adb shell pm list feature

3.打印包的系统状态信息

pm dump PACKAGE

打印给定的包的系统状态

打印内容

说明

DUMP OF SERVICE package 打印服务信息
DUMP OF SERVICE activity 打印activity信息
DUMP OF SERVICE meminfo 打印当前内存使用信息
DUMP OF SERVICE procstats 打印系统内存使用与一段时间内存汇总
DUMP OF SERVICE usagestats 打印服务器使用状态信息
DUMP OF SERVICE batterystats 打印电池状态信息

例如:

adb shell pm dump PACKAGE_NAME

 

四、安装与卸载

1.安装

pm install [-lrtsfd] [-i PACKAGE] [PATH]

通过指定路径安装apk到手机中(与adb install不同的是adb install安装的.apk是在你的电脑上,而pm install安装的apk是存储在你的手机中)

参数

说明

-l 锁定应用程序
-r 重新安装应用,且保留应用数据
-t 允许测试apk被安装
-i <INSTALLER_PACKAGE_NAME> 指定安装包的包名
-s 安装到sd卡
-f 安装到系统内置存储中(默认安装位置)
-d 允许降级安装(同一应用低级换高级)
-g 授予应用程序清单中列出的所有权限(只有6.0系统可用)

首先将test.apk文件push到手机目录中比如/data/local/tmp

adb shell pm install /data/local/tmp/test.apk           #安装

adb shell pm install –r /data/local/tmp/test.apk       #重新安装

2.卸载

pm uninstall [options] <PACKAGE>

#卸载应用

参数

说明

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

 

五、控制命令

1.清除应用数据

pm clear <PACKAGE_NAME>

 

2.禁用和启用应用

pm

只有系统应用才可以用,第三方应用不行

子命令

说明

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

 

3.隐藏与恢复应用

pm

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

子命令

说明

hide PACKAGE_OR_COMPONENT 隐藏package或component
unhide PACKAGE_OR_CONPONENT 恢复可见package或component

 

4.控制应用的默认安装位置

pm

需要root权限

子命令

说明

set-install-location <LOCATION> 更改默认的安装位置: 
0:自动-让系统决定最好的位置 
1:内部存储-安装在内部设备上的存储 
2:外部存储-安装在外部媒体 
注:只用于调试,不要瞎搞
get-install-localtion 返回当前的安装位置 



对应上面的数字说明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android pm 命令详解 的相关文章

  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include
  • 尝试 SSH 时设备的 ioctl 不合适

    我正在尝试通过 SSH 连接几台服务器并尝试获取sudo l每个服务器的输出 下面是我正在执行的脚本 bin bash serverlist tmp servers while IFS read r server netgroup user
  • :: 右侧的非法标记

    我有以下模板声明 template
  • 命令行参数中的“-”(破折号)有什么魔力?

    例子 创建 ISO 映像并将其直接刻录到 CD mkisofs V Photos r home vivek photos cdrecord v dev dev dvdrw 更改到上一个目录 cd 侦听端口 12345 并解压发送到该端口的数
  • 使用 gatttool 或 bluepy BLE 订阅通知

    我正在使用 bluepy 编写一个程序 用于监听蓝牙设备发送的特征 我还可以使用任何库或语言 唯一的限制是在 Linux 上运行 而不是在移动环境中运行 似乎仅在移动设备中广泛使用 没有人在桌面上使用 BLE 使用 bluepy 我注册了委
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • 使用 linux perf 工具测量应用程序的 FLOP

    我想使用 perf Linux 性能计数器子系统的新命令行接口命令 来测量某些应用程序执行的浮点和算术运算的数量 出于测试目的 我使用了我创建的一个简单的虚拟应用程序 请参见下文 因为我找不到任何为测量 FP 和整数运算而定义的 perf
  • 操作系统崩溃的常见原因[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解 操作系统崩溃 不限于Windows崩溃 最常见的技术原因 从操作系统编程的角度 有哪些 我正在寻找一个不像 打开太多应用
  • 当我通过 shell 脚本创建 .txt 文件时,为什么文件名末尾出现问号? [复制]

    这个问题在这里已经有答案了 我正在编写一个 shell 脚本 我应该在其中创建 1 个文本文件 当我这样做时 文件名末尾出现一个问号 是什么原因 我正在 bash 脚本中尝试以下方法 1 grep ERROR a1 gt text txt
  • 是否有我可以运行的操作系统命令来确定是否在基于 Xen 的虚拟机内运行

    我可以在基于 Xen 的虚拟机中运行一个操作系统命令来告诉我它是一个虚拟机而不是物理机 我听说内核对此有一些自我意识智能 例如就像 ps 输出中的额外列之类的 我知道 vmstat 提供了 st 列 但我在运行 Linux 内核 2 6 1
  • 在Linux伪终端中执行从一个终端发送到另一个终端的字符串

    假设我有一个终端 其中 tty 的输出是 dev pts 2 我想从另一个终端向第一个终端发送命令并执行它 使用 echo ls gt dev pts 2 仅在第一个终端中打印 ls 有没有办法执行字符串 不 终端不执行命令 它们只是数据的
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 跟踪 pthread 调度

    我想做的是创建某种图表 详细说明 Linux 中 两个 线程的执行情况 我不需要查看线程的作用 只需查看它们何时被安排以及持续多长时间 基本上是一条时间线 在过去的几个小时里 我一直在互联网上搜索跟踪 pthread 调度的方法 不幸的是
  • 为什么使用Python的os模块方法而不是直接执行shell命令?

    我试图了解使用Python的库函数执行特定于操作系统的任务 例如创建文件 目录 更改文件属性等 背后的动机是什么 而不是仅仅通过执行这些命令os system or subprocess call 例如 我为什么要使用os chmod而不是
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • 如何使用libaudit?

    我试图了解如何使用 libaudit 我想接收有关使用 C C 的用户操作的事件 我不明白如何设置规则 以及如何获取有关用户操作的信息 例如 我想获取用户创建目录时的信息 int audit fd audit open struct aud
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • 远程linux服务器到远程linux服务器大型稀疏文件复制 - 如何?

    我有两台 CentOS 5 4 服务器 每台服务器上都安装了 VMware Server 假设我始终对 vmware 虚拟机使用稀疏文件 将虚拟机文件从一台服务器复制到另一台服务器的最可靠 最快速的方法是什么 虚拟机的文件复制起来很痛苦 因
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla

随机推荐

  • C++的STL库常用API--list

    list的简介 list是一个双向链表容器 可高效地进行插入删除元素 list不可以随机存取元素 所以不支持at pos 函数与 操作符 list使用之前的准备 include
  • Android 代码混淆

    Android混淆最佳实践 1 混淆配置 因为开启混淆会使编译时间变长 所以debug模式下不开启 我们需要做的是 1 将release下minifyEnabled的值改为true 打开混淆 2 加上shrinkResources true
  • 机器学习——LR(线性回归)、LRC(线性回归分类)与人脸识别

    忆如完整项目 代码详见github https github com yiru1225 转载标明出处 勿白嫖 star for projects thanks 目录 系列文章目录 一 LR的概念 原理与LR用于简单数据的预测 1 LR简介
  • oracle杂记---运维常用

    查看索引是否被使用 绝不妥协绝不低头 博客园 ORACLE 动态执行SQL语句 Eric Zhai ITeye博客
  • 程序猿关注的微信公众号和网站

    36氪 wow36kr 功能介绍 36氪 36Kr com 是中国领先的科技新媒体 我们报道最新的互联网科技新闻以及最有潜力的互联网创业企业 账号主体 北京协力筑成传媒科技有限公司 商标保护 氪 36 硅发布 guifabucom 功能介绍
  • ios 浏览器can't find variable:wx完美解决

    问题描述 通过以下插件发现报错 can t find variable wx ios 浏览器 wx config debug false appId appId timestamp timestamp nonceStr nonceStr s
  • 虚拟机基于寄存器基于栈的概念和区别

    基于寄存器与基于栈的虚拟机 什么是虚拟机 虚拟机是借助于操作系统对物理机器的一种模拟 但是我们今天所讲述的虚拟机概念比较狭义 与vmware或者virtual box不同 而是针对具体语言所实现的虚拟机 例如在JVM或者CPython中 J
  • HTML+CSS+JS实现简单计算器

    本文运用前端代码实现一个简单的计算器界面 并通过JS实现了基本的运算功能 加 减 乘 除 清屏 退格 取余 取倒 1 编写前端界面
  • qt post上传文件

    QNetworkAccessManager的post接口可以接收多种参数 一般使用QByteArray发送普通文本请求 如果要带文件内容做参数 就需要用到QHttpMultiPart类型的参数 封装formData 这里定义的是一个stat
  • 最大连续子段和

    最长公共子序列 题目描述 给出一个长为n的数列 a1 a2 an 求和最大的连续子序列 即找到一对 i j i lt j 使ai ai 1 aj的和最大 输出这个和 输入格式 第一行为正整数n 第二行n个用空格分开的整数 表示a1 a2 a
  • Ubuntu20.04+RTX3060+Nvidia驱动+cuda11.1+cudnn8.0.5

    Ubuntu20 04 RTX3060 Nvidia驱动配置过程 记录一下踩那么多坑之后的成功步骤 我下的Ubuntu的gcc版本为9 4 0 step1 apt get换源及更新 1 备份原本的源 cd etc apt cp source
  • 一个fb账号创建几个bm

    Facebook Business Manager 商务管理平台 是专为管理您的Facebook页面和广告帐户而设计的工具 通过使用商务管理平台 功能如下 管理对您的Facebook页面和广告帐户的访问权限 查看谁有权访问您的网页和广告帐户
  • Spring中最简单的过滤器和监听器

    1 过滤器概念引入 Filter也称之为过滤器 它是Servlet技术中最实用的技术 Web开发人员通过Filter技术 对web服务器管理的所有web资源 例如Jsp Servlet 静态图片文件或静态 html 文件等进行拦截 从而实现
  • UE4 蓝图之间交互

    小白欢迎评论 共同探讨 共同进步 获取其他蓝图 及蓝图内属性 的方法 有几种方法 下面来依次记录一下 根据不同情况可以适当选取一种合适的方法 1 两个普通蓝图类之间的直接交互 在蓝图类中申请公开变量 然后在外部赋值 即可交互 剩下就可以调用
  • 函数模板、模板函数,完全特例化、部分特例化

    一 函数模板 1 定义 建立一个通用函数 它所用到的数据的类型 包括返回值类型 形参类型 局部变量类型 可以不具体指定 而是用一个虚拟的类型来代替 实际上是用一个标识符来占位 等发生函数调用时再根据传入的实参来逆推出真正的类型 2 举例 t
  • accept函数笔记

    include
  • markdown 文本内跳转,生成目录

    生成目录的方法 一 数据集获取及预处理 1 1 数据集导入 1 1 2数据集划分 1 2 二 binary classification 二元分类器 2 自己实现交叉验证函数 2 1 confusion matrix 2 2 precisi
  • MySQL数据库的导入与导出

    1 数据库的导入 1 1 新建一个数据库名称 create database 数据库名 students 如下 create database students 1 2 使用use命令进入该数据库 如下 use students 1 3 导
  • 监控流媒体服务器的搭建和使用

    需求的提出 海康 大华 宇视等视频监控系统 都有自己的流媒体服务器平台 为什么要还需要通用的流媒体服务器产品呢 这个问题可以从几个方面回答 1 经济性 传统监控厂商的流媒体服务器 由于主要面向城市建设和大型安防项目 往往造价和报价相对较高
  • Android pm 命令详解

    一 pm命令介绍与包名信息查询 1 pm命令介绍 pm工具为包管理 package manager 的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息 系统权限 控制应用 pm工具是Android开发与测试过程中必不可少的工具 sh