首页 > 解决方案 > 在 Android 上运行 shell 命令不会返回任何内容

问题描述

我一直在尝试获取命令的输出好几个小时,但没有结果。有这个代码:

val byteArry = ByteArray(1024)
 var Holder: String = ""
 try {
      val processBuilder = ProcessBuilder("/system/bin/ls")
      val process = processBuilder.start()
      val  inputStream = process.getInputStream()
      while (inputStream.read(byteArry) !== -1) {
            Holder += String(byteArry)
      }
      inputStream.close()
      } catch (ex: IOException) {
        ex.printStackTrace()
      }
      println("Output: " + Holder)

我正在尝试使用不同的(kotlin 和 java)方法从任何命令接收一些输出,但我什么也没收到。也没有错误。使用 Android Studio 中的文件资源管理器,我可以看到 ls 位于该位置。

标签: javaandroidkotlin

解决方案


我猜有一个错误发生。您可以通过设置ProcessBuilder.redirectErrorStream(之前start())将其设置为给定值或通过调用inputStream单独获取错误来检查它。InputStreamProcess.getErrorStream()

目前尚不清楚您要达到什么目标,因此很难给您一个明确的答案。您当前的代码只是试图运行位于/system/bin/ls(来自工作目录)的进程。如果您实际上是在尝试运行lsfor directory /system/bin/,那么您将希望将目录作为参数发送到ProcessBuilder,如下所示:

  val processBuilder = ProcessBuilder("ls", "/system/bin/")

推荐阅读