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 调试监视器层次结构视图未显示 的相关文章

  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Service 和 IntentService,运行从服务器轮询数据库值的服务哪个更好?

    我读过很多关于Service and IntentService 然而 当做出决定时 我没有足够的信心选择使用哪种类型来创建一个后台服务 该服务将在一定时间间隔内从数据库轮询数据 并在获得所需数据时停止它 因为数据代表请求的状态 例如 订购
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android Library项目使用gradle在命令行编译时无法导入另一个库项目的R类

    我的 android 项目有这样的结构 ProjectDir settings gradle MyApp depends on LibraryA and LibraryB gt build gradle gt All the other a
  • 出现错误错误:res/menu/mainMenu.xml:文件名无效:必须仅包含[a-z0-9_。]

    我是安卓新手 刚刚开始使用 我在 res 文件夹中创建了一个文件 menu mainMenu xml 但我得到了错误 Error res menu mainMenu xml invalid file name must contain on
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • Camera.open()返回NULL Android开发

    我正在按照构建相机应用程序的教程进行操作http developer android com tools device html http developer android com tools device html我对 Camera o
  • Android 服务是否有办法检测设备何时锁定?

    我有一个 Android 服务 我希望在设备锁定时执行操作 我想澄清一下 我对屏幕开 关状态不感兴趣 我知道如何使用带有 Intent ACTION USER PRESENT 和 KeyguardManager inKeyguardRest
  • Android Studio:未找到 Gradle DSL 方法:“classpath()”

    首先 我已阅读所有其他解决方案帖子以及有关迁移到 1 0 的官方文档 到目前为止 还没有任何效果 Error Error 23 0 Gradle DSL method not found classpath Possible causes
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 获取其他指针的MotionEvent.getRawX/getRawY

    我可以获取其他指针的MotionEvent getRawX getRawY 值吗 MotionEvent getRawX API 参考 http developer android com reference android view Mo

随机推荐

  • 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