dumpsys-package

ams和pms是android系统最重要的系统服务,本文解析dumpsys package命令,看哪些PMS相关的系统信息,数据结构是运行时可以查看的。

命令提示

console:/ # dumpsys package -h
Package manager dump options:
[-h] [-f] [--checkin] [cmd] ...
--checkin: dump for a checkin
-f: print details of intent filters
-h: print this help
cmd may be one of:
l[ibraries]: list known shared libraries
f[eatures]: list device features
k[eysets]: print known keysets
r[esolvers] [activity|service|receiver|content]: dump intent resolvers
perm[issions]: dump permissions
permission [name ...]: dump declaration and use of given permission
pref[erred]: print preferred package settings
preferred-xml [--full]: print preferred package settings as xml
prov[iders]: dump content providers
p[ackages]: dump installed packages
s[hared-users]: dump shared user IDs
m[essages]: print collected runtime messages
v[erifiers]: print package verifier info
d[omain-preferred-apps]: print domains preferred apps
i[ntent-filter-verifiers]|ifv: print intent filter verifier info
version: print database version info
write: write current settings now
installs: details about install sessions
check-permission <permission> <package> [<user>]: does pkg hold perm?
dexopt: dump dexopt state
compiler-stats: dump compiler statistics
service-permissions: dump permissions required by services
<package.name>: info about given package

AuthBlog:秋城https://www.cnblogs.com/houser0323

数据结构

命令 源码 关键字 释义
l[ibraries] mSharedLibraries Libraries: 所有库信息
f[eatures] mAvailableFeatures Features: 系统支持的feature
k[eysets] mSettings.mKeySetManagerService.dumpLPr() Key Set Manager: keyset信息
r[esolvers] IntentResolver.java#dump() Activity Resolver Table: 所有四大组件intent接收器信息
perm[issions] mSettings.dumpPermissionsLPr() Permissions: 所有权限信息
permission [name ...] mSettings.dumpPermissionsLPr() Permissions: 特定权限信息
pref[erred] PreferredIntentResolver#dump() Preferred Activities User launcher activity偏好信息
preferred-xml [--full] mSettings.writePreferredActivitiesLPr 生成xml
prov[iders] PackageParser.Provider mProviders.mProviders Registered ContentProviders: 所有ContentProvider信息
p[ackages] mSettings.dumpPackagesLPr() Packages: 所有package信息
s[hared-users] mSettings.dumpSharedUsersLPr() Shared users: 所有共享uid信息
m[essages] mSettings.dumpReadMessagesLPr()/dumpCriticalInfo() Settings parse messages 读系统packageSetting解析信息mReadMessages、读uiderrors.txt
v[erifiers] mRequiredVerifierPackage Verifiers: 需要验证的apk
d[omain-preferred-apps] PackageSetting#getIntentFilterVerificationInfo() App verification status: 域验证信息
i[ntent-filter-verifiers] mIntentFilterVerifierComponent Intent Filter Verifier: AppLink相关
version mSettings.dumpVersionLPr() Database versions: 数据库版本
write mSettings.writeLPr() 这是写操作用于替换packages.xml
installs mInstallerService.dump() Active install sessions: 活动中的install session信息
check-permission [] checkPermission() 返回值0表有;-1表无
dexopt dumpDexoptStateLPr() Dexopt state: 所有apk的dexopt信息
compiler-stats dumpCompilerStatsLPr() Compiler stats: 所有apk的编译器信息
service-permissions serviceInfo.permission Service permissions: 所有service的权限信息
<package.name> DumpState.OPTION_SHOW_FILTERS 特定apk的所有信息-最常用

常用操作

1.包名和apk名互查

$ dumpsys package com.android.systemui |grep -i path
codePath=/system/priv-app/SystemUI
resourcePath=/system/priv-app/SystemUI
path: /system/priv-app/SystemUI/SystemUI.apk

知道包名查路径还可以用pm path <package name>更方便,但是知道apk名称查包名就需要dumpsys了,如下

$ dumpsys package p |grep -B 5 SystemUI|grep Package
Package [com.android.systemui] (633b2ed):
pkg=Package{8e872f3 com.android.systemui}

2.查看系统支持的feature

pm list features命令作用相同

$ dumpsys package f
......
android.hardware.bluetooth
android.hardware.usb.host
......

3.查看apk权限信息

$ dumpsys package <package name>

打印中查找关键字

  • "declared permissions:"应用自定义权限
  • "requested permissions:"AndroidManifest.xml文件中所有request的权限
  • "install permissions:"安装时就赋予的权限
  • "runtime permissions:"运行时权限

4.查看apk的flag信息

查看某个apk的flag信息,如systemui

