请参阅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);
}
}
现在,我可以在我的真实设备上运行层次结构视图了。