0

最近在反编译应用程序时,我发现一些应用程序的清单似乎没有为我想要的视图指定活动。例如,如果 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}}}

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

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

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

4

1 回答 1

0

我最终将AutoInputMacroDroid结合使用,根据文本选择应用程序主(启动)屏幕的特定元素。这让我无需依赖触摸事件坐标即可进入应用程序的任何屏幕,因为这些应用程序的开发人员通常会在随后的更新中切换菜单项位置。

这是详细的 AutoInput 过程(我想它也可以与 Tasker 集成):

  1. 安装上述两个应用程序。
  2. 为 MacroDroid 选择动作时,选择“Locale/Tasker Plugin”选项。这将列出 AutoInput 的选项,以及您下载的不同插件的任何其他选项,我想。
  3. 从列表中选择“自动输入操作”选项。
  4. 从下一个屏幕中选择“操作”,然后选择“单击”。
  5. 对于“字段类型”,请选择“文本”,或您知道的有关您通常会选择进入所需屏幕的菜单/按钮/元素的任何其他信息。我们谈论的是应用程序主(启动)屏幕上存在的菜单/按钮/元素。
  6. 用菜单/按钮/元素的文本填写“字段文本”。
  7. 完成后点击右上角的复选标记,它会将您返回到 MacroDroid。

几点注意事项:

  • 菜单/按钮/元素必须在主(启动)屏幕上可见,以便 AutoInput 识别和选择它。我试图打开的初始菜单项只能通过先向下滚动来访问。为了解决这个问题,我告诉 MacroDroid 首先运行一个带有“输入滑动”命令的脚本,以使菜单项可见。
  • 如果您的目标菜单/按钮/元素不在主(启动)屏幕上,您将必须使用后续的自动输入操作来跟进您的初始自动输入操作,直到您到达您想要的菜单/按钮/元素/屏幕。我想要的屏幕从主(启动)屏幕中删除了两次。

  • 也许这是不言而喻的,但我用适当的暂停(在 MacroDroid 中,Actions-->'Wait Before Next Action')分隔每个 AutoInput Action 以选择每个菜单/按钮/元素,同时考虑屏幕加载时间。

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

于 2017-09-03T10:58:56.057 回答