自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探秘Android系統(tǒng):dumpsys命令獲取系統(tǒng)服務(wù)詳細(xì)信息

移動(dòng)開(kāi)發(fā) Android
dumpsys是Android系統(tǒng)中的一個(gè)可執(zhí)行文件,主要作用是將當(dāng)前Android系統(tǒng)的一些信息dump出來(lái),例如Activity、package等。

dumpsys是Android系統(tǒng)中的一個(gè)可執(zhí)行文件,主要作用是將當(dāng)前Android系統(tǒng)的一些信息dump出來(lái),例如Activity、package等。是一個(gè)分析Android設(shè)備問(wèn)題、查看運(yùn)行狀態(tài)、使用情況等十分有效的工具??梢垣@取各種系統(tǒng)信息和狀態(tài),如進(jìn)程的PSS值,分析了解進(jìn)程對(duì)RAM的占用情況。

dumpsys的語(yǔ)法提供了靈活的方式來(lái)獲取和分析Android系統(tǒng)中各種服務(wù)的信息?;菊Z(yǔ)法結(jié)構(gòu)如下:

adb shell dumpsys [-t timeout] [--help | -l | --skipservices | service[arguments] | -c | -h]
  • [-t timeout]:可選參數(shù),用于指定命令執(zhí)行的超時(shí)時(shí)間(以秒為單位)。默認(rèn)為10秒。
  • [--help | -l | --skipservices | service[arguments] | -c | -h]:命令行選項(xiàng),用于定制dumpsys的輸出和行為。

--help:打印dumpsys的使用方法說(shuō)明。

-l:列出dumpsys支持的所有系統(tǒng)服務(wù)列表。

--skipservices:指定不需要打印的服務(wù)列表。

service[arguments]:指定要查詢(xún)的特定服務(wù)及其可選參數(shù)。通過(guò)指定服務(wù)名稱(chēng),可以獲取特定服務(wù)的詳細(xì)信息。

-c:以機(jī)器友好的格式(通常是鍵值對(duì))輸出信息,對(duì)于自動(dòng)化腳本解析可能很有用,對(duì)于人類(lèi)閱讀可能不太友好。

-h:用在指定的服務(wù)后面,打印服務(wù)支持哪些參數(shù)或如何使用該服務(wù)。

% adb shell dumpsys -l
Currently running services:
DisplayFeatureControl
DockObserver
MiuiBackup
MiuiCarService
MiuiInit
MiuiWifiService
ProcessManager
SchedBoostService
SlaveWifiService
SurfaceFlinger
accessibility
account
activity
activity_task
adb

如果dumpsys不加任何參數(shù),會(huì)輸出所有系統(tǒng)服務(wù)的詳細(xì)信息,輸出的內(nèi)容是非常多的。實(shí)際解決具體問(wèn)題時(shí),我們通常只關(guān)注一些特定系統(tǒng)服務(wù)的輸出,只需要將服務(wù)名作為dumpsys命令的參數(shù),就可以只輸出特定服務(wù)的信息。比如要輸出磁盤(pán)使用的統(tǒng)計(jì)信息,則可以將diskstats這個(gè)系統(tǒng)服務(wù)名作為參數(shù)。

% adb shell dumpsys diskstats
Latency: 1ms [512B Data Write]
Recent Disk Write Speed (kB/s) = 45546
Data-Free: 53243072K / 113006560K total = 47% free
Cache-Free: 53243072K / 113006560K total = 47% free
System-Free: 0K / 5192648K total = 0% free
File-based Encryption: true
App Size: 16656406016
App Data Size: 33915740160
App Cache Size: 2662189568
Photos Size: 77041664
Videos Size: 17559552
Audio Size: 38887424
Downloads Size: 0
System Size: 128000000000
Other Size: 9238536192

工作原理

dumpsys基于Android系統(tǒng)的服務(wù)管理和進(jìn)程間通信機(jī)制。通過(guò)調(diào)用Android系統(tǒng)底層的ServiceManager服務(wù),來(lái)獲取系統(tǒng)中所有已注冊(cè)服務(wù)的信息。ServiceManager是Android系統(tǒng)中的一個(gè)核心服務(wù),負(fù)責(zé)管理系統(tǒng)中的所有服務(wù),提供統(tǒng)一的注冊(cè)、發(fā)現(xiàn)和通信機(jī)制。

當(dāng)dumpsys被調(diào)用時(shí),會(huì)通過(guò)Binder進(jìn)程間通信(IPC)框架與ServiceManager進(jìn)行交互。Binder是Android提供的一套進(jìn)程間相互通信的框架,允許不同的進(jìn)程之間進(jìn)行高效的通信和數(shù)據(jù)交換。通過(guò)Binder,dumpsys能夠請(qǐng)求ServiceManager提供當(dāng)前系統(tǒng)中所有已注冊(cè)服務(wù)的列表,以及每個(gè)服務(wù)的詳細(xì)信息。

ServiceManager會(huì)響應(yīng)dumpsys的請(qǐng)求,返回系統(tǒng)中所有服務(wù)的狀態(tài)信息。包括服務(wù)的名稱(chēng)、狀態(tài)、運(yùn)行時(shí)的統(tǒng)計(jì)數(shù)據(jù)等。dumpsys接收到這些信息后,會(huì)進(jìn)行解析和整理,并以一種可讀的方式展示。

