Android Debug Monitor层次结构视图未显示

时间:2014-02-06 07:39:43

标签: android ddms

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

  

设备:Nexus 4

     

Os: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

3 个答案:

答案 0 :(得分:4)

有关层次结构查看器的使用,请参阅Profile Your Layout with Hierarchy Viewer

今天我使用层次结构查看器和我的应用程序,我在silulator和真实设备上得到了非常相似的问题,层次结构查看器树视图窗口变黑。

注意:对于较新版本的android studio,您可以使用Tools > Android > Android Device Monitor > Window > Open Perspective... > Hierarchy View打开层次结构查看器

enter image description here

下面我将向您展示如何解决银器和真实设备上的问题。

信息:设备调试模式已开启,我不测试它是否对下面的结果有影响。

<强> a)中。检查设备是否已打开视图服务器

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

注意:如果你得到

  

无法找到命令adb

adb通常位于sdk的路径中,我的位于/Users/roofe/Library/Android/sdk/platform-tools/adb。然后,您可以将其添加到路径或为其创建别名。

我将alias adb='/Users/roofe/Library/Android/sdk/platform-tools/adb'放在用户路径下的.bash_profile,然后source ./.bash_profile。这里adb命令应该有效。

输出信息:

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

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

如果视图服务器已启用,则层次结构查看器应该可以正常工作。你不必在下面阅读。

不幸的是,如果您的视图服务器已关闭,请继续。 我的模拟器和读取设备的视图服务器都关闭了。

<强> B)。启动查看服务器

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

如果结果为Result: Parcel(00000000 00000001 '........'),则视图服务器已启动。如果结果为Result: Parcel(00000000 00000000 '........'),则无法启动视图服务器。

您也可以使用

关闭视图服务器
adb shell service call window 2 i32 4939

这里执行命令两次以关闭它,也许这里有执行时间。

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 on real device对此有所限制。您可以在Andorid的文件WindowManageService.java源代码中找到相关代码

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

因此,如果你是一个天才的破解者,你可以根据你的设备取消这个限制。我没有成功。如果您尝试成功,请告诉我。我非常感谢你的聪明工作。

我的模拟器在这里工作。虽然真正的设备没有。如果您的视图服务器仍处于关闭状态,请继续。

c)。使用ddm协议,来自Android studio doc Profile Your Layout with Hierarchy Viewer的文档中的一种方法

  

如果您使用的是Android模拟器,则可以跳过此部分。   否则,您需要按如下方式设置设备。

     

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

     

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

     

在开发计算机上设置环境变量ANDROID_HVPROTO = ddm。

     

此变量告诉Hierarchy Viewer使用ddm协议连接到设备,该协议与DDMS协议相同。该   需要注意的是连接的主机上只能有一个进程   到设备,所以你必须杀死任何其他DDMS会话才能运行   层次结构查看器。

export ANDROID_HVPROTO=ddm添加到.bash_profile,然后添加./.bash_profile

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

注意:我设置ddm而不重启Android Studio a,我无法对层次结构进行查看。一天后,我意识到了,并做了一些测试。我发现在设置ppm之后,最好重启android工作室。我想当android studio启动它会读取该配置,可以缓存它。

我没有卸载应用程序就没有测试它。

<强> d)。设置视图服务器

请不要在这里感到沮丧。启动视图服务器非常简单。

工具:ViewServer on github

将此添加到您的build.gradle

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

INTERNET文件中添加manifest权限

<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视图。

enter image description here

答案 1 :(得分:2)

最新的Android SDK工具25.3.0删除hierarchyviewer,您可以找到SDK工具更改here

答案 2 :(得分:0)

尝试重新安装设备驱动程序。在确保adb启动并运行之后,您应该能够通过设备管理器正确连接。