转储任何给定时刻出现的视图树[Android]

转储任何给定时刻出现的视图树[Android],android,android-view,Android,Android View,我正在尝试归档与hierarchyviewer工具相同的内容,该工具在设备或模拟器屏幕上的任何给定时刻都会转储视图树 但我希望它是一个运行在Android设备上的应用程序。此应用程序将像服务一样在后台运行,并将当前显示的视图转储到文本文件中 可能吗?是否有可用的代码示例 可能吗 没有 最接近的方法是实现AccessibilityService。这将更紧密地反映uiautomatorviewer功能,为您提供在层次视图中看到的内容的子集。这还需要用户进行双重选择:用户必须安装您的应用程序,并在“可

我正在尝试归档与hierarchyviewer工具相同的内容,该工具在设备或模拟器屏幕上的任何给定时刻都会转储视图树

但我希望它是一个运行在Android设备上的应用程序。此应用程序将像服务一样在后台运行,并将当前显示的视图转储到文本文件中

可能吗?是否有可用的代码示例

可能吗

没有

最接近的方法是实现AccessibilityService。这将更紧密地反映uiautomatorviewer功能,为您提供在层次视图中看到的内容的子集。这还需要用户进行双重选择:用户必须安装您的应用程序,并在“可访问性”区域的“设置”中激活它

可能吗

没有


最接近的方法是实现AccessibilityService。这将更紧密地反映uiautomatorviewer功能,为您提供在层次视图中看到的内容的子集。这还需要用户的双重选择:用户必须安装您的应用程序并在“可访问性”区域的“设置”中激活它。

据我所知,如果其他应用程序没有通过使用意图与您明确共享该信息,或者如果您拥有这些其他应用程序,则您无法访问这些应用程序

因此,基于这个限制,我打赌你不能通过常规方式访问其他应用程序的视图树。如果你选择了,我认为你不应该,因为这对其他应用程序来说是秘密的,你会在未经许可的情况下注册信息。事实上,hierarchyview使用的是某种直接使用Android内部私有库的技巧。就像截图一样,你不能使用默认的实现,而是使用这些测试工具


也就是说,检查一下,它显示了如何在前台获取当前应用程序。从这里开始,获取视图树应该是不可能的,但只要你可以调用该应用程序当前活动的getWindow,。

据我所知,如果其他应用程序没有明确地通过意图与你共享该信息,或者如果你拥有这些其他应用程序,你就无法访问这些应用程序

因此,基于这个限制,我打赌你不能通过常规方式访问其他应用程序的视图树。如果你选择了,我认为你不应该,因为这对其他应用程序来说是秘密的,你会在未经许可的情况下注册信息。事实上,hierarchyview使用的是某种直接使用Android内部私有库的技巧。就像截图一样,你不能使用默认的实现,而是使用这些测试工具


也就是说,检查一下,它显示了如何在前台获取当前应用程序。从这里开始,获取视图树应该是不可能的,但只要您可以对该应用程序的当前活动调用getWindow,。

我们是否可以重用hierarchyviewer工具中编写的代码并从中创建应用程序,在设备上,哪一个会做同样的事情?@A_用户:hierarchyviewer用于获取这些数据的方法仅在模拟器上可用,并且出于隐私和安全原因,仅通过adb可用。AccessibilityService选项提供了Google认为足够的中间地带,因此用户知道您的应用程序可以访问此信息。因此hierarchyviewer使用adb显示视图树?@A_用户:对不起,这里是adb,我指的是adb与之对话的Android内部流程。因此,我们可以重用hierarchyviewer源代码在Android应用程序中执行相同的操作,该代码将与设备上运行的adb服务器对话,然后它将转储视图树。是否可能。我们是否可以重用hierarchyviewer工具中编写的代码,并从中创建一个应用程序,在设备上执行相同的操作?@A_用户:hierarchyviewer用于获取这些数据的方法仅在模拟器上可用,甚至出于隐私和安全原因,也只能通过adb使用。AccessibilityService选项提供了Google认为足够的中间地带,因此用户知道您的应用程序可以访问此信息。因此hierarchyviewer使用adb显示视图树?@A_用户:对不起,这里是adb,我指的是adb与之对话的Android内部流程。因此,我们可以重用hierarchyviewer源代码在Android应用程序中执行相同的操作,该代码将与设备上运行的adb服务器对话,然后它将转储视图树。有可能吗?我觉得没有API可用于获取设备上运行的其他活动的窗口,我们只能在自己的活动/应用程序中执行此操作。所以这是不可能的。我觉得没有API可用于获取设备上运行的其他活动的窗口,我们只能在自己的活动/应用程序中执行。所以这是不可能的。