构建跨平台应用程序 - 推荐

5

我需要开发一个相对简单的应用程序,但它需要在PC和Mac上运行。

它还需要作为独立的桌面应用程序通过光盘或USB驱动器进行重新分发。

最初我认为AIR非常适合这个需求(它符合所有API要求),但困难在于使其可分发,因为该应用程序需要安装AIR运行时才能运行。

我发现Shu Player是一个选项,因为它似乎可以将AIR运行时与应用程序打包,并进行(静默?)安装。
然而,这似乎违反了Adobe的T&C(如此处所述),因此我不确定其是否合法。

另一个选择可能是Zinc,但我尚未测试过,因此不确定它是否完全符合要求。

您有什么建议或推荐我查看的内容吗?

非常感谢任何建议。

编辑: 关于mono的使用还有一些讨论(尽管没有真正的结论):这里这里

编辑2Titanium 也可能符合要求,我会去看看。

还有其他人有什么评论吗?

编辑3(一年后):实际上距离我发布这个问题已经快一年了,但似乎仍然有一些人偶尔遇到它,并且甚至在一年后也会提供答案。

我想更新一下这个问题。我没有时间去尝试最后提到的tcl/tk选项,时间限制和兼容不同操作系统版本的不确定性使我放弃了这个选项。

我曾经尝试过Titanium,虽然第一印象还好,但是他们真的更注重移动平台,而桌面实现方面则有些疏忽。此外,一些操作系统上存在某些Visual Studio运行时问题的报告(虽然现在记不清详情了)… 因此也被舍弃了。

最终我选择了XULRunner,主要吸引点如下:

  • Firefox在大多数操作系统版本中都能开箱即用,所以我认为XULRunner应用程序很可能与大多数系统兼容。这为我节省了很多测试时间,结果证明它在所有平台上都运行得非常好,没有一个报告说无法启动该应用程序。
  • 这是JavaScript,学习曲线极低。主要要解决的问题是了解额外的xpcom接口以及如何查询它们。

缺点是:

  • 我认为解决错误有时是一项艰巨的任务,Venkman调试器有点笨重,最终我主要使用了控制台。
  • SQLite接口对桌面应用程序来说是一个很好的资产,但当一些东西无法运行时,我经常难以找到相关的错误信息 - 也许是我的问题。
  • 花了一点时间才弄清楚如何将应用程序打包为PC和Mac的独立应用程序。最终的方法是有一个“外壳”Mac应用程序和一个外壳PC应用程序,还有几个“编译”脚本,可以将外壳复制并将自定义源代码添加到正确位置。
  • 最后一个潜在问题是,由于XULRunner应用程序的性质,您的源代码将与应用一起部署,如果您想保护自己的知识产权,可以使用混淆技术,但这是需要记住的事情。

总的来说,这是一个非常棒的跨平台应用程序平台。我强烈推荐它。


感谢Ben提供如此详细的帖子。XULRunner对你来说到今天为止还好吗?它仍然适用吗? - yatg
1
@yatg 好吧,这已经是5年前的事了,对于一个技术项目来说,那是非常长的时间。我已经完成了那个项目,并且很久以前就交接了。我会重新开始并调查任何新的选项 - 我甚至不确定它是否仍然由Mozilla积极维护或者他们是否已经转向其他方向。 - Ben
谢谢回复,Ben!如果你再做这样的研究,请一定分享给我们!你做得很好! - yatg
1
@yatg 你可能会喜欢阅读 Raymond Camden 最近的一篇博客文章,关于使用 Electron 构建应用程序的内容。链接为 http://www.raymondcamden.com/2015/07/23/some-initial-thoughts-on-building-desktop-apps-with-ionic-and-electron - 这篇文章非常有见地,而且更新。 - Ben
谢谢Ben,太棒了! - yatg
显示剩余2条评论
5个回答