$ dumpsys package com.android.systemui |grep Flags
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION DEFAULT_TO_DEVICE_PROTECTED_STORAGE DIRECT_BOOT_AWARE PRIVILEGED ]
pkgFlags=[ SYSTEM HAS_CODE PERSISTENT ]

可以看到systemui是system系统应用也是persistent应用,如果要查找所有的system应用可以用pm list packages -s,查找所有PERSISTENT的应用呢,可以dumpsys package p然后在结果中过滤,除此之外还有另外两种方法dumpsys meminfologcat -b events |grep -i am_proc_start

总结

dumpsys是一个很强大的命令,大多数的系统信息都可以用它抓出来,当你想快捷获取系统信息又没有思路时,不妨尝试一下dumpsys,会有惊喜。

dumpsys package能轻松获取多数的PMS数据结构的值,还能替换更新packages.xml。

示例中也多次提到pm命令,这俩结合的话,有关PMS模块的大部分系统信息和操作都可以便捷实现,有效提高开发调试速度。

dumpsys-package的更多相关文章

  1. adb shell dumpsys package 查看versionCode

    adb shell dumpsys package +包名 输出可以查看包名 aapt dump xmltree xxx.apk AndroidManifest.xml 查看AndroidManife ...

  2. [Android] adb shell dumpsys的使用

    reference to :http://blog.csdn.net/g19920917/article/details/38032413 有两种方法可以查看service list: 1. adb ...

  3. adb shell dumpsys

    adb shell dumpsys activity activities -- class/packagename adb shell dumpsys batterystate --reset   ...

  4. 【转】adb shell dumpsys 命令

    adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名 需要列出当前运行的服务,可运行: adb shell dumpsys | findstr DUM ...

  5. 「Android」adb调试源码(针对dumpsys SurfceFlinger、trace.txt获取)

    首先对ADB作简单的阐述,接下来对adb shell dumpsys SurfaceFlinger服务的dump信息的查看.以及ANR问题如何获取trace文件并简单分析. -×*********** ...

  6. android dumpsys

    dumpsys dumpsys is a tool that runs on Android devices and provides information about system service ...

  7. adb shell dumpsys的使用

    该命令用于打印出当前系统信息,默认打印出设备中所有service的信息,可以在命令后面加指定的service name. 有两种方法可以查看service list: 1. adb shell dum ...

  8. Android dumpsys命令详细使用

    一.dumpsys命令介绍 1.命令说明 Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: adb shell dumpsys [system serbices] 2.系 ...

  9. adb shell dumpsys的用法

    一. 打印出设备中所有service的信息 zh@zh:~$adb shell dumpsys -l (字母l)zh@zh:~$adb shell service list 二.查询到运行的syste ...

  10. android中dumpsys命令使用

    转自:https://testerhome.com/topics/1462 adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名 需要列出当前运行的服 ...

随机推荐

  1. JUC强大的辅助类讲解--->>>CountDownLatchDemo (减少计数)

    原理: CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞.其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞), ...

  2. django 分页器 Paginator 基础操作

    基于下面这个分页器,说明常用的属性 from django.core.paginator import Paginator #导入Paginator类 from sign.models import ...

  3. SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  4. BUUOJ [CISCN2019 华北赛区 Day2 Web1]Hack World

    补一下这道题,顺便发篇博客 不知道今年国赛是什么时候,菜鸡还是来刷刷题好了 0X01 考点 SQL注入.盲注.数字型 0X02自己尝试 尝试输入1 赵师傅需要女朋友吗???随便都能有好吧 输入2 ?? ...

  5. Centos 7服务器搭建MySQL(mariadb)服务

    1.下载并安装MySQL yum install mariadb mariadb-server -y 2.启动MySQL systemctl start mariadb 3.对mariadb进行初始化 ...

  6. python爬虫(1)requests库

    在pycharm中安装requests库的一种方法 首先找到设置 搜索然后安装,蓝色代表已经安装 requests库中的get请求 与HTTP协议相对应,requests库也有七种请求方式. 获取ur ...

  7. PHP实现MySQL并发查询

    一般的,一个看似很简单的页面,一次http请求后,到达服务端,穿过Cache层,落到后台后,实际可能会有很多很多的数据查询逻辑!而这些查询实际是不相互依赖的,也即可以同时查询.比如各种用户信息,用户的 ...

  8. discuz-目录

    由于工作原因,开始学习discuz,0基础开发,学了一会总结了一些

  9. List of common SCSI KCQs

    Category Key ASC ASCQ Error Condition No Sense 0 00 00 No error 0 5D 00 No sense - PFA threshold rea ...

  10. [Inno Setup] 开机自启动

    [icons] Name: "{userstartup}\My Program"; Filename: "{app}\MyProg.exe"; Tasks:St ...