1. 程式人生 > >Android除錯系列之dumpsys命令

Android除錯系列之dumpsys命令

       Android提供了dumpsys工具,可以用於檢視很多系統服務資訊。我們可以直接執行dumpsys命令,會將所有服務資訊都列出來。但是這樣得到的結果太多,不容易拿到有效的資訊,可以在命令後面加上相應的引數來得到具體的服務資訊。使用方法為

dumpsys   [service]

       下面簡單列出了常用的service:

meminfo 顯示記憶體資訊

activity 顯示activitiy資訊

cpuinfo 顯示CPU資訊

package packagename  獲取安裝包資訊

batterystats 顯示電量資訊

window 顯示鍵盤,視窗和它們的關係

       使用下面的命令來檢視可以dump出的所有service:

$adb shell dumpsys | grep DUMP


       由於dumpsys的功能很強大,這裡只介紹App開發中用的比較多功能,meminfo和activity,另外簡單提一下檢視package資訊

dumpsys meminfo

可以檢視系統所有App的記憶體使用概況:

    $adb shell dumpsys meminfo

也可以在命令後面跟程式的包名或程序id來檢視某個程式的記憶體使用情況:

    $adb shell dumpsys meminfo $package_name or $pid 


       meminfo資訊中主要看Native Heap和Dalvik Heap兩行。我們知道Android應用的記憶體分為兩部分:dalvik部分和native部分,dalvik部分就是在java中建立物件時在堆中分配的記憶體,native部分通常是指c實現部分分配的記憶體,像bitmap物件的分配就是在native堆上,虛擬機器對引用記憶體進行了限制,dalvik堆和native堆不能超過指定的閾值,否則就容易發生OOM。

       Heap記憶體有三列,Heap Size、Heap Alloc和Heap Free,分別對應於可用的最大記憶體、已經分配的記憶體和剩餘可用記憶體值,第一個等於後面兩個的和。如果Heap Free變得很小,很可能就會發生OOM。

dumpsys activity

       執行這個命令後,會顯示很多內容,我們直接找到對我們有用的資訊。


       ACTIVITY MANAGER RECENT TASKS列出了最近開啟的Task的資訊,最上面的一行是最新開啟的Task資訊,下面依次為更早時候開啟的Task的資訊。上圖中,我們最近開啟的taskId為800,taskAffinity為com.enjoy.vicleedemo。


       ACTIVITY MANAGER ACTIVITIES列出了每個task的詳細資訊,即這個Task包含哪些Activity,他們的顯示順序是什麼樣的等等。上圖中,id為800的task包含兩個Activity,分別為

com.enjoy.vicleedemo/.animation.FrameAnimationActivity

com.enjoy.vicleedemo/.global.EntryActivity

而id為799的task只包含一個Activity

com.ss.android.article.news/.activity.MainActivity


       Running activities展示了最近開啟過的Activity,按照時間倒序列出。

       另外,如果想要檢視當前開啟的是哪個Activity,也可以通過下面的命令來檢視。

adb logcat -s ActivityManager

dumpsys  package


       Activity Resolver Table、Receiver Resolver Table、Service Resolver Table、Registered ContentProviders、ContentProvider Authorities中會列出不同類別的應用一些基本元件的資訊。


       Packages項中列出了應用的一些基本資訊,如

versionCode=1 targetSdk=21   版本號為1,目標sdk為21

grantedPermissions   表示當前應用申請的系統許可權。

如內容有誤,歡迎交流~