我正在使用我的Android应用启动原生二进制文件。我想在我的应用程序的一个小窗口中显示该二进制文件的输出。我如何在TextView中显示输出或在小窗口中显示终端(首选)?
感谢。
答案 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中读取日志。