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

testBlue · 2016年09月08日 · 最后由 testBlue 回复于 2017年03月16日 · 2444 次阅读
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),换了其他手机就可以

Hong 回复

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

jinll 回复

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册