如何为不同平台编写应用程序?Linux、Mac、Windows和移动平台。

7
我们希望编写一个在线服务的客户端,应该在尽可能多的平台上提供。这个问题是关于我们应该使用什么编程语言和框架来创建这个客户端。
这些平台是必需的:Linux、Mac、Windows、iOS(iPhone、iPod、iPad)和Android。越多越好。
对于移动平台,有Titanium Mobile。我还没有尝试过这个东西,网站上说你可以使用Web技能(如JavaScript)为iOS和Android开发。我还不知道是否可以使用相同的代码部署到两个平台。这将是很棒的!
还有Titanium Desktop,但我不喜欢完整源代码与最终应用程序共享的想法。Titanium也为移动设备做了这件事,但通过App Store加载的应用程序并不容易修改。
那么,有什么其他方法可以创建一个至少在三个主要桌面平台上运行的应用程序呢?我认为使用C#和mono是可行的,但我刚意识到你需要使用MonoMac才能将其发布到Mac App Store并使用诸如Growl之类的功能。而且由于MonoMac自然只适用于Mac,因此无法在所有平台上部署mono应用程序,而不重写至少Mac的应用程序。如果应用程序在所有平台上看起来“本地”,那就太好了。Gtk#在Mac上看起来不好。它在Windows上还可以,在Linux上很棒。
我知道我们可以使用Objective-C制作iOS和Mac应用程序,Java制作Android应用程序,C#.net制作Windows应用程序,C#.mono制作Linux应用程序,但主要问题是我们不想用很多不同的语言编写相同的应用程序。这会使开发和维护变得非常困难。
我们更喜欢具有C风格语法的语言,这对于我们PHP Web开发人员来说更容易学习。顺便说一句:我们不喜欢Air,我也不确定Java是否适合,因为我从未使用过它,但它看起来也不“本地”,感觉有点慢。

注意:如果剩余的代码相同,为每个平台创建自己的表单不是问题。在同一个C#应用程序中可以使用MonoMac、Gtk#和Win Forums吗?由于我没有C++技能,所以我更喜欢C#而不是C++,我需要先检查使用Qt编写有多难。

另一个注意事项:我们不打算花太多钱,因为我们需要支付苹果开发者计划的费用,所以我们想使用免费或廉价的技术。最好是开源的。


只是一点提示:如果剩余的代码相同,为每个平台创建自己的表单不会成为问题。在同一个C#应用程序中是否可以使用MonoMac、Gtk#和Win Forums?我更喜欢C#而不是C++,因为我没有C++技能,所以我需要先检查使用Qt编写有多难。谢谢。 - Eliasdx
7个回答

10

以上所有内容都可以使用C#完成。

mono项目将覆盖Mac和Linux,使用monodroid可以满足您的android需求,而monotouch则可以照顾iPod/iPad/iPhone。

关于UI界面方面——mono对System.Windows.Forms命名空间有完全支持,因此如果您不想使用GTK#,您也可以使用它。

我认为我不需要提及Windows支持 ;)


@AbiusX - 那还有哪些选择呢?你的依据是什么? - Oded
参考维基百科上编程语言的使用百分比,以及使用C#和Qt开发的软件数量(同样在维基百科上),当然还有Qt与C#的性能对比(甚至在XNA网站上也有相关注释)。 - AbiusX
1
如果您用MonoTouch开发商业应用程序,它的价格相当昂贵,而且关于Monodroid的定价信息也没有公布,也许它的价格会和MonoTouch一样高。再加上iOS/Mac开发者计划,需要花费大量资金... - Eliasdx
@Eliasdx - 在你的问题中,你没有提到任何关于成本方面的信息... 难道我应该猜测吗? - Oded
@Eliasdx - 只是想说,如果成本是一个问题,你应该在你的问题中提出来。 - Oded
显示剩余3条评论

8
如果你想从一个应用程序支持所有这些平台,最好的选择是创建一个Web应用程序。使用HTML5,这样的应用程序甚至可以在设备上缓存,并在没有连接时使用。此外,该策略使得根据运行应用程序的设备定制UI成为可能。
如果你试图构建一个可在Android和iOS上运行的单个本机应用程序,更不用说你提到的所有其他平台,那么你将不会有好的运气。它们之所以是不同的平台而不是相同的平台,就是因为它们确实是不同的。它们具有不同的功能,运行在不同的硬件上,使用不同的语言构建,采用不同的应用程序模型和不同的用户界面,并且拥有不同的受众期望。

