我对真正的跨平台开发有疑问,是否可以使用ONE平台开发软件。
我在OS X,Windows和Linux上编写了一些应用程序。它们都使用本机平台工具包和跨平台的一些共享源。我必须启动到每个平台,结帐,编译等。
我过去曾尝试过像QT这样的GUI工具包(我为Win,mac,Linus买了一个商业许可证,但非常昂贵并且年复一年地付钱变得很难)。我试过WxWidgets,开发进展缓慢。
所以我正在考虑的是有一种方法可以运行单个平台并为其他平台交叉编译,这样我就可以从一个平台构建我的产品。
我赞成OS X,有没有办法从OS X为OS X,Windows,Linux编写应用程序,我只需要分别在每个平台上进行测试。我已经找到了关于交叉编译器,存根编译等的信息。
有没有人有任何想法?这甚至可能吗?有人会杀人造成这样的野兽吗?
答案 0 :(得分:8)
在我的公司,我们使用 Mozilla Framework 来开发跨平台字典产品。这些应用程序基于Gecko / Necko浏览器,大部分开发都是通过 Javascript,HTML,CSS,XSL,XUL 完成的......当然,我们的自制搜索引擎必须进行交叉编译到三个平台(其他一些代码首先在JS中完成,然后由于速度原因移植到moz'C ++)。
最后,我们有一个合理的跨平台解决方案:我们的开发人员大多像电力网络开发人员一样工作(同时考虑客户端和服务器端)。因为Gecko在三个平台上是相同的,我们知道它可以预测的外观和行为方式相同(除非存在错误,但平台现在已经非常成熟)。
我们的R& D知道如何将慢速javascript代码移植到相当快速的可移植C ++代码中(使用NSPR库(跨平台库)执行Mozilla代码。测试总是在三个平台上完成,但是,虽然有时间和经验,但你会知道什么会破坏(字体支持,音频支持,Flash支持)......
今天,你应该看看 XULRunner ,这真的是没有任何真正的浏览器界面的Mozilla(在2002年,我们不得不拆除Mozilla浏览器在我们的第一个重绘它产品颜色)。当然,它适用于简单的应用程序,但如果你想制作OpenGL,3D音频和其他漂亮的东西,XULRunner将显得太有限。
我相信暴雪有一些跨平台的框架......:)
祝你好运!皮尔。
答案 1 :(得分:3)
尝试在将在许多平台上使用的单一平台上开发应用程序并不是一个好方法。在最好的情况下,您将创建对您未开发的平台用户感到陌生的应用程序。
更有可能的是,在您从未忘记的领域中,您将遇到微妙的兼容性问题。如果你想沿着这条路走下去,Java可能是最好的选择。交叉编译将导致自动生成的代码,这将是调试和维护的噩梦。
当然,在某些情况下,您可以使用工具进行移植,但我认为这不是一个问题,您可以提供一般的自动解决方案。
答案 2 :(得分:2)
嗯,说实话,构建一个app跨平台的唯一保证方法是使用Java,但它需要先安装一个相当大的运行时。
然而,如果这不是一个选项,我建议密切注意Qt的最新发展 - 它现在可以(或应该很快)在LGPL下,这可能意味着你不再需要付钱了。我发现,在不同平台上交叉编译时,使用GCC,只要您只使用Qt的类/代码/对象,并确保您创建或使用的任何非Qt代码都能够被编译跨平台。
答案 3 :(得分:2)
你没有提到任何特定的编程语言(但由于GUI工具包,我猜C或C ++),因此很难对你实际要求的内容给出一个很好的答案。
如果您想要“真正的”跨平台,我首先会考虑是否可以使用不受平台限制的语言来解决您的问题。 Python,Java和许多其他允许您在一个平台上编写,并在许多平台上运行。
如果您仍想使用C / C ++,GCC会为您提供交叉编译选项,如果您将其与QT(很快将在LGPL下可用)结合使用,您应该可以获得一些工作。< / p>
答案 4 :(得分:1)
Java尝试过写一次,在任何地方运行。它在某些情况下运行良好,但在操作系统中有太多“独特”的东西。 GCC提供了交叉编译应用程序的能力,但是您遇到了同样的问题。代码只会有更好的性能。 RIA方法似乎有效,但它不像原生应用程序。
答案 5 :(得分:1)
即使使用跨平台GUI工具包也不会删除所有跨平台问题。毕竟,应用程序不仅仅是GUI。交叉编译永远无法捕获本机构建将捕获的所有问题。如果您要支持多个平台,则必须在每个平台上进行最少测试。但希望您可以在启用所有警告的情况下执行本机构建,除了测试。
答案 6 :(得分:1)
在过去的几个月里,我发现了一些探索跨平台开发主题的精彩视频。我希望你发现它们也很有用。
<强> QTCreator 强>
http://www.youtube.com/watch?v=aYiPvM7ZRHA&feature=channel
<强>弹性生成强>
http://www.youtube.com/watch?v=_O_xDXRsh3Y&feature=channel
Mono / MonoDevelop
http://www.youtube.com/watch?v=U6VG_Z0aRek
我个人使用Silverlight / MacOS X取得了成功
<强> REALbasic的强>
答案 7 :(得分:1)
对于跨平台开发,您可以使用Phone Gap,Appcelerator(Titanium),Corona ......这一切都提供了基于JavaScript的框架,最终能够在不同的平台上运行。我正在使用的是Titanium for Mobile Development,它允许我们用本地代码开发应用程序....(这是非常好的优势)。 Phone Gap提供的网络应用程序一般不是原生的...这个软件用于开发跨平台支持...支持Windows,Linux和Mac OS。
答案 8 :(得分:0)
根据我的个人经验,我相信你应该采用Java:你会避免很多麻烦。
如您所述,您可以在任何您喜欢的平台上进行开发,并在所有其他平台上进行部署,而无需为每个目标平台进行编译。
例如,我在linux下开发,我只打了一次“编译”,生成的文件可以在任何地方运行(windows,mac,solaris,z / OS,你可以命名)。双击将在任何平台上运行它(我必须安装Java运行时,但是大多数用户已经安装了它,如果没有,则需要下载,安装,“下一步&gt;”,“下一步&gt;”,“确定”)。
如果您选择“Java Web Start”部署方法,它会变得更加容易:用户只需单击网页上的启动按钮并运行应用程序(如果根据JNLP描述符中指定的内容安装了正确的JVM)或者用户被重定向到Java下载页面(如果没有找到合适的JVM)。
GUI开发(使用Swing toolkit)简单而强大,特别是如果您使用正确的工具(即Netbeans IDE)。