如何在TextView中显示终端窗口输出



我正在使用我的Android应用程序来启动本机二进制文件。我想在应用程序的一个小窗口中显示该二进制文件的输出。如何在TextView中显示输出或在小窗口中显示终端(首选)?

谢谢。

Alex链接到的文章的要点是Runtime.exec()返回一个Process对象,它允许您通过Process.getOutputStream()/getErrorStream()以Java流的形式获得流程的标准输出(以及stderr)。获取它们,在线程中读取它们(它们确实进行了适当的阻塞——你不想阻塞UI线程),将数据传递回UI线程。好多了。我撤消了以前的回答。

本文还建议将流包装在BufferedReader中,以便执行readLine

这里有一个方案。NDK对这一点没有必要。

在应用程序的数据目录中创建一个临时文件。运行二进制文件,在命令行中使用Runtime.exec()指定相同的文件作为输出方向。您必须指定的命令行不是调用二进制文件本身,而是调用sh,其中一个命令行参数是重定向:>myfile.txt

然后启动一个工作线程来读取同一个文件。您需要小心地实现新的数据检测——因为这是一个文件,而不是管道,一旦到达文件末尾,读取操作就会终止;在出现新数据之前,它不会阻塞。

然后使用Activity.runOnUiThread()Handler.post()将数据从辅助线程传递到主线程,用于更新TextView的内容。

更干净的方法包括使用mkfifo()创建一个管道对,并使用dup2()将输出从管道句柄重定向到文件句柄值1(stdout)。在C/Linux世界中,他们通常就是这样做的。可能有一个Android的例子,我从来没有这么做过。

哦,在你做所有这些之前,请确保二进制文件没有一个更容易接受的接口。通常情况下,Linux二进制文件基于一个静态/动态库,其中有所有美味的功能,可以直接链接和调用。

编辑:特别是如果是logcat。还有其他方法可以在Android中读取日志。

最新更新