我正在寻找一种在简单的Android应用中重定向/捕获本机库的stdout输出的方法。我已经看到了几个帖子,但我找不到问题的答案。
我希望尽可能避免修改现有的本机库。我的第一个冲动是使用fifo文件并重定向本机库的输出。我似乎无法通过对Runtime.getRuntime()。exec(“mkfifo(,0666)”)的调用。我正在尝试在/ data / data /中创建文件,但程序运行后该文件似乎不存在。我似乎也无法在Android文件系统中找到'mkfifo'(通过adb shell)。
几个愚蠢的问题: - mkfifo在哪里? - 我是否能够在程序运行后看到fifo文件,或者在运行上述命令后是否有更可靠的方法来测试fifo的存在? - 还有其他/更好的方法吗?
感谢。
答案 0 :(得分:1)
您想将其专门重定向到文件吗?然后你可能想做的是:
int fd = open(filename, "w");
dup2(fd, 1);
close(fd);
我不知道这将如何影响Java子系统。
另请注意,/data/data
可能无法写入。应用程序沙箱位于/data/data/com.mypackage/
下,Android希望您通过Context.getDir()
为您的数据创建子目录。 /sdcard
始终可写,但您必须先检查可用性 - 根据定义,卡是可移动存储。
如果重定向到文件不是您的最终愿望,那么pipe()
可能是更好的选择。 {1}将写入结束为1,并从读取结束读取,最好是在不同的线程中。然后由您决定如何处理数据。
答案 1 :(得分:0)
在你的情况下这很容易:
Process process = Runtime.getRuntime().exec(cmd);
InputStream processOut = process.getInputStream();
InputStream processError = process.getErrorStream();
但我找不到自己的解决方案。我有java库将其内容放入一个文件(由String fileName
或FileDescriptor fd
标识)。还有一个本地图书馆。我需要将输出从第一个重定向到第二个库的输入。我认为fifo是一个解决方案,但 android文件系统是fat32,不能有FIFO文件。