運作結果如下:
<code>01</code>
<code>the standalone version of hieararchyviewer is deprecated.</code>
<code>02</code>
<code>please use android device monitor (tools/monitor.bat) instead.</code>
<code>03</code>
<code>01:41:41 e/hierarchyviewer: unable to get view server version from device aqbuys</code>
<code>04</code>
<code>qkdilnydzt</code>
<code>05</code>
<code>01:41:41 e/hierarchyviewer: unable to get view server protocol version from devi</code>
<code>06</code>
<code>ce aqbuysqkdilnydzt</code>
<code>07</code>
<code>01:41:41 e/viewserverdevice: unable to debug device: xiaomi-2013022-aqbuysqkdiln</code>
<code>08</code>
<code>ydzt</code>
<code>09</code>
<code>01:41:41 e/hierarchyviewer: missing forwarded port for aqbuysqkdilnydzt</code>
<code>10</code>
<code>01:41:41 e/hierarchyviewer: unable to get the focused window from device aqbuysq</code>
<code>11</code>
<code>kdilnydzt</code>
<code>12</code>
<code>01:41:43 e/hierarchyviewer: missing forwarded port for aqbuysqkdilnydzt</code>
<code>13</code>
<code>01:41:43 e/hierarchyviewer: unable to load window data for window <focused windo</code>
<code>14</code>
<code>w> on device aqbuysqkdilnydzt</code>
<code>15</code>
<code>01:41:43 e/hierarchyviewer: null</code>
解決方案如下:
方案:在手機上安裝:viewserver.apk
注意:需要一直在手機背景開着。
開啟viewserver服務的viewserver.apk在哪裡下載下傳?各市場裡居然沒有。。那麼就自己編譯一個吧。
android源代碼下載下傳位址:
http://pan.baidu.com/s/1sjiulyl
提取碼:wrc8
注意:下載下傳清單包含源碼,和可安裝的apk,能夠直接使用。
本文解決問題:
android view hierarchy,解決view hierarchy不能啟動。
-----------------------
view hierarchy不能啟動的原因
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
中的一段:
<code>1</code>
<code>public</code> <code>boolean</code> <code>startviewserver(</code><code>int</code> <code>port) {</code>
<code>2</code>
<code> </code><code>if</code> <code>(issystemsecure()) {</code>
<code>3</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code>4</code>
<code> </code><code>}</code>
<code>5</code>
<code>6</code>
<code> </code><code>if</code> <code>(!checkcallingpermission(manifest.permission.dump, </code><code>"startviewserver"</code><code>)) {</code>
<code>7</code>
<code>8</code>
<code>9</code>
<code>....</code>
檢驗一台手機是否開啟了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