查找非您的应用的所有可用 activities/fragments

Finding all available activities/fragments for an app that's not yours

我最近在反编译应用程序时发现,一些应用程序的清单似乎没有为我想要的视图指定活动。例如,如果 com.example.app 在我想要的视图上并且我 运行 以下命令:

dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

结果输出将类似于:

mCurrentFocus=Window{9280f2a u0 com.example.app/com.example.app.MainSubMenu}
mFocusedApp=AppWindowToken{da37759 token=Token{9d56fa0 ActivityRecord{5c490a3 u0 com.example.app/.MainSubMenu t98}}}

这很好,但是当我所在的屏幕显然是 subactivity/subview/fragment 时,dumpsys 和 logcat 都不会向我显示此视图的完整路径。简而言之,我想找到 fragment/view 的名称并直接启动它。这种语法看起来很有希望实现片段视图启动(可能有一些变化):

am start -n com.example.app/.MainSubMenu -e :android:show_fragment com.example.app.somefragmentview

但我不确定如何找到每个 activity 应用程序的所有片段名称。

我最终根据文本使用了 AutoInput in combination with MacroDroid 到 select 应用程序主(启动)屏幕的特定元素。这使我无需依赖触摸事件坐标即可进入应用程序的任何屏幕,因为这些应用程序的开发人员通常会在后续更新时切换菜单项位置。

下面是详细的自动输入过程(我想它也可以与 Tasker 集成):

  1. 安装上述两个应用程序。
  2. 当select为 MacroDroid 执行动作时,选择 'Locale/Tasker Plugin' 选项。我想这将列出 AutoInput 的选项,以及您下载的不同插件的任何其他选项。
  3. 从列表中选择 'AutoInput Action' 选项。
  4. Select 'Action' 从下一个屏幕开始,然后 'Click'.
  5. 对于 'Field Type' 选择 'Text' 或您知道的关于 menu/button/element 的任何其他信息,您通常会 select 进入您想要的屏幕。我们谈论的是存在于您应用的主(启动)屏幕上的 menu/button/element。
  6. 用 menu/button/element 的文本填写 'Field Text'。
  7. 完成后点击右上角的复选标记,它会return你到 MacroDroid。

一些注意事项:

  • menu/button/element 必须在主(启动)屏幕上可见,以便 AutoInput 识别和 select 它。我试图打开的初始菜单项只能通过先向下滚动才能找到。为了解决这个问题,我告诉 MacroDroid 运行 一个带有 'input swipe' 命令的脚本首先使菜单项可见。
  • 如果您的目标 menu/button/element 不在主(启动)屏幕上,您将必须跟进您的初始自动输入操作和后续自动输入操作,直到到达 menu/button/element/你想要的屏幕。我想要的屏幕两次从主(启动)屏幕上移除。

  • 也许不言而喻,但我用适当的停顿(在 MacroDroid 中,Actions-->'Wait Before Next Action')将每个 AutoInput Action 分隔为 select 每个 menu/button/element 同时考虑屏幕加载时间。

我意识到这有点迟钝,但不知道如何从 Logcat 中提取(有额外的)信息,这是唯一不强迫我依赖坐标的可用解决方案用于触摸事件。希望这提供了一个可行的替代方案,直到有人 finds/offers 找到从活动中提取原始额外数据的方法。