1
+1. 你比我先说了。实际上,这是真正跨平台可操作性的唯一选择,即使如此,它也取决于浏览器对你所写内容的支持程度以及操作系统/设备的配置情况。 - David
1
每个人都在寻找一种方法,可以为所有主要移动平台编写本地应用程序,而无需进行任何额外的工作。但这种方法并不存在。许多供应商承诺提供这种功能,但他们必须提供一些最低公共分母平台内部的平台,并且通常会绑定到他们的服务器(以及他们的会计部门)。如果您要使用某些常见平台,那么您至少应该在自己的服务器上使用开放标准!如果OP是PHP开发人员,那么他们已经有了一个良好的开端。干杯。 - Caleb
不开玩笑,移动设备的跨平台开发是一场噩梦。我记得早期的网络时代,Netscape有层叠样式表,没有两个浏览器能够完全兼容,但与尝试为本机移动应用程序做出决策相比,跨浏览器兼容性还算轻松。至少那时有些通用项目在几乎所有浏览器中都能工作。只要我能坚持并专注于Web,即使它让我落后,我也会继续这样做。(但我会加强我的Java编程技能,以备不时之需。) - David
我们还将编写一个 Web 客户端,但我们需要真正的应用程序。图片上传、语音录制、推送通知等仅使用 Safari 在 iOS 上不可能实现。 - Eliasdx

5
多年来我找到的最佳解决方案是Qt SDK。 它对所有主要平台提供了极好的支持,包括Symbian、OS X、Linux各种版本、Windows、Windows CE(移动版)、Android和iOS部分支持等。
其基础语言是C++,但几乎每种语言(如C#)都有相应的绑定。同时也有大量的帮助和支持。
核心Qt库非常快速且广泛,整个KDE桌面(Linux)都是用它完成的。著名软件如VLC和VirtualBox也是用Qt编写的。

Windows Phone 7 有计划的支持吗? - ukhardy
我不知道,可以查看Qt网站。但是由于它是纯C++,我支持它可以很容易地移植。 - AbiusX
我如何在Linux上使用C#设置Qt和iPhone开发环境? - Aaron Franke

3

另一种相对较新的进行跨平台开发的方式是使用开源的Eto.Forms,它允许您拥有一个UI代码库以针对每个平台的本机工具包进行目标设置。它是一个可以针对GTK #、MonoMac / OSX、WinForms和WPF的UI抽象层。

还有一个iOS移植版正在开发中。


2

Java听起来是最合适的选择。它是跨平台的,易于理解,拥有庞大的用户群,并且Android就是基于它构建的。


我认为iOS不支持Java。 - Roman Zenka
Android也不支持标准的Java库,它只使用语法。 - Ben Voigt
除了在一些手持设备上没有支持外,Java 还需要一个非常沉重和缓慢的虚拟机解释器,因此它是一种非常正交的编程语言,因此不适合快速/高级编程。 - AbiusX
我相信 iPhone 上没有官方支持 Java。 - ukhardy
有一个项目要交叉编译到 iPhone。 - pstanton
@AbiusX - 与流行观点(和Qt狂热者)相反,Java虚拟机实际上并不是那么“慢” - 即使是一年前,因为您是一年前回答的。它可能会因执行的操作而变慢,但您似乎是从一般意义上说话。至于Java作为良好跨平台解决方案(语言)的答案在哪里,我必须说我不同意。在我看来,只需本地编写两者即可。对于轻客户端,Android和iOS开发非常容易。然后选择单色调用于桌面应用程序。如果您想要一次编码,到处部署,请准备花费大量资金。 - Lo-Tan

1

根据您是否需要离线交互模式,看起来您应该开发一个Web应用程序。您可以开发移动版本和桌面版本,从而支持上述所有平台。看看YouTube的iPhone应用程序,它保留了与iPhone应用程序相同的功能,但纯粹是HTML。此外,支持HTML5的浏览器也可以具有离线运行的能力。


0

听起来有点疯狂,不过看看Flash/Flex吧 - 它是跨平台的,编写一次,到处运行,现在甚至可以在安卓和iOS上编译成原生代码,而且10.1版本的播放器已经广泛使用。我曾经也遇到过这个问题,当Flash Builder Burrito支持移动开发后,我从C#/Flash混合开发转为仅使用Flash来给客户提供服务(我们的后端是C#/Node/C++等)。

根据你的时间表和需求,这是一个值得考虑的选择。

以下是一些随机链接,供参考:

关于性能和将视频应用拓展到多个设备的博文

开发Flash和Flex应用程序


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