【问题标题】:Android Debug Monitor hierarchy view not showingAndroid 调试监视器层次结构视图未显示
【发布时间】:2014-03-03 00:53:16
【问题描述】:

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

设备:Nexus 4

操作系统: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 ddms


    【解决方案1】:

    请参阅Profile Your Layout with Hierarchy Viewer 了解层次结构查看器的用法。

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

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

    下面我将向您展示如何在 silulator 和真机上解决问题。

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

    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)。启动 View 服务器

    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   '........')
    

    大部分真机无法启动视图服务器。为了安全起见,真机上的安卓对此有限制。您可以在文件WindowManageService.javaAndorid的源代码中找到相关代码

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

    因此,如果您是天才破解者,您可以通过 root 设备来消除此限制。我没有成功。如果您的尝试成功,请告诉我。我会非常感谢您的出色工作。

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

    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 studio。我猜当android studio启动时它会读取该配置,可以缓存它。

    我没有在没有卸载应用的情况下测试它。

    d)。设置视图服务器

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

    工具:ViewServer on github

    将此添加到您的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);
        }
    }
    

    现在,我可以在我的真实设备上运行层次结构视图了。

    【讨论】:

      【解决方案2】:

      最新的Android SDK Tools 25.3.0 移除hierarchyviewer 你可以发现SDK 工具的变化here

      【讨论】:

      • 你可以找到它Tools &gt; Android &gt; Android Device Monitor &gt; Window &gt; Open Perspective... &gt; Hierarchy View 并参考我的answer
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-16
        • 1970-01-01
        • 2017-07-11
        • 2018-09-14
        • 2015-09-23
        • 2015-06-10
        • 2017-10-03
        相关资源
        最近更新 更多