一个Android应用程序可以通过UI Automator控制另一个应用程序吗?

时间:2013-06-06 04:42:30

标签: android accessibility uiautomator

我正在尝试编写可以部署在目标设备上的Android应用程序/服务。该应用程序可用作钩子来远程控制目标设备。从Jelly Bean版本开始,可以使用UI Automator实现,它提供了类似的功能。但是,似乎UI Automator只能通过ADB接口使用。在设备上运行的应用程序无法直接使用UI Automator(???)。我试图找到一个可以在没有亚行帮助的情况下工作的解决方案。例如,挂钩可以将套接字监听为protobuf服务器。客户端可以向钩子发送命令以远程控制和设备。我查看了Andorid SDK源代码。看起来唯一的方法是使用android辅助功能API。我想知道是否有更好的方法?

3 个答案:

答案 0 :(得分:8)

可以从应用程序运行UiAutomator,您只需要在设备上安装Test jar并为您的应用程序授予权限。

然后,您可以从应用程序中致电:

uiautomator runtest Test.jar -c com.package.name.ClassName -e key value

您的设备将执行您的UiAutomatorTestCase将执行的任何操作。

快速举例:

Process rt = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(rt.getOutputStream());

os.writeBytes("uiautomator runtest Testing.jar -c com.hey.rich.CalculatorDemo" + "\n");
os.flush();
os.writeBytes("exit\n");

答案 1 :(得分:4)

除非您具有su权限,否则您需要ADB连接(通过WIFI或Cable)来运行UiAutomator测试用例。使用su权限,您可以从设备本身运行uiautomator。

在UiAutomator测试用例中,您可以实现socket,webSocket和其他一些通信协议,因此您的测试用例将公开与外界的通信连接,其他设备可以连接到它。在这种情况下,只需要一次ADB连接来运行测试用例,然后就可以断开连接。

答案 2 :(得分:1)

您可以远程执行代码。

如果您的设备已植根,则可以先将设备与计算机连接,然后使用adb tcpip 5555.这将转发5555上的侦听端口,然后您可以在将在设备上运行的计算机上执行脚本。只需使用adb -s shell