2013-06-06 36 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

相關問題