[老欧的问题]如何在应用内使用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才知道怎么才能直接清除了.




posted @ 2014-06-19 22:11  老歐  阅读(233)  评论(0编辑  收藏  举报