root应用如何访问其他应用的ui?

How do root apps access the ui of other apps?

我正在寻找一个应用程序,它(具有 root 权限)可以访问另一个应用程序上的 ui 并单击屏幕上的按钮。我已经看到许多宏应用程序和一些 "bot" 应用程序都这样做了。我知道他们使用 'device administrator' 并且我看到一些需要 'overlay over other apps' 许可。我不是在寻找全面的 guide,我知道我必须使用某种 ocr 软件来处理 ui 元素。有人可以给我一些指示吗?示例:https://forum.xda-developers.com/showthread.php?t=2241770 谢谢你的帮助! 泰恩

我不知道他们是怎么做到的,但一种可能的方法是通过 input shell 命令。我希望普通程序没有使用它的权限,但是 adb shell 可以,而且根目录程序大概可以。用法打印如下:

Usage: input [<source>] <command> [<arg>...]

The sources are:
      mouse
      keyboard
      joystick
      touchnavigation
      touchpad
      trackball
      stylus
      dpad
      touchscreen
      gamepad

The commands and default sources are:
      text <string> (Default: touchscreen) [delay]
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

你会做类似的事情

List<String> commandLine = Arrays.asList("input touchscreen swipe 500 10 500 500 100".split(" "));
Process process = Runtime.getRuntime().exec(commandLine);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

Any way to run shell commands on android programmatically? 中所述。 (我已经稍微调整了一下,还没有实际测试过,所以可能需要一些摆弄。)

请注意,它不允许您查看按钮的位置,因此您必须事先知道自己在做什么。

您也可以尝试 Instrumentation,如此处所述:Android simulate key press