天天看點

解決The standalone version of hieararchyviewer is deprecated.

運作結果如下:

<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 &lt;focused windo</code>

<code>14</code>

<code>w&gt; 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

繼續閱讀