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

4

我正在尝试连接我的应用程序到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
3个回答

3
请参考使用层级查看器布局您的配置文件以了解如何使用层级查看器。
今天我在我的应用程序中使用层次结构查看器,在模拟器和真实设备上都遇到了类似的问题,即层次结构查看器树视图窗口变黑。
注意:对于较新版本的Android Studio,您可以通过工具 > Android > Android设备监视器 > 窗口 > 打开透视图... > 层次结构视图打开层次结构查看器。

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。然后你可以将其加入到 PATH 环境变量中或者为其创建一个别名。

我在用户路径下的 .bash_profile 中添加了 alias adb='/Users/roofe/Library/Android/sdk/platform-tools/adb',然后执行了 source ./.bash_profile。这样就可以使用 adb 命令了。

输出信息:

View Server关闭: Result: Parcel(00000000 00000000 '........')

View Server开启: Result: Parcel(00000000 00000001 '........')

如果 View Server 开启了,你的层次结构查看器应该能够正常工作。那么你就不需要阅读下面的内容了。

不幸的是,如果你的 View Server 关闭了,请继续进行以下操作。 我的模拟器和真机的 View Server 都已关闭。

b). 启动 View Server

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在真实设备上对此进行了限制。您可以在Andorid的WindowManageService.java源代码文件中找到相关代码。
if (!checkCallingPermission(Manifest.permission.DUMP, "startViewServer")) {
    return false;
} 

所以,如果你是天才破解者,你可以对你的设备进行 root 以移除这个限制。我没有做过。如果你尝试成功了,请向我展示。我会非常欣赏你的聪明才智。

这里我的模拟器可以工作,而真实设备不行。如果你的视图服务器仍然关闭,请继续操作。

c)使用ddm协议中的一种方法,详见 Android Studio 文档 用层次结构查看器 Profile Your Layout

如果您正在使用Android模拟器,则可以跳过此部分。否则,您需要按照以下步骤设置您的设备。 注意:您的设备必须运行Android 4.1或更高版本。 在您的设备上启用开发者选项。 在您的开发机器上设置环境变量ANDROID_HVPROTO = ddm。 这个变量告诉层次结构查看器使用ddm协议连接设备,这与DDMS协议相同。其中一个限制是主机上只能有一个进程连接到设备,因此您必须杀死任何其他DDMS会话来运行层次结构查看器。
将export ANDROID_HVPROTO = ddm添加到您的.bash_profile,然后source ./ .bash_profile。 删除已安装的应用程序,并重新启动Android Studio,然后安装您的应用程序,现在您可以查看它的层次结构。

注意: 我设置了ddm,没有重启Android Studio,我无法层次查看它。一天后,我意识到了这一点,并进行了一些测试。我发现在设置ppm后,最好重新启动android studio。我猜想当android studio启动时,它会读取该配置并缓存它。

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

d). 设置视图服务器

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

工具: GitHub上的ViewServer

将此添加到您的build.gradle

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

在清单文件中添加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);
    }
}

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

enter image description here


2

最新的Android SDK工具25.3.0已经删除了HierarchyViewer,您可以在这里找到SDK工具的更改。


你可以在 工具 > Android > Android 设备监视器 > 窗口 > 打开透视图... > 层次结构视图 中找到它,并参考我的答案 - LF00

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接