查找不属于您的应用的所有可用活动/片段

时间:2017-08-31 10:00:01

标签: terminal adb logcat dumpsys

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

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

1 个答案:

答案 0 :(得分:0)

我最终使用AutoInputMacroDroid结合使用,根据文字选择应用主(发布)屏幕的特定元素。这使我可以访问应用程序的任何屏幕而无需依赖触摸事件坐标,因为这些应用程序的开发人员通常会通过后续更新来切换菜单项位置。

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

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

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

    • 也许毋庸置疑,但我将每个AutoInput动作与适当的暂停分开(在MacroDroid中,动作 - >'等待下一个动作')以选择每个菜单/按钮/元素同时占用屏幕加载时间。

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