Как корневые приложения получают доступ к интерфейсу других приложений? - PullRequest
0 голосов
/ 11 июня 2019

Я хочу создать приложение, которое (с правами суперпользователя) может получить доступ к пользовательскому интерфейсу в другом приложении и нажимать кнопки на экране.Я видел, как это делается со многими приложениями макросов и некоторыми приложениями "бот".Я знаю, что они используют «администратора устройства», и я видел некоторых, которым нужно разрешение «наложение поверх других приложений».Я не ищу исчерпывающее руководство, и я знаю, что мне придется использовать какое-то программное обеспечение ocr для обработки элементов пользовательского интерфейса.Может кто-нибудь дать мне несколько советов?Пример: https://forum.xda -developers.com / showthread.php? T = 2241770 Спасибо за любую помощь!Тэн

1 Ответ

0 голосов
/ 22 июня 2019

Я не знаю, как ОНИ это делают, но один из возможных способов - через команду оболочки input.Я ожидаю, что обычные программы не имеют разрешения на его использование, но 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()));

, как упомянуто в Любой способ запуска команд оболочки на Android программно? .(Я немного адаптировал его и фактически не тестировал, так что это может занять некоторое время.)

Обратите внимание, что он не позволяет вам, например, видеть, где находятся кнопки, поэтому вы 'Вам нужно будет заранее знать, что вы делаете.

Вы также можете попробовать Instrumentation, как упомянуто здесь: Нажатие клавиши имитации Android

...