[老欧的问题]如何在应用内使用adb命令[待优化]
问题来源:
Robotium的测试是直接在手机上安装被测包,由于种种原因,启动图的验证,还有初始化状态的验证非常不方便.
如果直接卸载应用会导致Robotium脚本的运行失败,删除Data下文件夹比较担心会出现问题,也不够贴近用户.
想要通过代码直接删除,需要对应用的权限进行更改, 方法如: http://bbs.51cto.com/thread-1034446-1.html .过于复杂
也不知道有什么好的方法,所以,希望通过打开应用详细设置,然后点击按钮清除数据.
解决方案:
想到过很多种,但都没有实现.MontionEvent直接把被测应用调起点击,感觉是卡在Robotium不能跨应用上了.
能力有限,所以想到用最笨的方法,通过adb shell命令使用input tap进行点击.
在网上找到别人成功的代码,进行命令行调用.
/** * 在手机上执行adb命令,必须是root的手机,必须是root权限手机 * @param cmd String adb shell下命令 */ public void execShell(String cmd){ try{ //权限设置 Process p = Runtime.getRuntime().exec("su"); //获取输出流 OutputStream outputStream = p.getOutputStream(); DataOutputStream dataOutputStream=new DataOutputStream(outputStream); //将命令写入 dataOutputStream.writeBytes(cmd); //提交命令 dataOutputStream.flush(); //关闭流操作 dataOutputStream.close(); outputStream.close(); } catch(Throwable t) { t.printStackTrace(); } }
代价不得不说还是有的,比如测试设备需要是root的,比如之后的点击操作单纯靠touch坐标,可移植性也比较差.
意外收获:
这么个破东西耗了我一天多的时间,会的太少就是麻烦啊.还好最后找到解决方法了.
特别大的意外收获,就是以后再遇见需要跨应用操作的时候,可以用adb进行控制了.哦也.
待优化:
可能要等更加了解android才知道怎么才能直接清除了.