0

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

谢谢。

4

2 回答 2

1

Alex 链接到的文章的要点是Runtime.exec()返回一个Process对象,它允许您stderr通过Process.getOutputStream()/getErrorStream(). 获取它们,在线程中读取它们(它们会正确阻塞 - 您不想阻塞 UI 线程),将数据传递回 UI 线程。好多了,好多了。我撤销我之前的回答。

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

于 2012-10-01T23:59:36.470 回答
0

这是一个方案。这个不需要NDK。

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

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

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

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

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

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

于 2012-10-01T15:37:39.250 回答