我正在做一个根植于手机的小型概念验证,它依赖于能够读取dumpsys
输出。
如果我像这样在运行 Android 11 的(根)手机上调用 dumpsys,使用 adb:
adb shell dumpsys telephony.registry | grep "mCi="
我得到一个很长的打印输出。包含手机信号塔 ID 的行的grep
过滤器,但这在这里不应该很重要(这只是一个示例)。现在我试图在一个非常简单的应用程序中执行相同的命令,并记录它的输出,如下所示:
private fun test() {
try {
val process = Runtime.getRuntime().exec("su dumpsys telephony.registry | grep \"mCi=\"")
val bufferedReader = BufferedReader(InputStreamReader(process.inputStream))
val string = bufferedReader.readText()
Timber.d("output: $string")
bufferedReader.close() // do I need this?
} catch (e: IOException) {
// handle Exception
}
}
我根本没有输出(string
长度为0)。如果我用类似这样的简单命令替换我的进程命令:Runtime.getRuntime().exec("echo 'abcde'")
输出按预期记录(output: 'abcde'
)。
我还尝试缩短可能的输出,以防问题通过附加--max-count=1
grep 仅输出找到的第一行。同样,它使用 adb 工作,在代码中不起作用。
我究竟做错了什么?
(如果有人不知道示例中的那一行是什么,我正在使用Timber打印我的日志。)