Android 调试监视器层次结构视图未显示

2024-01-12

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

设备:Nexus 4

操作系统:4.3.3

Error:

    [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

参考使用层次结构查看器分析您的布局 https://developer.android.com/studio/profile/hierarchy-viewer.html用于层次结构查看器的使用。

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

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

下面我将向您展示如何解决模拟器和真机上的问题。

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

A)。检查设备是否打开查看服务器

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

Note:如果你得到

找不到命令 adb

adb一般在sdk路径下,我的是在/Users/roofe/Library/Android/sdk/platform-tools/adb。然后您可以将其添加到路径或为其创建别名。

I put alias adb='/Users/roofe/Library/Android/sdk/platform-tools/adb' in the .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 对此有限制。您可以在文件中找到相关代码窗口管理服务.java http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/com/android/server/wm/WindowManagerService.java?av=f安卓源代码

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

因此,如果您是天才破解者,您可以对设备进行 root 操作以消除此限制。我还没来得及如果你的尝试成功了,请告诉我。我将非常感谢你的聪明工作。

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

c).使用ddm协议,Android studio 文档中的一种方法使用层次结构查看器分析您的布局 https://developer.android.com/studio/profile/hierarchy-viewer.html?hl=es

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

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

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

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

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

Add export ANDROID_HVPROTO=ddm给你的.bash_profile然后来源./.bash_profile.

删除已安装的应用程序,然后重启Android Studio,然后安装您的应用程序,您现在可以分层查看它。

Note:我在没有重新启动Android Studio的情况下设置了ddm,我无法层次结构查看它。一天后,我意识到了这一点,并做了一些测试。我发现设置ppm后,最好重新启动android studio。我想当 android studio 启动时它会读取该配置,可以缓存它。

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

d).设置视图服务器

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

Tool: github 上的 ViewServer https://github.com/romainguy/ViewServer

将其添加到您的build.gradle

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

Add INTERNET的许可manifest file

<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);
    }
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 调试监视器层次结构视图未显示 的相关文章

