天天看点

解决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

继续阅读