ddmlib是DDMS工具的核心,堪稱Android SDK中最不為人知的隐藏Boss,它封裝了一系列對ADB的功能封裝。
DDMS工具雖然已經非常強大,可以展示非常多的Android性能監測資料,但是,它有一個很大的缺點,就是很多資料不能導出,而且很多功能也不能達到自定義的需求,是以,基于這些問題,利用ddmlib來完成自定義的功能定制,就是非常有用的了。
完成DDMS功能的自定義設定,就需要使用到ddmlib這個jar,同時,為了了解DDMS是如何實作這些功能的,還需要引人DDMS的一些庫,來了解其指令的實作原理,如圖所示:

分别是ddmlib.jar、ddms.jar和ddmuilib.jar,其中ddmlib.jar是核心功能,其它兩個是為了檢視其實作原理而引人的。
在IDEA中建立一個Java項目,并導入這些jar包:
可以看見這裡多了一個guava的jar包,該jar是Google的一些拓展庫,在導入這些jar包的時候需要進行依賴。這些jar全部引人後,研究DDMS的環境就搭建好了。點選每一個jar,就可以檢視其相關的方法和代碼了,如圖所示:
要使用ddmlib,首先需要連接配接裝置,這是學習、研究ddmlib.jar的第一步,代碼如下所示:
這裡的代碼中使用循環來進行處理的原因是,ADB需要時間來進行裝置連接配接,是以需要等待一段時間來進行連接配接,一旦裝置連接配接成功,就可以通過IDevice類來進行裝置操作了。
ddmlib提供了很多API,但是其文檔很少,很多東西隻能從源碼中找,這裡舉一個例子,利用ddmlib來進行裝置截圖,代碼如下所示:
利用IDevice的API就可以完成裝置的截圖操作。
要使用ddmlib來實作DDMS的功能自定義,就需要先了解DDMS是如何擷取這些資料的,例如,我們需要了解DDMS是如何統計cpuinfo、meminfo和gfxinfo,也就是下面這個界面:
假如我們要做App的性能監測,那麼這裡的CPU、Memory、Frame資訊是非常好的,但是DDMS卻不能導出資料,是以我們需要進行自定義,那麼這個功能,DDMS是如何實作的呢?打開ddmsuilib.jar,如圖所示:
找到其中的SysinfoPanel類,從命名就基本可以确定,這個就是我們在DDMS中看見的那個界面,進入代碼就更可以确定了,如圖所示:
在這裡,就可以找到相應的實作原理了,原來就是dumpsys cpuinfo”, “cat /proc/meminfo ; procrank”, “dumpsys gfxinfo而已。OK,掌握了這個方法,再檢視其它的功能,就非常簡單了。
Github上對ddmlib研究的人并不多,可想而知,這個隐藏Boss藏的有多深,目前所知的比較出名的是下面這個項目:
<a href="https://github.com/cosysoft/device">https://github.com/cosysoft/device</a>
但這個項目是運作不起來的,因為它引用了一些攜程内部的伺服器位址,需要做修改才能運作,但它的原理還是不錯的,對ddmlib的研究也挺深入的。