5
Tcl/Tk拥有最好的打包解决方案之一。你可以使用平台特定的二进制文件包装跨平台应用程序(实现在完全工作的虚拟文件系统中),以获得几乎任何现代桌面系统的单个文件可执行文件。搜索谷歌关键词starkit、starpack和tclkit。与当今许多可执行文件相比,这些封装的二进制文件非常小。
许多人嘲笑Tk是“老旧”或“不成熟”的工具包之一,但它是最古老、最稳定的工具包之一。当本地小部件存在时,它使用本地小部件。
然而,Tcl/Tk的一个重要缺点是它缺乏任何形式的打印支持。如果您的应用程序需要打印,您就需要有点创意。有平台特定的解决方案,以及生成PostScript文档和创建PDF的库,但需要额外的努力。

这不需要先安装tcl/tk吗? - Ben
@Ben:不需要。你可以将整个tcl/tk运行时打包到一个单独的文件中,总大小不到4兆字节,这就是它的美妙之处。你最终会得到一个单一的文件,只需将其拖到文件夹中即可安装,无需任何额外的运行时或其他内容(除非你选择将运行时和应用程序分开)。 - Bryan Oakley
@ Bryan:感谢您的建议(和您的热情!)。它符合要求。我唯一的担心是我从未使用过tcl/tk,所以除了疯狂的截止日期之外,我还需要学习它。 - Ben
如果您想了解有关如何轻松或困难地入门的介绍,请查看http://tcl.tk/about/language.html(Tcl)和http://www.tkdocs.com/tutorial/index.html(Tk)。 - Colin Macleod

2

Java可能是您最好的选择,尽管并非所有Windows PC都会自带Java(大多数应该都有)。JavaFX还很新,您不能指望它 - 您可能会发现许多机器运行Java 1.5或(颤抖)1.4。我相信最近的Mac OS仍然附带1.5(最新版本可能已更改为1.6)。


谢谢你的建议。据我所知,个人电脑没有预装Java(我总是需要安装它)。这太依赖了,我可能会选择Air。如果可能的话,我个人更愿意远离Java。 - Ben

0

AIR可能是一个选择,但前提是您不介意分发两个不同的文件(离线运行时安装程序和您的应用程序),并且期望用户先运行一个文件,然后再运行另一个文件。在Adobe的网站上提交在线表单,表示您同意按原样分发离线安装程序,而不是挖掘单个DLL或其他内容,然后他们会给您提供安装程序。

不幸的是,目前还没有办法从一个文件中获取AIR应用程序和运行时进行安装。我不确定Shu的情况如何,或者它是否做了任何不合规的事情。


谢谢你的建议。正如我在问题中提到的,仅仅使用AIR是不够的。我确实看过shu,但它需要从Adobe获取AIR分发。 我们向Adobe申请了AIR许可证,但从他们那里没有收到任何回复。如果你不在意Adobe,那就没关系。 - Ben
当我们开始使用XULRunner时,一开始可能会有些困难,但是一旦你理解了它,它就非常棒。 - Ben

0

我建议使用Zink。它具备桌面所需的所有功能。然而,上次我使用时有点故障。

我试图将一个6M文件写入磁盘,但卡住了。经过思考,我改变了代码,每次写入512K块(只需3分钟即可完成,速度很快)。

可能仍然存在一些小烦人的故障,例如让您在根级别上思考,但易用性和功能实在太棒了,不容忽视。


你是指锌吗?听起来好像你既推荐它又不看好它 :) 当我审查它时并没有太深的印象。最终选择了Mozilla的XULRunner,这是一个非常有趣但有些具有挑战性的平台。建议你去了解一下。 - Ben
谢谢你给我关于 XULRunner 的提示。是的,我想说的是 zinc。实际上,我并没有广泛地使用它,只是用于个人使用。我用它开发了一些专业工具(这已经是将近 2 年前的事情了)。我并不是在说我是非法下载的 :) 如果我有大量离线应用程序的工作,我肯定会购买它。但由于大多数系统都连接到网络,所以可能不需要。 - encoder
感谢您对锌的意见。如果您有兴趣了解我最终选择XULRunner的原因,我已经在我的原始问题中添加了编辑3。 - Ben

0
考虑JavaFX 它可以在任何地方运行,只要有现代的JRE..!


谢谢。就像@Michael E的回答一样。Java是太多的依赖性。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接