關於什麼是Hierarchy Viewer,請查看官方文檔:http://developer.android.com/tools/debugging/debugging-ui.html。我的理解:Hierarchy Viewer能得到當前手機實時的UI信息,給界面設計人員和自動化測試人員帶來極大的便利。寫android自動化的時候,可以獲取控件的id屬性。 html
在Android的官方文檔中提到:
To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.
即:出於安全考慮,Hierarchy Viewer只能鏈接Android開發版手機或是模擬器(準確地說,只有ro.secure參數等於0且ro.debuggable等於1的android系統)。Hierarchy Viewer在鏈接手機時,手機上必須啓動一個叫View Server的客戶端與其進行socket通訊。而在商業手機上,是沒法開啓View Server的,故Hierarchy Viewer是沒法鏈接到普通的商業手機。
Android源碼實現這一限制的地方在:
ANDROID源碼根目錄\frameworks\base\services\java\com\android\server\wm\WindowManageService.java
中的一段:
=====================================================================================
public boolean startViewServer(int port) {
if (isSystemSecure()) {
return false;
}
if (!checkCallingPermission(Manifest.permission.DUMP, 」startViewServer」)) {
return false;
} java
….
=====================================================================================
檢驗一臺手機是否開啓了View Server的辦法爲:
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 ‘……..’)」 說明View Server處於關閉狀態
若返回值是:Result: Parcel(00000000 00000001 ‘……..’)」 說明View Server處於開啓狀態
如果一臺能夠打開View Server的手機(Android開發版手機 、模擬器or 按照本帖步驟給系統打補丁的手機),咱們能夠使用如下命令打開View Server:
adb shell service call window 1 i32 4939
使用如下命令關閉View Server:
adb shell service call window 2 i32 4939
前提是:你的手機已經得到ROOT權限,且有BUSYBOX
另外:請仔細閱讀本帖的評論,或許你會有新的收穫。
1.將商業手機經過USB鏈接PC,確保adb服務運行正常
2.備份手機上/system/framework/中的文件至PC。備份的時候請確保PC上保存備份文件的文件夾結構與手機中的/system/framework相同
例如:新建 ANDROID_SDK_ROOT\system\framework文件夾 (
本文出現的ANDROID_SDK_ROOT指你安裝Android SDK的根目錄)
接着在cmd中跳轉至ANDROID_SDK_ROOT\platform-tools文件夾下,輸入如下代碼進行備份:
adb pull /system/framework ANDROID_SDK_ROOT\system\framework
3.進入adb shell,輸出BOOTCLASSPATH:
推薦的作法:
1. 在adb shell中echo $BOOTCLASSPATH > /sdcard/bootclasspath.txt
2. 退回到windows cmd中,輸入adb pull /sdcard/bootclasspath.txt
3. bootclasspath.txt將會保存在
C:\Users\你的用戶名 文件夾下
在第十五步中將會用到這個txt中的內容。
4.下載baksmali 和smali工具。這兩個工具是用來反編譯和編譯odex文件的。
下載地址:
假設我將這兩個jar都下載到了ANDROID SDK根目錄下。 android