跨平台系统的开发方案整理
单位里的设备有Android、Windows版本的,不排除未来出Linux版本的。这些设备的外观完全一样,性能是极相似的,但系统不一样。为这些设备开发体验一致的收银软件,跨平台是绕不过去的门槛儿。因为Android的开发工具、从业人员数量、生态丰富度等条件都很成熟了,采用原生Android的方案来开发是最常见的开发方式,市场上也鲜有用其它跨平台方式开发Android软件产品的。所以这里讨论的更多的是Window和Linux的跨平台,而Window平台下的产品开发又更为急迫,方案选择思路是:以Windows平台开发为基础实现,具备未来跨Linux平台的能力。
通过多方广泛查阅资料,我把跨平台的开发方案分为两种:原生跨平台、混合跨平台。以下分别讨论这两种方案。
一、原生跨平台
是指方案本身具备跨平台属性,如:Java、Qt、.net Mono(而非Xamarin)、Delphi Xe。在这几类方案做选择,技术实现因素仅是一方面,还得考虑方案的完备性、人员招聘的难度、生态的丰富程度、与设备驱动的匹配程度等因素。分别列举一下。
- Java:跨平台的能力是没有问题的。Java的强项是BS服务端的后台开发,但Java的桌面开发框架较溃乏,且采用这种方案的产品较少,市场上这种技术路线的从业人员也较难找。
- Qt:是基于C++ 为实现语言的框架。在Window、Linux上跨平台的性能不错,有较成熟的大型软件在使用此方案,如WPS。Qt是跨平台场景选择较多、口碑较好的方案,且与硬件的驱动对接较容易。但C++ 的从业人员数量较少也是事实。
- .net Mono:此方案是基于.Net Framework的实现方案,实现语言主要是C#。就语言本身的生态来讲,是比较丰富的,社区也比较活跃。Window平台下开发较容易。但在Linux下,其运行的限制较多,主要体现不支持非CLI实现的Native部分,如C#调用的Window平台的C++实现的dll,而设备驱动有不少是这种形式。
- Delphi Xe:此方案使用人员较少,且开发人员逐渐委缩,相关社区缺乏活力。
可以看出,原生跨平台的方式,各种方案都存在一定的问题,可持续性存疑。
二、混合跨平台
Hybrid这种方式的关键是“Native+H5”。H5的跨平台能力是最好的,但其短板是设备操作;而设备操作是Native语言的优势。此方案的出发点,即尽量利用H5的跨平台能力,同时用Native补足其设备操作能力。Native部分的开发框架,选择Qt是较合理的选项。具体分工如下:
- H5:负责用户界面展示、用户操作交互、业务流程连接、与后台接口交互。即所有用户看得见的界面、操作和一部分接口对接;
- Qt:负责承载H5、设备驱动调用、本地资源(数据库、IO)调用。
此方案尽量少使用Qt,尽量多的使用H5,是想将两种语言的优势进行互补,扬长避短。潜在问题是,在性能要求较调高的场景下(大卖场通道POS),Hybrid的方式能否满足对性能的要求。实事求是的讲,此方案并未经过此场景验证。但据对Qt Hybrid开发的资料查询与Demo实现来看,能够支持的概率较大。此需要更多场景和更深入的研究验证。