【问题标题】:Read output from shell command with pipes on Android在 Android 上使用管道读取 shell 命令的输出
【发布时间】:2018-01-14 06:14:22
【问题描述】:

我正在尝试在 android 应用程序 (Java) 中执行 shell 命令并读取输出。我可以读取大多数命令的输出,但是当我在命令中使用管道时,我什么也得不到。设备已root。

我找到了this,但它不想在 Android 上运行。我已经尝试过输出重定向,例如命令末尾的“2>&1”但没有运气。

提前致谢!

工作命令

pm 列出包

命令无效

pm 列出软件包 | grep com.myapp

代码:

public String executeCommand(String command) {
    String output = "";

        InputStream inputStream = Runtime.getRuntime().exec(command).getInputStream();

        while( inputStream.available() <= 0) 
            try { Thread.sleep(500); } catch(Exception ex) {}

        java.util.Scanner s = new java.util.Scanner(inputStream);
        while(s.hasNext())
            output += s.nextLine() + "\n";

            return output; 
}

为简洁起见,尝试捕获省略的块

【问题讨论】:

    标签: java android pipe


    【解决方案1】:

    现在已经两年多了,但是可以试试这个:

    改为:

    Runtime.getRuntime().exec(command);
    

    呼叫:

    String[] shell = {"sh", "-c", command};
    Runtime.getRuntime().exec(shell);
    

    【讨论】:

      【解决方案2】:

      我敢打赌,您的设备上没有安装grep。您可以通过启动 ADB shell 并输入 grep 来检查它,您应该会看到

      > adb shell
      $ grep
      grep: not found
      

      我建议您在 Java 中自行过滤结果,因为并非所有设备都预装了 grep。

      【讨论】:

      • grep 已安装在设备上,并且在 shell 上运行时正在工作。它输出到终端就好了,只是不输出到 java 程序。
      • 尽管如此,如果你想发布这个应用程序并且它会被用户使用,不要使用 grep,因为它不是安装在所有设备上的。自己用的话就ok
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多