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

3

我想知道如何开发跨平台应用程序。例如像Microsoft Office适用于MAC / Windows、FireFox适用于MAC / Windows / Linux等应用程序。

如果他们需要为不同的平台编写代码,那么很难管理,并且涉及许多其他复杂性。

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

7个回答

6

微软办公套件不是一个跨平台应用程序。如果你曾经使用过Mac版本,你就会知道。最后一个跨平台版本的Office是臭名昭著的Office 6.0,早在1998年。发生的事情是用户抱怨外观和感觉,并谴责“移植”思维。

Office的Mac版本不仅由不同的团队编写,而且由完全不同的部门编写:Mac业务部,也称为MacBU。不同的部门负责人、不同的经理以及我相信也有不同的销售和营销人员。

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

当然,并非每个人都像微软那样规模庞大,能够创建一个完全不同的子公司来支持Mac用户(更不用说Linux用户了)。稍微更理智的做法是使用跨平台库来处理GUI等内容,例如wxWidgets、QT或GTK。毕竟,大多数核心的C代码在各个平台上并不会有太大变化,只有GUI和文件管理等专有部分会有差异。实际上,你甚至可以坚持使用POSIX函数调用进行文件管理和网络操作以实现跨平台性。但要注意,Mac用户很可能会不喜欢最终结果(就像发生在MS Office 6.0中的情况一样)。
第三种方式是中间方式。将通用的核心应用程序代码与专有的GUI内容分开(从可维护性的角度来看,这是个好主意)。MVC设计模式是一种很好的做法。使用#define或不同的构建脚本/ makefiles来切换MVC框架的View和Controller组件。这就是Google在Chrome上所做的。Mac版本使用本机Mac图形,而Windows / Linux版本使用名为Skia的图形引擎。Chrome的核心是跨平台的WebKit和V8。

1

对于跨平台应用程序,可能有几乎与之相同的方法。一般来说,它们可以归结为几种不同的策略:

  1. 使用具有可移植运行时的语言 - 例如Java,.NET在某种程度上,或任何一个无数不同的解释脚本语言。

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

  3. 在像C或C ++这样的语言中使用条件编译来更改不同平台的代码库。这类似于#2,只是您实际上正在构建自己的跨平台工具包。


0

如果你在谈论编译后的C++,你最终会得到一些条件定义,比如代码中的#IFDEF WIN32。当你编写跨平台代码时,必须进行跨平台测试。像Hudson这样的构建系统可以在你提交代码时在所有平台上构建你的代码,这非常有帮助。

对于GUI方面,使用一个好的跨平台库,比如QT,是非常有帮助的。它让你以更或多或少相同的方式编写GUI代码,但在编译为任何系统时保持本地感觉。

希望这能帮到你!


0

多平台代码的主要方法是使用多平台基础。例如,大量使用boost库(用于文件访问、线程同步原语等)的C++代码将在多平台环境中工作。同样,如果您创建了.net(托管)代码,则可以通过.net运行时(如果在Windows上)或Mono(如果在Linux系统上)实现跨平台能力。

还有其他问题需要解决,但这是最重要的问题。在C++的情况下,其他问题可能包括如何处理GUI。有意选择再次使用跨平台代码也起到了作用,例如使用WxWidgets或Qt。

同时,拥有一个跨平台构建过程也很有帮助。


0
一种方法是创建一个硬件/操作系统抽象层。您可以使用C或C++编写应用程序,使用标准C库或等效代码来创建不依赖于目标平台的代码。
对于操作系统或硬件特定的接口(如加载/保存对话框、打印、工具栏、通知等),您可以为应用程序创建一个通用的API,并编写两个单独的实现——针对每个目标平台分别编写一个。
在处理文件格式或网络协议时,可能需要包含代码来在主机字节顺序(可能是大端或小端)和文件/网络协议所需的正确字节顺序之间进行多字节值的转换。

0

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

答案:良好的回归测试。


0
一种方法是为每个平台特定功能创建一个单独的类,并将编译所需平台的所有类。这样代码更清晰,也避免了不必要的抽象。以下是"将XML数据上传到MySQL或NoSQL"的示例。 蓝色代表NoSQL,粉色代表SQL,卡其色代表通用代码,灰色代表语言支持。

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