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 表示當前應用申請的系統許可權。
如內容有誤,歡迎交流~