我正在尝试在ADM中连接我的应用,但遗憾的是,层次结构视图未显示。我应该如何将我的应用程序连接到ADM工具?
设备:Nexus 4
Os: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
答案 0 :(得分:4)
有关层次结构查看器的使用,请参阅Profile Your Layout with Hierarchy Viewer。
今天我使用层次结构查看器和我的应用程序,我在silulator和真实设备上得到了非常相似的问题,层次结构查看器树视图窗口变黑。
注意:对于较新版本的android studio,您可以使用Tools > Android > Android Device Monitor > Window > Open Perspective... > Hierarchy View
打开层次结构查看器
下面我将向您展示如何解决银器和真实设备上的问题。
信息:设备调试模式已开启,我不测试它是否对下面的结果有影响。
<强> 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)。启动查看服务器
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 on real device对此有所限制。您可以在Andorid的文件WindowManageService.java源代码中找到相关代码
if (!checkCallingPermission(Manifest.permission.DUMP, "startViewServer")) {
return false;
}
因此,如果你是一个天才的破解者,你可以根据你的设备取消这个限制。我没有成功。如果您尝试成功,请告诉我。我非常感谢你的聪明工作。
我的模拟器在这里工作。虽然真正的设备没有。如果您的视图服务器仍处于关闭状态,请继续。
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工作室。我想当android studio启动它会读取该配置,可以缓存它。
我没有卸载应用程序就没有测试它。
<强> d)。设置视图服务器
请不要在这里感到沮丧。启动视图服务器非常简单。
将此添加到您的build.gradle
allprojects {
repositories {
jcenter()
maven {url "https://jitpack.io"}
}
}
dependencies {
...
compile 'com.github.romainguy:ViewServer:017c01cd512cac3ec054d9eee05fc48c5a9d2de'
}
在INTERNET
文件中添加manifest
权限
<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);
}
}
到现在为止,我可以在真实设备上运行Hierarchy视图。
答案 1 :(得分:2)
最新的Android SDK工具25.3.0删除hierarchyviewer,您可以找到SDK工具更改here
答案 2 :(得分:0)
尝试重新安装设备驱动程序。在确保adb启动并运行之后,您应该能够通过设备管理器正确连接。