正在实践前两天论坛大侠写得关于 ADB 实现 ROBOTIUM 跨进程的问题。
@xuxu @qinggchu
实际操作的时候出了状况。
目前发现所有的 ADB SHELL 命令都实际没有执行。
CMD 直接进 ADB SHELL 都是可以用得。UIAUTOMATOR 可以 DUMP 出来。
但是在 ROBOTIUM 里面就是取不出来。
试了一下连 LS 都取不出。
C:\Users\yangch>adb shell
root@generic_x86:/ # ls
ls
直接进的是 ROOT 用户,这打印说明不用再 ROOT 了吧?
MANIFEST 也增加了 sharedUserId 的权限。
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:sharedUserId="android.uid.system"
/>
哪位大侠以前弄过?这里还有什么坑没填过去?还是 INSTRUMENT 的架构就不能直接调 ADB SHELL?
还是源 APK 也要修改一些内容?暂时搞不定了。。。求解救。
掉得是 XUXU 提供的 ADB 库。
附基本的代码:
Log.v("mainActivity",ShellUtils.getShellOut(ShellUtils
.shell("ls")));
调用链:
public static Process shell(String command) {
return process("adb shell " + command);
}
public static BufferedReader shellOut(Process ps) {
BufferedInputStream in = new BufferedInputStream(ps.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
return br;
}
public static String getShellOut(Process ps) {
StringBuilder sb = new StringBuilder();
BufferedReader br = shellOut(ps);
String line;
try {
while ((line = br.readLine()) != null) {
sb.append(line);
// sb.append(line + System.getProperty("line.separator"));
}
} catch (IOException e) {
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
private static Process process(String command) {
Process ps = null;
try {
ps = Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
}
return ps;
}