`
jgsj
  • 浏览: 975711 次
文章分类
社区版块
存档分类
最新评论

Android dumpsys工具分析

 
阅读更多

dumpsys工具使用

我们知道Android使用ServiceManager服务进程来管理系统所有的服务,在系统启动时,每个服务必须注册到ServiceManager进程中,那如何查看系统运行了那些服务呢?ServiceManager提供了listServices接口来罗列出系统注册的所有服务。Android提供了dumpsys工具来dump出所有的服务信息,通过以下命令可以查看系统注册的所有服务:

adb shell dumpsys
Currently running services:
SurfaceFlinger
country_detector
cpuinfo
dbinfo
device_policy
devicestoragemonitor
diskstats
drm.drmManager
dropbox
entropy
fm
gfxinfo
hardware
input
isms
location
lock_settings
meminfo
network_management
notification
package
permission
phone
power
samplingprofiler
scheduling_policy
search
sensorservice
serial
servicediscovery
sim_manager
simphonebook
...
-------------------------------------------------------------------------------
DUMP OF SERVICE SurfaceFlinger:
Visible layers (count = 4)

...

也可以dump指定服务信息:

adb shell dumpsys SurfaceFlinger
Visible layers (count = 4)
+ Layer 0x41ba5008 (com.android.settings/com.android.settings.SprdUsbSettings)
Region transparentRegion (this=0x41ba51e4, count=0)
Region transparentRegionScreen (this=0x41ba503c, count=0)
Region visibleRegionScreen (this=0x41ba5018, count=0)
z= 21005, pos=(0,0), size=( 480, 854), crop=( 0, 38, 480, 854), isOp
aque=1, needsDithering=0, invalidate=0, alpha=0x00, flags=0x00000001, tr=[1.00,
0.00][0.00, 1.00]
client=0x41c14ee0, identity=7
format= 2, activeBuffer=[ 480x 854: 480, 2], transform-hint=0x00, queued-
frames=0, mRefreshPending=0

...

dumpsys源码分析

dumpsys工具比较简单,就是调用ServiceManager服务的listServices来查询系统注册的所有服务,并且通过checkService接口来获取服务的Binder远程代理对象,使用每个服务的dump函数来打印该服务的相关信息。
frameworks\native\cmds\dumpsys\dumpsys.cpp
int main(int argc, char* const argv[])
{
    signal(SIGPIPE, SIG_IGN);
    //取得ServiceManager服务的远程Binder代理对象
    sp<IServiceManager> sm = defaultServiceManager();
    fflush(stdout);
    if (sm == NULL) {
		ALOGE("Unable to get default service manager!");
        aerr << "dumpsys: Unable to get default service manager!" << endl;
        return 20;
    }
    Vector<String16> services;
    Vector<String16> args;
    //如果命令行参数只有1个
    if (argc == 1) {
    		//使用ServiceManager服务的Binder远程代理对象查询所有的服务
        services = sm->listServices();
        services.sort(sort_func);
        args.add(String16("-a"));
    } else {
    		//添加命令行指定的服务及参数
        services.add(String16(argv[1]));
        for (int i=2; i<argc; i++) {
            args.add(String16(argv[i]));
        }
    }
    //根据服务名称查找服务对应的Binder代理对象,如果存在,打印该服务
    const size_t N = services.size();
    if (N > 1) {
        // first print a list of the current services
        aout << "Currently running services:" << endl;
        for (size_t i=0; i<N; i++) {
            sp<IBinder> service = sm->checkService(services[i]);
            if (service != NULL) {
                aout << "  " << services[i] << endl;
            }
        }
    }
    //调用服务的dump函数打印服务相关信息
    for (size_t i=0; i<N; i++) {
        sp<IBinder> service = sm->checkService(services[i]);
        if (service != NULL) {
            if (N > 1) {
                aout << "------------------------------------------------------------"
                        "-------------------" << endl;
                aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
            }
            int err = service->dump(STDOUT_FILENO, args);
            if (err != 0) {
                aerr << "Error dumping service info: (" << strerror(err)
                        << ") " << services[i] << endl;
            }
        } else {
            aerr << "Can't find service: " << services[i] << endl;
        }
    }
    return 0;
}

分享到:
评论

相关推荐

    基于stm32f4系列单片机,ad7606的8通道16位的同步ADC例程。.zip

    基于stm32f4系列单片机,ad7606的8通道16位的同步ADC例程。

    六数码问题..._lan.zip

    六数码问题..._lan

    ASP.NET旅游信息管理系统 asp.net(c#)+sql.zip

    ASP.NET旅游信息管理系统 asp.net(c#)+sql

    ListView 中的item随意拖动.zip

    ListView 中的item随意拖动.zip

    图形化界面采用Easyx编写,实现对哈夫曼树的显示操作

    【作品名称】:图形化界面采用Easyx编写,实现对哈夫曼树的显示操作 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 数据结构课程设计(哈夫曼编码译码器) 本程序语言为c语言,内容包括: 哈夫曼编码 显示哈夫曼树 哈夫曼译码 图形化界面采用Easyx编写,实现对哈夫曼树的显示操作。

    致远OA V8.1 数据字典

    致远OA V8.1 数据字典

    Python数据结构与算法分析的课件PPT和电子图书

    Python数据结构与算法分析的课件PPT和电子图书

    FastStone Capture屏幕长截图软件包

    FastStone Capture屏幕长截图软件包

    token_num.ipynb

    token_num.ipynb

    没东西石达开代价大欧文见到就带大家

    所打动加我的骄傲i就打我

    Android-Retrofit-Images在这个示例 Android 项目中,

    Android-Retrofit-Images在这个示例 Android 项目中,我们使用 Retrofit 和 Picass

    ft bios guide

    ft bios guide

    Recorder用于html5录音,支持在大部分已实现getUserMedia的移动端、PC端浏览器麦克风录音、实时处理

    html5 js 录音 mp3 wav ogg webm amr g711a g711u 格式,支持pc和Android、iOS部分浏览器、Hybrid App(提供Android iOS App源码)、微信,提供ASR语音识别转文字 H5版语音通话聊天示例 DTMF编码解码

    python小项目:简易机器人 其中有:查询某城市(精确到区)的当前天气功能

    该python文件应被拆分为两个python文件,已标注在注释中,且放置在相同文件夹下。 main_robot.py中为主函数,调取了helloFunction.py中的函数 helloFunction.py中有如下功能: 询问函数:询问用户的名称及年龄 打招呼函数:与用户打招呼 赞扬函数:根据用户的年龄对用户表达欣赏之情 时间函数:可以显示当前的时间(北京时间) 闰年函数:可以判断某年是否为闰年(有两种,一种简单的,一种复杂的) 查询天气函数:可以查询中国大陆的任意地区的当前天气(通过调取高德API所得) 其中需要使用到:AMap_adcode_citycode.xlsx(高德API对应的城市代码)

    pyzmq-17.1.3.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    RUBY-DEFAULT-CONTAINS

    RUBY-DEFAULT-CONTAINS

    调节篮球比赛定时器,毕业设计实验报告,multisim仿真,AD09原理图及PCB图.zip

    调节篮球比赛定时器,毕业设计实验报告,multisim仿真,AD09原理图及PCB图

    数据库管理工具:dbeaver-ce-23.2.3-macos-x86-64.dmg

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    数据库管理工具:dbeaver-ce-23.2.5-x86-64-setup.exe

    1.DBeaver是一款通用数据库工具,专为开发人员和数据库管理员设计。 2.DBeaver支持多种数据库系统,包括但不限于MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB、Derby、SQLite等,几乎涵盖了市场上所有的主流数据库。 3.支持的操作系统:包括Windows(2000/XP/2003/Vista/7/10/11)、Linux、Mac OS、Solaris、AIX、HPUX等。 4.主要特性: 数据库管理:支持数据库元数据浏览、元数据编辑(包括表、列、键、索引等)、SQL语句和脚本的执行、数据导入导出等。 用户界面:提供图形界面来查看数据库结构、执行SQL查询和脚本、浏览和导出数据,以及处理BLOB/CLOB数据等。用户界面设计简洁明了,易于使用。 高级功能:除了基本的数据库管理功能外,DBeaver还提供了一些高级功能,如数据库版本控制(可与Git、SVN等版本控制系统集成)、数据分析和可视化工具(如图表、统计信息和数据报告)、SQL代码自动补全等。

    VB+Access酒店客房管理系统(论文+系统+开题报告+摘要+任务书).zip

    VB+Access酒店客房管理系统(论文+系统+开题报告+摘要+任务书)

Global site tag (gtag.js) - Google Analytics