dumpsys 命令使用

博客地址:http://blog.csdn.net/droyon/article/details/45622037
dumpsys 常用操作以及实现的来龙去脉.
一,常用操作:
1,在Activity中,可重写dump函数,实现打印,可通过如下命令获取输出:

adb shell dumpsys activity <activity_component_name>

2,在Service的子类中,可重写dump函数,使用如下命令实现命令输出:

adb shell dumpsys activity service <yourservicename>

3,在ContentProvider,重写dump,使用如下命令进行命令输出:

adb shell dumpsys activity provider <provider_component_name>

二,dumpsys 源码分析.转:http://blog.csdn.net/kevinx_xu/article/details/11846289
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;  
}  

三,从2中可知,dumpsys打印输出SystemService 中的dump函数,或者说Binder中的dump.那么我们系统中有那些Binder,Binder注册的名称又是什么,可通过如下命令来获知:
service list:
输出如下:

Found 109 services:
0   phoneEx: [com.mediatek.internal.telephony.ITelephonyEx]
1   phone: [com.android.internal.telephony.ITelephony]
2   isms: [com.android.internal.telephony.ISms]
3   iphonesubinfo: [com.android.internal.telephony.IPhoneSubInfo]
4   simphonebook: [com.android.internal.telephony.IIccPhoneBook]
5   isub: [com.android.internal.telephony.ISub]
6   telecom: [com.android.internal.telecom.ITelecomService]
7   imms: [com.android.internal.telephony.IMms]
8   media_projection: [android.media.projection.IMediaProjectionManager]
9   mtkhdmi: [com.mediatek.hdmi.IMtkHdmiManager]
10  mtk-perfservice: [com.mediatek.perfservice.IPerfService]
11  launcherapps: [android.content.pm.ILauncherApps]
12  fingerprint: [android.service.fingerprint.IFingerprintService]
13  trust: [android.app.trust.ITrustManager]
14  media_router: [android.media.IMediaRouterService]
15  media_session: [android.media.session.ISessionManager]
16  restrictions: [android.content.IRestrictionsManager]
17  print: [android.print.IPrintManager]
18  assetatlas: [android.view.IAssetAtlas]
19  dreams: [android.service.dreams.IDreamManager]
20  commontime_management: []
21  samplingprofiler: []
22  diskstats: []
23  voiceinteraction: [com.android.internal.app.IVoiceInteractionManagerService]
24  appwidget: [com.android.internal.appwidget.IAppWidgetService]
25  backup: [android.app.backup.IBackupManager]
26  jobscheduler: [android.app.job.IJobScheduler]
27  uimode: [android.app.IUiModeManager]
28  serial: [android.hardware.ISerialManager]
29  usb: [android.hardware.usb.IUsbManager]
30  DockObserver: []
31  audio: [android.media.IAudioService]
32  wallpaper: [android.app.IWallpaperManager]
33  dropbox: [com.android.internal.os.IDropBoxManagerService]
34  search_engine: [com.mediatek.search.ISearchEngineManagerService]
35  search: [android.app.ISearchManager]
36  country_detector: [android.location.ICountryDetector]
37  location: [android.location.ILocationManager]
38  devicestoragemonitor: []
39  notification: [android.app.INotificationManager]
40  updatelock: [android.os.IUpdateLock]
41  servicediscovery: [android.net.nsd.INsdManager]
42  connectivity: [android.net.IConnectivityManager]
43  rttmanager: [android.net.wifi.IRttManager]
44  wifiscanner: [android.net.wifi.IWifiScanner]
45  wifi: [android.net.wifi.IWifiManager]
46  wifip2p: [android.net.wifi.p2p.IWifiP2pManager]
47  netpolicy: [android.net.INetworkPolicyManager]
48  netstats: [android.net.INetworkStatsService]
49  network_score: [android.net.INetworkScoreService]
50  textservices: [com.android.internal.textservice.ITextServicesManager]
51  network_management: [android.os.INetworkManagementService]
52  clipboard: [android.content.IClipboard]
53  statusbar: [com.android.internal.statusbar.IStatusBarService]
54  device_policy: [android.app.admin.IDevicePolicyManager]
55  lock_settings: [com.android.internal.widget.ILockSettings]
56  mount: [IMountService]
57  leuiphonebind: [com.letv.leui.os.phonebind.IPhoneBind]
58  accessibility: [android.view.accessibility.IAccessibilityManager]
59  input_method: [com.android.internal.view.IInputMethodManager]
60  bluetooth_manager: [android.bluetooth.IBluetoothManager]
61  input: [android.hardware.input.IInputManager]
62  window: [android.view.IWindowManager]
63  alarm: [android.app.IAlarmManager]
64  consumer_ir: [android.hardware.IConsumerIrService]
65  vibrator: [android.os.IVibratorService]
66  mobile: [com.mediatek.common.mom.IMobileManagerService]
67  content: [android.content.IContentService]
68  account: [android.accounts.IAccountManager]
69  entropy: []
70  telephony.registry: [com.android.internal.telephony.ITelephonyRegistry]
71  scheduling_policy: [android.os.ISchedulingPolicyService]
72  webviewupdate: [android.webkit.IWebViewUpdateService]
73  usagestats: [android.app.usage.IUsageStatsManager]
74  battery: []
75  hardware: [android.os.IHardwareService]
76  anrmanager: [android.app.IANRManager]
77  permission: [android.os.IPermissionController]
78  cpuinfo: []
79  dbinfo: []
80  bginfo: []
81  gfxinfo: []
82  meminfo: []
83  procstats: [com.android.internal.app.IProcessStats]
84  activity: [android.app.IActivityManager]
85  user: [android.os.IUserManager]
86  package: [android.content.pm.IPackageManager]
87  recovery: [com.mediatek.recovery.IRecoveryManagerService]
88  display: [android.hardware.display.IDisplayManager]
89  power: [android.os.IPowerManager]
90  appops: [com.android.internal.app.IAppOpsService]
91  batterystats: [com.android.internal.app.IBatteryStats]
92  sensorservice: [android.gui.SensorServer]
93  media.mmsdk: [android.media.IMMSdkService]
94  media.sound_trigger_hw: [android.hardware.ISoundTriggerHwService]
95  media.audio_policy: [android.media.IAudioPolicyService]
96  SurfaceFlinger: [android.ui.ISurfaceComposer]
97  media.camera: [android.hardware.ICameraService]
98  drm.drmManager: [drm.IDrmManagerService]
99  AAL: [AALService]
100 memory_dumper: [android.memory.IMemoryDumper]
101 media.player: [android.media.IMediaPlayerService]
102 media.audio_flinger: [android.media.IAudioFlinger]
103 batteryproperties: [android.os.IBatteryPropertiesRegistrar]
104 GuiExtService: [GuiExtService]
105 android.security.keystore: [android.security.keystore]
106 PPLAgent: []
107 NvRAMAgent: [NvRAMAgent]
108 mtk.codecservice: []

