Androiddebugging监视器层次结构视图不显示

我正尝试在ADM中连接我的应用程序,但不幸的是层次结构视图不显示。 我应该如何将我的应用程序连接到ADM工具?

设备:Nexus 4

O:4.3.3

错误:

[2014-02-06 13:00:14 - hierarchyviewer]Missing forwarded port for 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Unable to get view server version from device 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Missing forwarded port for 021df5e049116bac [2014-02-06 13:00:14 - hierarchyviewer]Unable to get view server protocol version from device 021df5e049116bac [2014-02-06 13:00:14 - ViewServerDevice]Unable to debug device: lge-nexus_4-021df5e049116bac 

请参阅使用层次结构查看器来剖析您的布局以查看层次结构查看器的使用情况

今天,我使用层次结构查看器与我的应用程序,并且在模拟器和实际设备上都会遇到非常类似的问题,并且层次结构查看器“树视图”窗口变黑。

注意:对于较新版本的android studio,您可以使用Tools > Android > Android Device Monitor > Window > Open Perspective... > Hierarchy View

在这里输入图像描述

下面我会告诉你如何解决siller和真实设备上的问题。

信息:设备debugging模式开启,我不testing是否对下面的结果有影响。

一个)。 检查设备是否打开了视图服务器

 bogon:~ roofe$ adb shell service call window 3 Result: Parcel(00000000 00000000 '........') 

注意:如果你得到

找不到命令adb

adb通常在sdk的path中,我的是/Users/roofe/Library/Android/sdk/platform-tools/adb 。 然后,您可以将其添加到path或为其创build别名。

我在用户path下的.bash_profile放置alias adb='/Users/roofe/Library/Android/sdk/platform-tools/adb' ,然后source ./.bash_profile 。 这里adb命令应该工作。

输出信息:

查看服务器closures: Result: Parcel(00000000 00000000 '........')

查看服务器: Result: Parcel(00000000 00000001 '........')

如果视图服务器打开,您的层次结构查看器应该运行良好。 你不需要阅读下面。

不幸的是,如果你的视图服务器closures,继续。 我的模拟器和读取设备的查看服务器都closures。

B)。 启动查看服务器

 bogon:~ roofe$ adb shell service call window 1 i32 4939 Result: Parcel(00000000 00000001 '........') 

如果结果是Result: Parcel(00000000 00000001 '........') ,视图服务器已经启动。 而如果结果是Result: Parcel(00000000 00000000 '........') ,视图服务器不能启动。

您也可以closures视图服务器

 adb shell service call window 2 i32 4939 

这里执行两次命令closures它,也许这里有一个执行时间。

 bogon:~ roofe$ adb shell service call window 2 i32 4939 Result: Parcel(00000000 00000001 '........') bogon:~ roofe$ adb shell service call window 2 i32 4939 Result: Parcel(00000000 00000000 '........') 

大多数真实设备无法启动视图服务器。 为了安全起见,Android在真实设备上对此有限制。 您可以在Andorid的WindowManageService.java源代码文件中find相关的代码

 if (!checkCallingPermission(Manifest.permission.DUMP, "startViewServer")) { return false; } 

所以,如果你是一个天才cookies,你可以根据你的设备来消除这个限制。 我没有做到。 如果你尝试成功,给我看看。 我会很高兴你的聪明的工作。

在这里我的模拟器工作。 而真正的设备不是。 如果您的视图服务器仍然closures,继续。

C)。 使用ddm协议,从Android Studio doc文档中的一种方法使用Hierarchy Viewer来查看您的布局

如果您使用的是Android模拟器,则可以跳过本节。 否则,您需要按照以下步骤设置您的设备。

注意:您的设备必须运行Android 4.1或更高版本。

在您的设备上启用开发者选项。

在开发机器上设置环境variablesANDROID_HVPROTO = ddm。

该variables告诉Hierarchy Viewer使用ddm协议连接到设备,这与DDMS协议相同。 需要注意的是, 连接到设备的主机上只能有一个进程,因此您必须终止其他任何DDMS会话才能运行Hierarchy Viewer。

添加export ANDROID_HVPROTO=ddm到您的.bash_profile然后源./.bash_profile

删除已安装的应用程序,然后重新启动Android Studio ,然后安装您的应用程序,您可以立即查看它。

注意:我设置了ddm而不重新启动Android Studio a,我无法对它进行层次结构查看。 一天后,我意识到了,做了一些testing。 我设置ppm后,最好重新启动android工作室。 我想当android工作室启动它会读取configuration,可以caching它。

我没有testing它没有卸载应用程序。

d)。 设置一个视图服务器

请不要在这里感到沮丧。 要启动一个视图服务器是非常容易的。

工具: github上的ViewServer

将此添加到您的build.gradle

 allprojects { repositories { jcenter() maven {url "https://jitpack.io"} } } dependencies { ... compile 'com.github.romainguy:ViewServer:017c01cd512cac3ec054d9eee05fc48c5a9d2de' } 

manifest文件中添加INTERNET权限

 <uses-permission android:name="android.permission.INTERNET" /> 

然后注册查看服务器到你想要检查的活动

 public class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set content view, etc. ViewServer.get(this).addWindow(this); } public void onDestroy() { super.onDestroy(); ViewServer.get(this).removeWindow(this); } public void onResume() { super.onResume(); ViewServer.get(this).setFocusedWindow(this); } } 

现在,我可以在我的真实设备上运行Hierarchy视图。

在这里输入图像描述

最新的Android SDK工具25.3.0删除hierarchyviewer你可以在这里findSDK工具的变化

尝试重新安装设备驱动程序。 之后,确保adb已启动并运行,那么您应该可以通过设备pipe理器正确连接。