如何开发多平台应用程序?

时间:2010-11-18 22:28:32

标签: multiplatform

我想知道如何开发多平台应用程序。应用程序,如Microsoft Office for MAC / Windows,FireFox for MAC / Windows / Linux等。

如果他们必须为不同的平台编码,那么它很难管理,并且还涉及许多其他复杂性。

问:开发团队如何管理为多个平台开发的复杂性?

7 个答案:

答案 0 :(得分:6)

Microsoft Office不是一个多平台应用程序。如果你曾经使用过你知道的Mac版本。 Office的最后一个多平台版本是1998年臭名昭着的Office 6.0。发生的事情是用户对外观的呻吟,并谴责“移植”的心态。

Mac版Office不仅由不同的团队编写,而是由完全不同的部门编写:Mac业务部门,也称为MacBU。不同的部门主管,不同的经理和我相信不同的销售和营销人员。

这是一种做法。在Mac用户中也被称为“正确的方式”。

当然,不是每个人都是微软的规模,并且能够创建一个完全不同的子公司,只是为了支持Mac用户(更不用说Linux用户)。稍微更理智的方法是使用跨平台库来处理GUI wxWidgets或QT或GTK。毕竟,大多数核心C代码不会在平台上发生太大变化,只有GUI和文件管理等专有内容。哎呀,你甚至可以坚持使用POSIX函数调用文件管理和网络来实现跨平台性。但要注意,Mac用户很有可能讨厌最终结果(就像MS Office 6.0中发生的那样)。

第三种方式是中途。保持常见的核心应用程序代码与专有的GUI内容(在可维护性方面无论如何这是一个好主意)。 MVC设计模式是一种很好的方法。有办法(使用#define或者不同的构建脚本/ makefile)来切换MVC框架的View和Controller组件。谷歌就是这样做的。 Mac版本使用原生Mac图形,Windows / Linux版本使用名为Skia的图形引擎。 Chrome的核心是WebKit和V8,它们都是跨平台的。

答案 1 :(得分:1)

与多平台应用程序相比,可能的方法几乎一样多。一般来说,他们可以归结为几种不同的策略:

  1. 使用具有可移植运行时的语言 - 例如Java,较小程度的.NET,或任何数十种不同的解释脚本语言。

  2. 使用跨平台工具包(例如QT)隐藏平台差异。

  3. 在C或C ++等语言中使用条件编译来更改不同平台的代码库。这类似于#2,除了您实际上是在应用程序内部构建自己的跨平台工具包。

答案 2 :(得分:0)

如果您正在讨论编译的C ++,那么您最终会得到一些条件定义,例如代码中的一些地方#IFDEF WIN32。在编写跨平台代码时,必须测试跨平台。像Hudson这样的构建系统可以在您办理登机手续时在所有平台上构建代码。

对于GUI的东西,使用像QT这样的好的跨平台库非常有帮助。它允许您以相同的方式或多或少地编写gui代码,但在编译它的任何系统上保持原生的感觉。

希望这有帮助!

答案 3 :(得分:0)

多平台代码的主要方法是多平台基础。例如,自由使用boost库(用于文件访问,线程同步原语等)的C ++代码将在多平台设置中工作。同样,如果您创建.net(托管)代码,那么您的跨平台功能是通过.net运行时(如果在Windows上)或Mono(如果在Linux系统上)实现的。

要解决的问题还有很多,但这是最大的问题。对于C ++,其他事项可以包括如何处理GUI。故意选择使用跨平台代码再次发挥其作用 - 例如使用WxWidgets或Qt。

拥有cross-platform build流程也很有帮助。

答案 4 :(得分:0)

一种方法是创建硬件/操作系统抽象层。您可以使用标准C库或不依赖于您所定位平台的等效代码在C或C ++中创建应用程序。

对于操作系统或特定于硬件的界面(如加载/保存对话框,打印,工具栏,通知等),您可以为应用程序创建一个通用API,然后编写两个单独的实现 - 每个实现一个目标平台。

在处理文件格式或网络协议时,可能需要包含代码以在主机字节顺序(可能是大端或小端)和文件所需的正确字节序之间转换多字节值/ network protocol。

答案 5 :(得分:0)

问:开发团队如何管理为多个平台开发的复杂性?

答:良好的回归测试。

答案 6 :(得分:0)

一种方法是为每个平台特定功能提供单独的类,并将特定平台所需的所有类编译在一起。这样代码更清晰,也避免了不必要的抽象。以下是"Upload XML data to MySQL or NoSQL"的示例 蓝色代表NoSQL,粉色代表SQL,卡其色代表普通代码,灰色代表语言支持。