运行结果如下:
<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