我正在使用我的 Android 应用程序来启动本机二进制文件。我想在我的应用程序的一个小窗口中显示该二进制文件的输出。我将如何在 TextView 中显示输出或在小窗口中显示终端(首选)?
谢谢。
我正在使用我的 Android 应用程序来启动本机二进制文件。我想在我的应用程序的一个小窗口中显示该二进制文件的输出。我将如何在 TextView 中显示输出或在小窗口中显示终端(首选)?
谢谢。
Alex 链接到的文章的要点是Runtime.exec()
返回一个Process
对象,它允许您stderr
通过Process.getOutputStream()/getErrorStream()
. 获取它们,在线程中读取它们(它们会正确阻塞 - 您不想阻塞 UI 线程),将数据传递回 UI 线程。好多了,好多了。我撤销我之前的回答。
该文章还建议将流包装在 a 中BufferedReader
,以便您可以执行readLine
.
这是一个方案。这个不需要NDK。
您在应用程序的数据目录中创建一个临时文件。您运行二进制文件,在命令行中使用Runtime.exec()
. 您必须指定的命令行不会调用二进制文件本身,而是调用sh
,并且命令行参数之一将是重定向:>myfile.txt
.
然后,您启动一个读取同一文件的工作线程。您需要仔细实施新数据检测——因为这是一个文件,而不是管道,一旦到达文件末尾,读取操作将简单地终止;在出现新数据之前它不会阻塞。
Activity.runOnUiThread()
然后,您使用或将数据从工作线程传递Handler.post()
到主线程,用于更新 TextView 的内容。
一种更简洁的方法是创建一个管道对,并使用从管道句柄到文件句柄值 1 ( )mkfifo()
将输出重定向到适当的位置。这就是他们在 C/Linux 世界中通常的做法。那里可能有一个Android示例,我从来没有这样做过。dup2()
stdout
哦,在你做所有这些之前,请确保二进制文件没有更可口的界面。通常情况下,Linux 二进制文件基于静态/动态库,其中包含所有美味的功能,可以链接并直接调用。
编辑:特别是如果它是logcat
. 还有其他方法可以在 Android 中读取日志。