2013-06-06 37 views
8

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

回答

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"); 
+0

你好,我如何得到Test.jar文件?我可以从Android Studio运行uiautomator测试。但是我从构建中获得APK,而不是Jar文件。你能帮忙吗? – HaseebR7

+0

我有一段时间没有做这个,但[这个链接](https://looksok.wordpress.com/2014/02/08/uiautomator-in-eclipse/)似乎对我很有用。 基本上只是: *创建你的项目:'android create uitest-project -n yes -t 10 -p .' * build your jar:'ant build' – tophernuts

+0

thanks!这有助于 – HaseebR7

4

你需要ADB连接(通过WiFi或Cable)运行UiAutomator测试用例,除非你有苏权限。有了su权限,您可以从设备本身运行uiautomator。

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

1

你可以像远程执行你的代码。

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

相关问题