int main(int argc, char* const argv[])
{
    ...
    // 1. 首先獲取 servicemanager
    sp<IServiceManager> sm = defaultServiceManager();
    ...
    // 2. 進(jìn)行命令行參數(shù)解析
    bool showListOnly = false;
    if ((argc == 2) && (strcmp(argv[1], "-l") == 0)) {
        // 2.1 當(dāng)參數(shù)僅為 "-l" 時(shí),設(shè)置只羅列出所有的服務(wù)名
        showListOnly = true;
    }
    if ((argc == 1) || showListOnly) {
        // 2.2 當(dāng)不帶任何參數(shù)時(shí),則附加 "-a" 參數(shù),表示輸出所有系統(tǒng)服務(wù)信息
        services = sm->listServices();
        services.sort(sort_func);
        args.add(String16("-a"));
    } else {
        // 2.3 當(dāng)帶了一個(gè)參數(shù)時(shí),表示僅輸出指定的系統(tǒng)服務(wù)信息
        services.add(String16(argv[1]));
        for (int i=2; i<argc; i++) {
            args.add(String16(argv[i]));
        }
    }

    // 3. 羅列出services這個(gè)數(shù)組中的服務(wù)名稱(chēng),到這一步為止,都還只是在dumpsys本身的邏輯中轉(zhuǎn)悠
    const size_t N = services.size();
    if (N > 1) {
        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;
            }
        }
    }
    if (showListOnly) {
        return 0;
    }

    // 4. 輸出services這個(gè)數(shù)組中所包含系統(tǒng)服務(wù)的詳細(xì)信息
    for (size_t i=0; i<N; i++) {
        sp<IBinder> service = sm->checkService(services[i]);
        if (service != NULL) {
            ...
            // 4.1 調(diào)用service的dump方法,來(lái)輸出service的具體信息
            int err = service->dump(STDOUT_FILENO, args);
            ...
        }
        ...
    }
    return 0;
}
  1. 獲取servicemanager,所有的系統(tǒng)服務(wù)都會(huì)向servicemanager注冊(cè)
  2. 進(jìn)行命令行參數(shù)解析,根據(jù)參數(shù)的不同設(shè)置后續(xù)的執(zhí)行指令序列
  3. 簡(jiǎn)單的羅列了一下需要輸出的系統(tǒng)服務(wù)名稱(chēng)
  4. 調(diào)用具體系統(tǒng)服務(wù)的dump()方法完成系統(tǒng)服務(wù)詳細(xì)信息的輸出

以上面adb shell dumpsys diskstats命令為例,最終調(diào)用dump()方法完成輸出:

protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    // 1. 權(quán)限檢查
    mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);

    // 2. 生成一個(gè)大小為512B的臨時(shí)文件
    byte[] junk = new byte[512];
    for (int i = 0; i < junk.length; i++) junk[i] = (byte) i;  // Write nonzero bytes
    File tmp = new File(Environment.getDataDirectory(), "system/perftest.tmp");

    // 3. 將512B的臨時(shí)文件寫(xiě)入磁盤(pán),目的是為了快速的測(cè)試寫(xiě)磁盤(pán)的延遲
    long before = SystemClock.uptimeMillis();
    ...
    fos = new FileOutputStream(tmp);
    fos.write(junk);
    ...
    long after = SystemClock.uptimeMillis();
    ...
    pw.print("Latency: ");
    pw.print(after - before);
    pw.println("ms [512B Data Write]");
    ...
    // 4. 輸出Data, Cache和System這幾個(gè)分區(qū)的磁盤(pán)使用信息
    reportFreeSpace(Environment.getDataDirectory(), "Data", pw);
    reportFreeSpace(Environment.getDownloadCacheDirectory(), "Cache", pw);
    reportFreeSpace(new File("/system"), "System", pw);
    ....
}

責(zé)任編輯:武曉燕 來(lái)源: 沐雨花飛蝶
相關(guān)推薦

2025-01-22 09:57:15

2024-04-30 08:22:33

Androiddumpsys命令

2012-05-14 10:49:25

Cloud Found

2010-11-09 11:54:50

sql server查

2010-02-07 14:54:13

Android

2009-08-07 15:54:51

敏感信息檢測(cè)系統(tǒng)UnisSISS

2009-07-27 10:48:53

ASP.NET Det

2010-03-03 16:08:20

Android手機(jī)系統(tǒng)

2010-09-06 11:57:33

sql server語(yǔ)句

2020-11-17 12:59:34

數(shù)據(jù)泄露Capcom惡意軟件

2016-01-07 13:52:17

Windows 10登錄顯示

2020-05-15 07:00:00

Linux硬盤(pán)信息

2009-10-15 09:58:13

Linux系統(tǒng)信息查看

2021-12-17 14:49:44

Linuxinxi 命令系統(tǒng)信息

2010-03-10 11:15:45

Linux系統(tǒng)網(wǎng)絡(luò)服務(wù)

2010-01-22 10:54:45

Linux操作系統(tǒng)PS命令

2012-05-04 09:24:02

Linuxps命令

2019-08-26 11:53:38

Linux系統(tǒng)GUI

2009-12-22 11:09:54

Linux系統(tǒng)

2020-09-17 14:57:39

CISA黑客漏洞
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)