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
中的一段:
1
public boolean startViewServer(int port)
{
2
if (isSystemSecure())
{
3
return false;
4
}
5
6
if (!checkCallingPermission(Manifest.permission.DUMP,"startViewServer"))
{
7
return false;
8
}
9
....
检验一台手机是否开启了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
如若不行可参考以下2篇文章:
adb端口被占用问题(PS:除一下可能,还有一种原因可能是系统环境变量中的adb.exe路径多个导致与eclipse对应的android
sdk platform-tools adb不一致)
1:今天调试android的时候发现一个诡异的问题
C:\Users\xxxx>adb start-server
adb server is out of date. killing...
ADB server didn't ACK
* failed to start daemon *
adb 不管执行 shell devices 还是logcat 都会报错
adb server is out of date. killing...
究其源就是adb
server没启动
到stackoverflow上查了一下 经过分析整理如下:
C:\Users\xxxx>adb nodaemon server
cannot bind 'tcp:5037'
原来adb
server 端口绑定失败
继续查看到底是哪个端口给占用了
C:\Users\xxxxxx>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 4236
TCP 127.0.0.1:5037 127.0.0.1:49422 ESTABLISHED 4236
TCP 127.0.0.1:49422 127.0.0.1:5037 ESTABLISHED 3840
打开任务管理器kill掉4236 这个进程。ok