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

我们希望为在线服务编写客户端,该服务应该在尽可能多的平台上提供。 这个问题是关于我们应该使用什么编程语言和框架来创建这个客户端。 这些平台是必需的:Linux,Mac,Windows,iOS(iPhone,iPod,iPad)和Android。 越多越好。

对于移动平台,有Titanium Mobile 。 我还没有尝试过这个东西,该网站说你可以使用Javascript等网络技能为iOS和Android开发。 我还不知道您是否可以使用SAME代码部署这两个平台。 这会很棒!

还有Titanium Desktop但我不喜欢完整源代码与最终应用程序共享的想法。 Titanium也为Mobile提供此function,但修改通过App Store加载的应用程序并不容易。

那么,还有什么方法可以创建一个至少在三个主要桌面平台上运行的应用程序? 我认为单声道的c#将是要走的路,但我只是意识到你需要使用MonoMac单声道,以便在Mac App Store上发布它并使用像Growl这样的东西。 而且由于MonoMac自然只适用于Mac,因此再次无法在所有平台上部署单声道应用程序而无需至少为Mac重写它。 如果应用程序在所有平台上看起来都是“原生的”,那就太好了。 Gtk#在Mac上看起来不太好看。 它在Windows上“没问题”,在Linux上很棒。

我知道我们可以使用Objective-C for iOS和Mac,Java for Android,C#.net for Windows和C#.mono for Linux但主要的一点是我们不想用很多不同的语言编写相同的应用程序。 这将使开发和维护变得非常困难。

我们更喜欢具有C风格语法的语言,这对我们PHP Web开发人员来说更容易学习。 顺便说一句:我们不喜欢Air,我不确定Java,因为我从来没有使用它,但它看起来也不像“原生”,感觉有点慢。

编辑:

请注意:如果至少剩下的代码是相同的,那么为每个平台创建自己的表单不会有问题。 是否可以在同一个C#应用程序中使用MonoMac,Gtk#和Win Forums? 而且我更喜欢C#而不是C ++,因为我没有C ++的技能,所以我首先需要检查用Qt写的有多难。

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

只需使用C#即可完成上述所有操作。

单声道项目将涵盖Mac和Linux, monodroid你的Android需求被覆盖, monotouch将照顾iPod / iPad / iPhone。

关于UI – mono完全支持System.Windows.Forms命名空间,因此如果你不想,你不必使用GTK#。

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

如果您真的想从单个应用程序支持所有这些平台,最好的办法是创建一个Web应用程序。 使用HTML5,这样的应用程序甚至可以缓存在设备上,并在没有可用连接时使用。 此外,该策略可以根据运行应用程序的设备自定义UI。

如果您打算构建一个在Android和iOS上运行的单个本机应用程序,那就不会有好运,更不用说您提到的所有其他平台了。 他们是不同的平台而不是相同的原因是他们是,嗯, 不同 。 它们具有不同的function,在不同的硬件上运行,使用不同的语言构建,使用具有不同用户界面的不同应用程序模型,并且具有不同期望的受众。

我多年来遇到的最佳解决方案是Qt SDK 。 对所有主要平台,Symbian,OS X,Linux风格,Windows,Windows CE(移动),Android和iOS部分支持等提供强大支持。

它的基础是C ++,但几乎所有语言(如C#)的绑定都可用。 还包括许多帮助和支持。

核心Qt库非常快速和广泛,整个KDE桌面(Linux)都是用它完成的。 VLC和VirtualBox等着名软件在Qt中完成。

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

还有一个iOS端口正在开发中。

Java听起来最合适。 它是跨平台的,易于理解,拥有庞大的用户群,而Android则基于它。

根据您是否需要离线交互模式,听起来您应该开发Web应用程序。 您可以开发移动版和桌面版,从而支持所有上述平台。 看看youtube的Iphone应用程序,它保留了与iPhone应用程序相同的function,但纯粹是html。 此外,支持html5的浏览器还可以脱机运行。

听起来很疯狂,请查看Flash / Flex – 它是跨平台的,代码一次,到处运行,现在编译为Android和iOS上的本机代码,10.1播放器全部发货。 我必须解决这个问题,当Flash Builder Burrito在使用它一段时间后迎合移动时,我已经从C#/ Flash混合转换为仅用于客户端的Flash。 (我们的后端是C#/ Node / C ++等)。

根据您的时间表和需求,我们会根据您的需求进行调查。

一些随机链接到细读:

关于性能和video的博客文章到单个app多设备

开发flash和flex应用程序

Interesting Posts