由上可知,1中的adb shell dumpsys activity 之所以能够使用,是因为activity: [android.app.IActivityManager],并且之后可跟Intent或者Service,是因为ActivityManagerService在dump函数中重写实现的.

} else if ("provider".equals(cmd)) {
                String[] newArgs;
                String name;
                if (opti >= args.length) {
                    name = null;
                    newArgs = EMPTY_STRING_ARRAY;
                } else {
                    name = args[opti];
                    opti++;
                    newArgs = new String[args.length - opti];
                    if (args.length > 2) System.arraycopy(args, opti, newArgs, 0, args.length - opti);
                }
                if (!dumpProvider(fd, pw, name, newArgs, 0, dumpAll)) {
                    pw.println("No providers match: " + name);
                    pw.println("Use -h for help.");
                }
            } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
                synchronized (this) {
                    dumpProvidersLocked(fd, pw, args, opti, true, null);
                }
            } else if ("service".equals(cmd)) {
                String[] newArgs;
                String name;
                if (opti >= args.length) {
                    name = null;
                    newArgs = EMPTY_STRING_ARRAY;
                } else {
                    name = args[opti];
                    opti++;
                    newArgs = new String[args.length - opti];
                    if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
                            args.length - opti);
                }
                if (!mServices.dumpService(fd, pw, name, newArgs, 0, dumpAll)) {
                    pw.println("No services match: " + name);
                    pw.println("Use -h for help.");
                }
            } else if ("package".equals(cmd)) {
                String[] newArgs;
                if (opti >= args.length) {
                    pw.println("package: no package name
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值