UiAutomator uiautomator2.0 中遇到的问题,请技术同学指教下~

testBlue · September 08, 2016 · Last by testBlue replied at March 16, 2017 · 1598 hits
clearAppData("pm clear cn.test.testui");

public void clearAppData(String string){
BufferedReader bfrBufferedReader = null;
String lineString = null;
InputStream isInputStream = null;
InputStreamReader isInputStreamReader = null;

try {
Process process = Runtime.getRuntime().exec(string);
isInputStream = process.getInputStream();
isInputStreamReader = new InputStreamReader(isInputStream);
bfrBufferedReader = new BufferedReader(isInputStreamReader);
while((lineString = bfrBufferedReader.readLine())!=null){
System.out.println(lineString);
}
} catch (IOException e) {
System.out.println("false!!!!!!!!!!!!");
}
}

然后运行完会报错,如图:

请大神们指教下这是由于什么原因导致的呢,我只是想清除下app的缓存而已。。。

共收到 15 条回复 时间 点赞

还没有写过这种,同样等待答案,后面报错的提示,能根据这个寻找错误吗?我在有点好奇,你要InputStream的什么东西尼,是不是应该是输出流的东西吗?

#1楼 @Vence 我理解的是需要开启一个线程,然后通过传入包的名称调用adb中清除缓存的命令,这个错误提示肯定是搜索过了,但是结果和预期不太一样

不是有execShell的方法嘛

#3楼 @carl 您说的对,是有这个方法的,但是。。。用过了,还是会报这个错误,我发现了,传入的值如果是“pm clear”,就不行,"am start"就没事,我都郁闷了,难道就不能用pm清除缓存吗

#4楼 @testblue
有可能哦,这也简单,进入设置,从界面上清就好啦

#5楼 @carl 就是说通过uiautomator进行ui识别进入到系统设置中,清除缓存后然后再回到页面上来是吧~

在我这边已经试过,没有问题;换台手机试试,小伙伴

#7楼 @UDLD 请问您使用的是哪种方式,是execShell的方式还是我问题中的方式呢,而且这个方法只能在api21和android5.0以上才能用

#8楼 @testblue 我是在我们这边框架里写的,写在Java方法里,然后在测试方法中调用;测试方法是在用反射调用执行的。

#10楼 @UDLD 真心感谢这位仁兄,我用了其他手机,这个方法没问题,可以直接用!!是手机权限的问题,和机型有关的,这个以后有时间再去研究,目前以实现为主,非常感谢~不过楼上的哥们说调用系统设置其实也可以。。。

用InstrumentationRegistry获取target的Context,然后清楚缓存,可能涉及到一些权限,你要有签名工具就更好了

@testblue 你有试过在sd卡下创建txt文件吗,好像也有权限问题,我用的三星S6,6.0的系统,sd卡读写权限也已经加过了,还是一直提示权限问题:java.io.IOException: open failed: EACCES (Permission denied),换了其他手机就可以

testBlue #14 · March 16, 2017 作者
Hong 回复

这个还真是手机问题,有些手机就可以,有些就不行

testBlue #15 · March 16, 2017 作者
jinll 回复

辛苦,确实是个别机型权限问题

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up