正在实践前两天论坛大侠写得关于 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;
    }


↙↙↙阅读原文可查看相关链接,并与作者交流