- 浏览: 662328 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yigeisme:
你好,不已.html和.jsp和.jpg结尾的正则表达式怎么写 ...
深入入门正则表达式(java) - 2 - 基本实例 -
su1216:
多谢指正yigeisme 写道1-12(小时,月份)正则:^( ...
深入入门正则表达式(java) - 2 - 基本实例 -
yigeisme:
1-12(小时,月份)正则:^(1[012]|\d)$应该改成 ...
深入入门正则表达式(java) - 2 - 基本实例 -
heikefangxianceshi:
小三将军 写道楼主,我想问下你给的Real.tar.gz是什么 ...
android手机root后的安全问题 (一) -
heikefangxianceshi:
这个程序运行的前提是手机root,但你的手机怎么root的呢? ...
android手机root后的安全问题 (一)
dumpsys是系统中重要的函数,我们来看看它如何使用,都能dump出来一些什么东西
首先我们来看看dumpsys的源码,在4.1中,它在framework/native目录下面
frameworks/native/cmds/dumpsys/dumpsys.cpp
if (argc == 1) { 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])); } } 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; } } } for (size_t i=0; i<N; i++) { sp<IBinder> service = sm->checkService(services[i]); if (service != NULL) { if (N > 1) {//dump多个Service时,Service信息之间的分隔 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; } }
我只会java,上面的代码还是留给大家自己阅读吧,我就不详细解释了……
如果参数个数=1,则在ServiceManager中查找注册的Service
否则查找指定的Service,并且将剩余参数传给Serivce
如果执行dumpsys命令,那么将会dump所有Service,每个Service之间会分隔开
如果dumpsys一个没有注册的Service,那么则提示找不到Service,比如:
# dumpsys adb
Can't find service: adb
那么我们到底都可以dump一些什么呢?
其实最简单的办法就是执行dumpsys,看看其结果,下面是我手机中执行的结果(HTCg14)
# dumpsys Currently running services: DeviceManager3LM Encryption3LMService HtcAppUsageStatsService SurfaceFlinger accessibility account activity alarm appwidget audio backup battery batteryinfo bluetooth bluetooth_a2dp bluetooth_hid bt_fm_management clipboard connectivity content country_detector cpuinfo device_policy devicestoragemonitor diskstats display drm.drmManager dropbox entropy gfxinfo hardware htc_checkin htchardware htctelephony htctelephonyinternal input_method iphonesubinfo isms location media.audio_flinger media.audio_policy media.camera media.player meminfo mount netpolicy netstats network_management notification package permission phone power samplingprofiler search secfirewall secloader sensorservice simphonebook sip statusbar stub_activity stub_audio stub_iphonesubinfo stub_isms stub_location stub_phone stub_telephony.registry telephony.registry textservices throttle uimode usagestats usb usbnet userbehavior vibrator wallpaper wifi wifip2p window ------------------------------------------------------------------------------- DUMP OF SERVICE DeviceManager3LM: ------------------------------------------------------------------------------- DUMP OF SERVICE Encryption3LMService:
由于dump service的log实在太长,我就截取了最前面的“Currently running services”和两个Service的dump信息
为什么DeviceManager3LM和Encryption3LMService后面没有内容?这和Service的内部实现有关,也许它只是写了一个空的dump函数,也许有什么其他条件。
这个问题一会再说,我们先看看这些Service都是在哪注册的
其中大部分Service都是在SystemServer中的main函数里注册的,它调用了一个叫init2的函数
public static final void init2() { Slog.i(TAG, "Entered the Android system server!"); Thread thr = new ServerThread(); thr.setName("android.server.ServerThread"); thr.start(); }
init2非常简单,所有任务都交给新线程ServerThread来处理
在ServerThread的run函数中,注册了系统大部分的Service,有兴趣的同学可以看看这部分代码
这部分代码有点长(大概800行),因为它一直重复这建立各种Service,然后注册,输出log
比如下面的WifiP2pService
try { Slog.i(TAG, "Wi-Fi P2pService"); wifiP2p = new WifiP2pService(context); ServiceManager.addService(Context.WIFI_P2P_SERVICE, wifiP2p); } catch (Throwable e) { reportWtf("starting Wi-Fi P2pService", e); }
其中WIFI_P2P_SERVICE就是服务的名字
public static final String WIFI_P2P_SERVICE = "wifip2p";
当执行dumpsys wifip2p的时候,并没有任何输出,为什么呢?我们看看WifiP2pService的代码
@Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { pw.println("Permission Denial: can't dump WifiP2pService from from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); return; } }
现在似乎可以理解为什么dumpsys wifip2p的时候没有输出了
我们再来看一个简单的例子
# dumpsys diskstats
Latency: 5ms [512B Data Write]
Data-Free: 362888K / 1161104K total = 31% free
Cache-Free: 116756K / 120900K total = 96% free
System-Free: 133036K / 806284K total = 16% free
ServiceManager.addService("diskstats", new DiskStatsService(context));
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { …… reportFreeSpace(Environment.getDataDirectory(), "Data", pw); reportFreeSpace(Environment.getDownloadCacheDirectory(), "Cache", pw); reportFreeSpace(new File("/system"), "System", pw); }
private void reportFreeSpace(File path, String name, PrintWriter pw) { try { StatFs statfs = new StatFs(path.getPath()); long bsize = statfs.getBlockSize(); long avail = statfs.getAvailableBlocks(); long total = statfs.getBlockCount(); if (bsize <= 0 || total <= 0) { throw new IllegalArgumentException( "Invalid stat: bsize=" + bsize + " avail=" + avail + " total=" + total); } pw.print(name); pw.print("-Free: "); pw.print(avail * bsize / 1024); pw.print("K / "); pw.print(total * bsize / 1024); pw.print("K total = "); pw.print(avail * 100 / total); pw.println("% free"); } catch (IllegalArgumentException e) { pw.print(name); pw.print("-Error: "); pw.println(e.toString()); return; } }
转贴请保留以下链接
本人blog地址
发表评论
-
android 第三方app截图
2017-08-17 15:18 1169将View生成相应的图片 ... -
android截图事件监听
2017-07-20 18:37 2007android系统没有对用户截屏行为提供回调的api,所以我 ... -
android widget(桌面小部件)实现
2017-06-30 13:02 1989本文介绍如何自己实现一个widget以及各种注意事项。 ... -
acra简析
2016-07-31 23:54 0版本4.9.1 acra是用来在 ... -
android版本差异
2016-07-28 14:42 0这里只列出部分开发相关内容 notification ... -
android系统提供的常用命令行工具
2016-06-21 13:17 5000本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
标示与掩码
2015-10-21 23:00 0掩码(英语:Mask) ... -
通过蓝牙调试(穿戴设备app) - 开发文档翻译
2015-09-30 11:43 2558由于本人英文能力实在 ... -
打包穿戴设备app - 开发文档翻译
2015-09-29 17:19 1784由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
弧形进度条(动画版)
2015-07-23 17:00 5834本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接 ... -
使用canvas与Paint在View中居中绘制文字
2015-07-15 23:03 8900本博客只要没有注明 ... -
android 关于提高第三方app的service优先级
2014-06-23 23:14 3101本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链 ... -
android <application> 开发文档翻译
2014-05-24 23:47 5095由于本人英文能力实 ... -
android中各种log的抓取
2013-12-23 13:15 01.logcat的使用 2.内存快照的抓取 ... -
android多语言项目中字符串的移植(bash工具)
2013-11-11 13:31 2435有时候我们会遇到这样一种情况: 一些字符串资源要从原始项 ... -
android 高效显示Bitmap - 开发文档翻译
2013-09-13 17:59 2585由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 在你的UI中显示Bitmap - 开发文档翻译
2013-09-06 19:33 6559由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 管理Bitmap内存 - 开发文档翻译
2013-08-27 15:39 4100由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没 ... -
android 缓存Bitmap - 开发文档翻译
2013-08-25 13:01 3137由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有 ... -
android 在UI线程之外处理Bitmap - 开发文档翻译
2013-08-12 13:30 3361由于本人英文能力实 ...
相关推荐
在Android手机上, 通过使用adb shell命令可以进入android系统的shell, 该shell除支持一些常用的标准命令之外,还支持一些和android系统相关的其他命令, 这些命令可以打印出系统当前的状态信息。 dumpsys就是这样...
不需要打trace了,实时监控关心的关键信息的值...Android的服务基本都有dump信息,debug的利器,效率极高(相比trace和断点调试) 开发、维护人员需要经常使用并熟悉相关的表示 适时扩展dump的输出及格式,方便适时调试。
Android脚本init.rc中写service,应用中启动该service
本资源以华为P30为例,详解地分析dumpsys input 的信息:1 帮助用户了解dumpsys 命令; 2 分析华为P30 的输入设备以及配置文件; 3. 针对input 的参数详解;
基于android 2.3.3 三种调用相机的方式 分别为使用android自带的照相功能 指定存储目录 使用SurfaceHolder预览相机的图片
android帧率可以通过adb shell dumpsys gfxinfo packages来查看,但是需要分析log,这种特别麻烦,分享一个免root获取帧率工具。注意:.jar文件在PC上运行。
第7章 Android动画机制与使用技巧 162 7.1 Android View动画框架 163 7.1.1 透明度动画 163 7.1.2 旋转动画 163 7.1.3 位移动画 164 7.1.4 缩放动画 164 7.1.5 动画集合 164 7.2 Android属性动画分析 165 ...
android audio 音频调试技巧,pcm 声卡使用情况查看。dumpsys *audio*等
目前通过ble hal实现从hidraw中读取遥控器语音数据,在Android框架层上就通过配置文件将ble hal导入到音频框架中,并通过绑定Android原生已有的耳麦设备来完成audio音频策略选择,通过apk检测ble连接状态,通知audio...
dumpsys input信息 cepheus_input.txt(小米9机器)
本文主要介绍如何读取Android本地图库的图片以及调用安卓的摄像头进行拍摄。 一、布局 布局比较简单,MainActviivty的布局文件只有两个按钮,一个是读取图库的,另一个是打开摄像头的,另外ResultActivity的布局只有...
dumpsys命令这是安卓提供的调试命令.和名字的翻译一样,倾倒系统信息.主要用来查询系统服务的运行状态.列出所有的系统服务:adb shell dumpsys
easy-dumpsys:输出以下adb命令的脚本:`adb shell dumpsys activity `以更小,更容易和用户友好的方式..
title: 辅助功能 之 小米手机悬浮窗权限 date: 2016-06-02 16:19:59 categories: android ...这个方法应该有很多中,但是我只验证了一种:想到了 adb shell dumpsys activity usb链接电脑后,手动打开应用
使用bat脚本编写,简单,点击就能用 不要安装各种软件环境
adb shell 进入,命令: dumpsys meminfo 包名 MyTeacher teacher; 1 C++中 这个语句执行完毕,在当前的堆内存内 初始化并且赋值好该对象 在java中执行这个语句,只是开辟了一块内存空间,并没初始化和赋值...
android/external android 使用的一些开源的模组 android/frameworks/base/cmds 一些android重要命令:am、app_proce等 实际上这些工具都是小应用。调试串口接电脑,开启控制台可以使用这些工具。如果USB连电脑,...