您的位置:首页 > 移动开发 > Android开发

[老欧的问题]如何在应用内使用adb命令[待优化]

2014-06-19 22:11 323 查看
问题来源:

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才知道怎么才能直接清除了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息