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

时间:2012-10-01 14:09:12

标签: android android-layout android-ndk

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

该文章还建议将流包裹在BufferedReader中,以便您可以执行readLine

答案 1 :(得分:0)

这是一个方案。 NDK不是必需的。

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

然后启动一个读取同一文件的工作线程。您需要仔细实施新的数据检测 - 因为这是一个文件,而不是管道,读取操作将在文件结束时终止;在新数据出现之前,它不会阻止。

然后使用Activity.runOnUiThread()Handler.post()将工作线程中的数据传递给主线程,用于更新TextView的内容。

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

哦,在你完成所有这些之前,请确保二进制文件没有更可口的界面。 Linux二进制文件通常基于静态/动态库,其中包含所有可用的功能,可以直接链接和调用。

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