一、SOUI5跨平台解决方案的实现框架介绍
二、SwinX介绍
SwinX是作者经过近一年时间开发的一套运行在linux平台下的Windows APIs,源代码: or S代表Simple也代表启程软件出品,win代表Windows,X代表跨平台。一个带GUI的客户端项目,首先需要操作系统提供常规的进程启动,线程调度等支持,这是OS的常规功能;更重要的是,它还需要系统提供以窗口为基础的UI支持。SwinX提供Windows平台下的窗口管理API(HWND系列API), 图形绘制API(GDI系列API),内核对象API(EVENT,MUTEX,Symaphore等),所有API都经过了大量的单元测试,确保产品稳定运行。
SwinX参考了Wine的设计,但SwinX的设计目标是源代码级兼容Windows平台的产品,软件厂家有一个现有的运行在Windows平台的软件产品,通过链接SwinX,再配合适当的跨平台调整代码就可以编译出原生运行在Linux平台的软件(后续MacOS平台的支持也在计划中)。和Wine不同在于,Wine基于X11 API,X11 API是Linux平台早期推出的一套同步API。现在Linux平台提供了性能更高的XCB API,XCB采用异步框架,相对于X11性能有显著提升。
不同于Wine的宏大,SwinX只实现必须的APIs,因此SwinX非常精简,稍有经验的程序员都可以简单地驾驭SwinX,在开发过程中如何发现缺少哪个API的实现,用户可以方便的自己增加这些API。
三、现有支持跨平台的竞品分析
除Wine外,目前能够实现客户端跨平台的框架主要包含Qt, GTK, Electron这三种。
-
Qt:Qt 是一个历史悠久、功能强大的跨平台开发框架,支持多种编程语言,如 C++、QML 等。它在桌面和嵌入式应用开发中广泛使用,具有丰富的控件库和强大的图形渲染能力。然而,Qt 的学习曲线较陡,且其开源版本在商业使用中可能需要遵循较为严格的开源协议,商业授权的费用非常高。
-
GTK:GTK 是一个开源的跨平台图形用户界面库,主要用于开发 GNOME 桌面环境下的应用程序。它支持多种编程语言,并且在 Linux 平台上表现优异。不过,GTK 在 Windows 和 macOS 上的兼容性相对较弱,且其界面风格与现代应用的审美存在一定差距,此外GTK提供的C语言API,大型项目中使用成本很高。
-
Electron:Electron 是一个基于 Web 技术(HTML、CSS、JavaScript)构建跨平台桌面应用的框架。它允许开发者利用 Web 开发经验快速构建应用,并且可以轻松集成各种 npm 模块。然而,Electron 应用通常体积较大,性能消耗较高,且在原生系统功能的集成上存在一定的局限性。
四、SOUI5的优势
SOUI是一套在windows平台上持续维护了10+年的客户端开发框架,5.0之前,通过在windows平台上持续开发维护,形成了自己独特的开发模式,已经在包括:百度,YY,金山,金碟,迅游,富途,韩信等公司的产品中大量使用。
-
完整的控件系统:SOUI5 提供了丰富多样的控件,涵盖了从基础按钮、文本框到复杂的虚表控件等,满足不同应用场景的需求。
-
完整的布局系统:支持多种布局方式,包括线性布局、相对布局、网格布局等,开发者可以根据界面需求灵活选择,轻松实现复杂界面的布局。
-
完整的事件系统:SOUI5 的事件机制结合了 WTL 的消息映射表和 Qt 的 sigslot 两种方式。WTL 的消息映射机制将所有事件响应集中在一起,便于代码维护;而 sigslot 的灵活性则允许开发者在代码的任意位置实现事件响应。
-
完整的矩阵变换系统及动画系统:具备强大的图形处理能力,支持矩阵变换,能够实现复杂的图形变换效果。同时,其动画系统提供了丰富的动画效果,如平移、缩放、旋转等,帮助开发者打造流畅、生动的用户界面。
-
完善的扩展机制:SOUI5 提供了灵活的扩展机制,开发者可以扩展系统提供的控件(IWindow),绘图对象(ISkinObj),布局对象(ILayout)等定制UI,还可以通过插件等方式轻松扩展框架的功能。这种机制使得框架能够根据项目需求进行定制化开发,满足不同业务场景的特殊需求。
-
国产化自主知识产权:SOUI5 是一款国产的跨平台开发框架,拥有自主知识产权。这不仅意味着在技术上不受制于国外框架,还能够更好地支持国内的开发需求,为国产软件的发展提供有力支撑。
-
体积更小,性能更高:相较于一些竞品框架,SOUI5 在设计上更加精简。它通过优化代码结构和资源管理,实现了更小的体积和更高的性能。这使得基于 SOUI5 开发的应用程序在运行效率和资源占用方面更具优势。
- 通过soui4js项目,soui已经在windows平台实现了全部使用js开发原生客户端项目的能力,使用js开发客户端项目可以大大缩短软件产品的开发周期,后续soui4js也将支持SwinX。
-
方便现有 Windows 客户端产品移植:SOUI5 通过自主实现的 Swinx 在 Linux 平台下模拟 Windows API,为 Windows 客户端产品的移植提供了极大的便利。开发者无需对现有代码进行大规模修改,即可快速将应用迁移到 Linux 平台(后续也将对macos提供支持)。