我认为对于“一个答案”来说,这是一个太大的问题。
问题包含三个组成部分:
- 从您的代码运行另一个应用程序。
- 捕获所述应用程序的输出。
- 在控制台类型窗口中显示输出。
我相信每种主要类型的平台至少有 1 和 2 明显不同,至少在 Windows、Symbian 和 Linux/Unix 类型的平台上是不同的。我相信,在很大程度上,Android 平台可以通过与 Linux 相同的方法来实现这一点。
第三部分,除了模拟 VT100 或 ANSI 终端的所有复杂性(这很重要,因为要解析和解释大量不同的转义码,但您可能只需实现六个左右开始)。
我希望,除了“特定于平台的代码”之外,这是一个需要几千行代码的项目,并且如果您知道从哪里开始(也就是说,您熟悉fork(), execl()
Linux 中的 etc 或其他操作系统中的等价物) , 并且熟悉重定向 if stdin
,stderr
和stdout
usingdup2()
和类似的功能, 再次保留操作系统特定的名称, 你可以在几周内得到大致工作的东西. 如果你不知道这些东西, 你将不得不学习如何使用这些功能首先。
当然,做终端仿真,比如“在这里画一行文字”,“在X行插入一个空行”,“从这个位置清屏”或者“清空剩余行”等等,都需要相当数量涵盖所有不同变体和选项的工作。特别是如果您希望在可变大小的显示器上执行此操作,而不是像支持原始 VT100 终端那样的“固定 80 列和 25 行”。而且我假设您已经编写了代码来在 OpenGL 或 OpenVG 中绘制基本文本(OpenVG 是否原生支持文本,或者您是否必须将其作为“绘制位图” - 我不记得它是如何工作的 - 我是不是在 Symbian Graphics 中处理文本的人之一,所以我从来没有真正关心过它是如何工作的)。