随机推荐

  • C# NUnit TestCaseSource 传递参数

    我有以下方法可以生成一组测试用例 public IEnumerable
  • IntelliJ:无法解析符号“springframework”

    我正在尝试用 Spring 开始我的第一个项目 我使用 IntelliJ idea 而且我对它也有点陌生 但无论如何 我按照 Jetbrains 网站上写的步骤操作 我不知道我做错了什么 但我在默认创建的文件的第一个文件上遇到了很多错误 B
  • 定时器作业功能的范围

    我第一次写定时器作业 我正在遵循可以通过谷歌搜索获得的示例作为我的参考 在许多此类文章中 我遇到了被激活到网站集级别或网站级别的计时器作业功能 我觉得这很奇怪 因为特定 Web 应用程序只能有一个计时器作业实例 难道所有计时器作业功能都不应
  • 在 mvc 5 项目中安装 ninject mvc 3 后出现问题

    我创建了新的 asp mvc 5 项目 项目目标 NET 4 5 我安装了 ninject mvc 3 nuget 包 但是当我运行项目时我收到此错误NinjectWebCommon cs in CreateKernel method 发生
  • 每个 x 轴刻度具有不同因子顺序的条形图

    我正在回答这个问题 https stackoverflow com questions 74283906 overlaying geom bar and missing values L o 想要一个条形图stat identity and
  • ConvertTo-SecureString 在不同的用户帐户上运行时无需密钥,有没有办法(使用正确的凭据)让不同的用户正常工作?

    我有一个可以完全访问所有帐户的虚拟机 我的下面的问题都是在same机器 只是在不同的用户帐户下 如果我登录domain user1并运行以下 PowerShell 来生成 a 的字符串SecureString SecurePassword
  • Flutter:cloud_firestore 的构建错误:版本“0.7.4”以上

    我花了几个小时试图解决构建问题 直到我意识到这是由于 Flutter 插件 cloud firestore 造成的 版本 0 7 4 对于 Android 和 iOS 来说都可以正常构建 但任何高于 0 7 4 的版本 例如 0 8 2 1
  • 为什么只读属性仍然允许使用 KVC 写入

    我正在学习 Mac OS X 编程 中的 键值编码 一章 我构建了一个带有滑块和标签的界面 两者都绑定到 fido 一个 int 如果我将 fido 的属性设置为只读 移动滑块仍然会导致标签更改其值 我原以为我会因此遇到某种错误 如果该属性
  • 如何使用 styled-components 和 Material-UI 来主题化组件?

    是否有可能使用材质 UI 主题 道具样式组件 using 打字稿 材质 UI 代码示例 const useStyles makeStyles theme Theme gt root background theme palette prim
  • 用于检测圆括号或方括号的正则表达式

    我正在尝试查找给定字符串的机场代码 例如 JFK or FRA 使用正则表达式 我不必确定提到的机场代码是否正确 大括号几乎可以包含任意三个大写字母 这是我当前的解决方案 它适用于圆括号 但不适用于方括号 A Z 3 Thanks 您的正则
  • 使用 Code::Block 和 MinGW 构建静态库

    我在 Windows 机器上使用 Code Blocks 和 MinGW32 我正在尝试构建一个静态库 我创建了一个虚拟的 hello world 项目 有一个单main c项目中的文件 但是 当我构建它时 我收到以下消息 似乎没有错误或警
  • iOS App场景下的安全密钥,安全吗?

    我试图隐藏我在一个应用程序中使用的 2 个秘密 据我了解 钥匙串是一个好地方 但在提交应用程序之前我无法添加它们 我想到了这个场景 通过将秘密传播到其他实体中以掩盖它们 将秘密预先播种到我的应用程序的 CoreData 数据库中 我在该应用
  • joomla模块开发与表单-如何处理

    我正在创建一个简单的 Joomla 2 5 模块 它将有一个 html 表单 mod mymodule tmpl default php
  • 不使用 sort 方法按字母顺序对数组进行排序

    我一直在学习 Chris Pine 的 Ruby 教程 目前正在研究一种无需使用即可对名称数组进行排序的方法sort 我的代码如下 它工作完美 但比我想象的更进一步 puts Please enter some names name get
  • 数组对象是否显式包含索引?

    从学习 Java 的第一天起 各种网站和许多老师就告诉我 数组是连续的内存位置 可以存储指定数量的相同类型的数据 由于数组是一个对象 并且对象引用存储在堆栈中 而实际对象位于堆中 因此对象引用指向实际对象 但是当我遇到如何在内存中创建数组的
  • 如何使用 AWS SAM 启用 CORS

    我正在尝试在我的 AWS SAM 应用程序中启用 CORS 这是我的片段template yaml Globals Api Cors AllowMethods AllowHeaders AllowOrigin Resources MyApi
  • Firebase 动态链接生成器中的 DFL 参数

    我需要使用 Android 上的 Dynamic Link Builder API 以编程方式构建动态链接 https firebase google com docs dynamic links android create https
  • 即使以管理员身份登录也无法删除文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 请有人告诉我我做错了什么 我正在尝试通过命令行删除隐藏文件夹 我以管理员身份运行命令行 但仍然收到消息访问权限不足 这是我的命令行的屏幕截
  • 是否可以以编程方式配对 Android 蓝牙设备?

    目前我正在使用 backport android bluetooth2 jar 文件与 Android 1 5 进行蓝牙编程 每当设备配对失败时 它都会填充 passKey 的警报对话框 如果我给出 passkey 那么在我的日志中我会收到
  • Android 调试监视器层次结构视图未显示

    我正在尝试在 ADM 中连接我的应用程序 但不幸的是层次结构视图未显示 我应该如何将我的应用程序连接到 ADM 工具 设备 Nexus 4 操作系统 4 3 3 Error 2014 02 06 13 00 14 hierarchyview