天天看點

隐藏Boss——ddmlib使用入門ddmlib使用入門

ddmlib是DDMS工具的核心,堪稱Android SDK中最不為人知的隐藏Boss,它封裝了一系列對ADB的功能封裝。

DDMS工具雖然已經非常強大,可以展示非常多的Android性能監測資料,但是,它有一個很大的缺點,就是很多資料不能導出,而且很多功能也不能達到自定義的需求,是以,基于這些問題,利用ddmlib來完成自定義的功能定制,就是非常有用的了。

完成DDMS功能的自定義設定,就需要使用到ddmlib這個jar,同時,為了了解DDMS是如何實作這些功能的,還需要引人DDMS的一些庫,來了解其指令的實作原理,如圖所示:

隐藏Boss——ddmlib使用入門ddmlib使用入門

分别是ddmlib.jar、ddms.jar和ddmuilib.jar,其中ddmlib.jar是核心功能,其它兩個是為了檢視其實作原理而引人的。

在IDEA中建立一個Java項目,并導入這些jar包:

可以看見這裡多了一個guava的jar包,該jar是Google的一些拓展庫,在導入這些jar包的時候需要進行依賴。這些jar全部引人後,研究DDMS的環境就搭建好了。點選每一個jar,就可以檢視其相關的方法和代碼了,如圖所示:

隐藏Boss——ddmlib使用入門ddmlib使用入門

要使用ddmlib,首先需要連接配接裝置,這是學習、研究ddmlib.jar的第一步,代碼如下所示:

這裡的代碼中使用循環來進行處理的原因是,ADB需要時間來進行裝置連接配接,是以需要等待一段時間來進行連接配接,一旦裝置連接配接成功,就可以通過IDevice類來進行裝置操作了。

ddmlib提供了很多API,但是其文檔很少,很多東西隻能從源碼中找,這裡舉一個例子,利用ddmlib來進行裝置截圖,代碼如下所示:

利用IDevice的API就可以完成裝置的截圖操作。

要使用ddmlib來實作DDMS的功能自定義,就需要先了解DDMS是如何擷取這些資料的,例如,我們需要了解DDMS是如何統計cpuinfo、meminfo和gfxinfo,也就是下面這個界面:

隐藏Boss——ddmlib使用入門ddmlib使用入門

假如我們要做App的性能監測,那麼這裡的CPU、Memory、Frame資訊是非常好的,但是DDMS卻不能導出資料,是以我們需要進行自定義,那麼這個功能,DDMS是如何實作的呢?打開ddmsuilib.jar,如圖所示:

隐藏Boss——ddmlib使用入門ddmlib使用入門

找到其中的SysinfoPanel類,從命名就基本可以确定,這個就是我們在DDMS中看見的那個界面,進入代碼就更可以确定了,如圖所示:

隐藏Boss——ddmlib使用入門ddmlib使用入門

在這裡,就可以找到相應的實作原理了,原來就是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的研究也挺深入的。

繼續閱讀