参考使用层次结构查看器分析您的布局 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);
}
}
现在,我可以在我的真实设备上运行层次结构视图。