概述:
? ? 本文主要是對(duì)Hierarchy Viewer如何進(jìn)行真機(jī)調(diào)試操作說(shuō)明呻顽,其中有自己總結(jié)的方法也他人的經(jīng)驗(yàn)河哑,一并在文中進(jìn)行歸納一下斑匪。
一、Hierarchy Viewer是什么盏浇?
通常應(yīng)用的不合理布局能夠拖慢應(yīng)用的運(yùn)行速度变丧,為了幫助debug布局的中存在問題,Android sdk 提供了Hierarchy Viewer工具绢掰。簡(jiǎn)單來(lái)說(shuō)锄贷,Hierarchy View就是為了方便調(diào)試和優(yōu)化應(yīng)用用戶界面译蒂,絕對(duì)是UI的檢視de 利器。
二谊却、Hierarchy Viewer如何使用
1.打開android studio的tools->Android->Android Device Monitor
2.然后打開 “Open Perspective”選擇 Hierachy View
更具體的使用調(diào)試方法即優(yōu)化選項(xiàng)就不在這里展開,請(qǐng)參考android 官方文檔:
Android UI 優(yōu)化——使用HierarchyViewer工具
三哑芹,如何在真機(jī)上正常使用Hierarchy View
? ?Hierarchy Viewer如果不進(jìn)行“特殊”配置的話是無(wú)法連接真機(jī)炎辨,會(huì)報(bào)以下錯(cuò)誤:
[hierarchyviewer]Unable?to?get?view?server?version?from?device?XXXXX
[hierarchyviewer]Unable?to?get?view?server?protocol?version?from?device?XXXXXX
[ViewServerDevice]Unable?to?debug?device:?XXXXX
[hierarchyviewer]Missing?forwarded?port?for?XXXXX
[hierarchyviewer]Unable?to?get?the?focused?window?from?device?XXXXX
無(wú)法連接真機(jī)的原因是:To preserve security, Hierarchy Viewer can only connect to devices running a developer version of the Android system.出于安全性考慮, Hierarchy Viewe 只能連接開發(fā)版手機(jī)或模擬器聪姿。
? ?Android源碼實(shí)現(xiàn)這一限制的地方在/frameworks/base/services/core/java/com/android/server/wm/WindowManageService.java:
檢驗(yàn)一臺(tái)手機(jī)/模擬器是否開啟了View Server的辦法是:
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 '........')" 說(shuō)明View Server處于關(guān)閉狀態(tài)
若返回值是:Result: Parcel(00000000 00000001 '........')" 說(shuō)明View Server處于開啟狀態(tài)
有時(shí)碰到模擬器或開發(fā)發(fā)版手機(jī)碴萧, view Hierarchy 還是無(wú)法連接,可以先使用以上方法檢查一下View Server狀態(tài)末购。如果沒有開啟破喻,則使用以下命名打開View Server:
adb shell service call window 1 i32 4939
也可以使用使用以下命令關(guān)閉View Server:
adb shell service call window 2 i32 4939
那么如何在真機(jī)能夠正常使用Hierarchy Viewer了?通過(guò)實(shí)踐目前總結(jié)了以下三種方法:
方法一盟榴。
1曹质,配置設(shè)備,打開手機(jī)的開發(fā)者選項(xiàng)
如果你的手機(jī)是android 4擎场。0 或者以下羽德,請(qǐng)根據(jù)開源項(xiàng)目 View ?Server(https://github.com/romainguy/ViewServer) 進(jìn)行安裝和配置
如果你的手機(jī)是4.1或以上,則必須進(jìn)行以下環(huán)境變量配置:
1.點(diǎn)擊 計(jì)算機(jī)屬性-》高級(jí)系統(tǒng)設(shè)置-》環(huán)境變量
2.新建環(huán)境變量ANDROID_HVPROTO迅办, 并設(shè)置其值為 ddm, 保存重啟
PS:該方法參考android 官方文檔《Device Setup for Hierachy Viewer》https://developer.android.com/studio/profile/hierarchy-viewer-setup.html
然而在本人親自試用真機(jī)(魅族MX4pro android 5.1 和 android 4.4的機(jī)頂盒)測(cè)試過(guò)程中宅静,配置環(huán)境變量的方法似乎并沒有起到作用,還是連不上站欺。
不過(guò)直接在調(diào)試app中集成View Server開源項(xiàng)目是沒有任何問題的姨夹。
方法二:
話說(shuō)前面Hierarchy Viewer只能連接Android開發(fā)版手機(jī)或是模擬器,只有ro.secure==0 && ro.debuggable==1的Android系統(tǒng)(這一句是其他網(wǎng)友的文章看到的矾策,沒有在android 官方查證到 )磷账。ro.xxxx這種句式大家是不是覺得有點(diǎn)熟悉?不就是android系統(tǒng)的 /system/build.prop文件中的配置樣式么蝴韭。推測(cè)如果將ro.secure==0 && ro.debuggable==1這個(gè)兩個(gè)配置添加進(jìn)來(lái)應(yīng)該能夠起作用吧够颠,于是進(jìn)行以下嘗試:
1.先把手機(jī)root
2.在進(jìn)到在/system/build.prop 中添加ro.secure==0? 和 ro.debuggable==1, 保存配置并重啟手機(jī)榄鉴,Hierarchy Viewer連接正常履磨,終于可以正常調(diào)試了。
方法三:
參照《如何在Root的手機(jī)上開啟ViewServer庆尘,使得HierachyViewer能夠連接》http://maider.blog.sohu.com/255448342.html剃诅。該方法本人沒有實(shí)踐過(guò),一看有18個(gè)步驟驶忌,
還涉及到 android逆向矛辕、smail,瞬間腦仁發(fā)緊笑跛,有興趣的同學(xué)可以自行嘗試一下。