跨平台程序开发技术概览.doc_第1页
跨平台程序开发技术概览.doc_第2页
跨平台程序开发技术概览.doc_第3页
跨平台程序开发技术概览.doc_第4页
跨平台程序开发技术概览.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

跨平台程序开发技术概览2015.01.25 by Winland摘要:介绍目前常用的跨平台程序开发库,对跨平台程序开发库进行多方面分析,对比其开发语言、授权许可、支持的操作系统、常见程序库功能模块等内容,并举出开发库实际的应用例子,为需要了解跨平台开发的人员提供技术概览。关键词:跨平台开发 POSIX JDK Qt wxWidgets GTK+一、前言随着“棱镜门”等一系列间谍事件的曝光,国内对国产软件、硬件的重视程度与日俱增,国产操作系统的发展和推广也成为国家的核心利益之一。国内近二十年来,众多计算机软件方面教材书籍等都是以微软Windows操作系统为基石,很多是介绍Windows的系统使用、应用软件、开发技术等,而国产操作系统又多以Linux/Unix等开源操作系统为基础研发而来。国内软件开发不得不面临系统兼容性问题,比如按照旧的用户习惯需要支持Windows操作系统,而按照国产化软件发展趋势,又必须支持Linux/Unix系统。如果每个操作系统都单独开发一套代码,那么软件研发成本毫无疑问会剧增。因此采用跨平台的开发库来开发跨平台应用程序,就成了实现多系统兼容性的最优选择。介绍跨平台开发技术,就不得不提POSIX(Portable Operating System Interface,可移植操作系统接口)1,许多跨平台开发库都提到需要操作系统对POSIX标准的支持。POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,该标准正式称为IEEE 1003,对应国际标准名称为ISO/IEC 9945。目前主流的通用操作系统(包括Linux/Unix、Windows和Mac OS)、智能手机操作系统以及实时操作系统(Real Time Operating System,RTOS)和嵌入式系统,通常都是支持POSIX标准的。POSIX标准的设计理念是希望编写代码一次就可以应用到各种系统,所以这成为了研发操作系统的默认标准,也是跨平台程序开发的基石。本文着重介绍目前常见的跨平台开发库,介绍每个开发库的功能、应用平台、协议授权等内容,为需要了解跨平台开发的人员提供技术概览。本文后面第二部分逐一介绍各个常见的跨平台开发库,然后第三部分对这些开发库做比对,最后进行总结。二、常见跨平台开发方式概览本部分介绍常见的跨平台开发库,由于程序开发库非常多,这里枚举出来的并不全面,只能尽本人所知来介绍。本节主要介绍JDK、Qt、wxWidgets、GTK+、Ecere SDK、.NET/Mono、Dlib等七种跨平台开发库。(一)JDKJDK是Java Development Kit 的缩写2,是Java语言的软件开发工具包,目前Java官方有三种版本:Java SE、Java EE、Java ME。第一种Java SE(Standard Edition),是普通用户常用的版本,第二种Java EE(Enterprise Edition),是面向企业应用的版本,第三种Java ME(Micro Edition)主要用于移动设备、嵌入式设备上应用开发。Java程序编译后生成字节码,字节码是运行在JVM(Java Virtual Machine, Java虚拟机)之上,并不像C/C+编译的程序直接运行在操作系统之上。JVM带来的好处是非常大的,因为只要操作系统安装了适合的JVM(通常由Java Runtime Environment提供,即JRE 3),Java开发的程序就可以运行,因此很适合做跨平台程序开发。Java程序运行在JVM之上也有一定的缺陷,就是不如C/C+语言编译的程序运行速度快、效率高。由于Java具有先天的跨平台开发优势,所以Java应用是非常广的,从通用操作系统、智能手机系统到嵌入式系统等都有应用。除了Oracle官方发布的JDK,开源社区也有相应的开源版本OpenJDK。JDK自带的类库功能丰富,还有专门用于多媒体的Java Media Framework API(JMF),除此之外还有很多基于Java开发的第三方类库,通常都是可以跨平台运行的。(二)QtQt最早是由奇趣公司开发,经过诺基亚收购和转卖,目前由Digia全资子公司Qt Company经营4。Qt采用多种授权许可发布,可以使用开源的GPL/LGPL(GNU General Public License/ GNU Lesser General Public License)发布或者使用Qt商业授权。Qt开源项目5是著名开源桌面环境KDE的基石,Qt的功能模块非常丰富,从图形用户界面(Graphical User Interface,GUI)到多媒体、文件、多线程/进程、网络、数据库、WebKit、QML、图像、3D图形、打印、ActiveX,甚至蓝牙、串口操作模块等。Qt支持的操作系统包括通用操作系统、智能手机系统、实时操作系统、嵌入式操作系统等,在众多领域都有应用。由于Qt是采用C+开发而成的,所以在各个操作系统编译而成的库运行速度是相当快的,这也是Qt能应用到实时操作系统的原因之一。Qt开发库是完全面向对象的,模块化封装,使用方便,也易于扩展,存在很多基于Qt的第三方扩展库。Qt自带丰富的开发文档和示例代码,可以随时查阅,这为Qt开发带来很大方便。(三)wxWidgetswxWidgets项目6最早由爱丁堡大学Julian Smart开始,是为了将应用程序方便地移植多个操作系统上运行,目前支持Linux、Unix、Windows、Mac OS等操作系统。除了能方便地开发GUI程序,wxWidgets还支持在线帮助、网络编程、文件、剪贴板、多线程、图像、音频视频、数据库、HTML、打印等等。wxWidgets使用自家的wxWindows License发布,这个许可证是基于LGPL的,但多一个例外情况,这个例外情况允许将程序无论是以动态连接还是静态连接方式使用wxWidgets库,这为开发者和用户带来方便,不论是将wxWidgets用于开源项目还是商业项目都是可以的,没什么限制和收费。wxWidgets语法风格很像微软MFC(Microsoft Foundation Classes),所以从MFC转型开发跨平台的wxWidgets程序是比较方便的,图形界面的可视化编辑有wxFormBuilder、wxGlade等工具,集成开发环境(Integrated Development Environment,IDE)有CodeBlocks和CodeLite。wxWidgets有一个非官方扩展库wxCode,含有各种数据库连接模块、PDF处理、绘制图表(Chart/Plot)、视频捕捉等扩展功能7。(四)GTK+GTK+最初是绘图程序GIMP的专用开发库(GIMP Toolkit),后来逐步发展壮大,成为Linux/Unix系统开发图形界面应用程序的主流库之一 8。除了支持各种Linux/Unix系统,现在也有Windows和Mac OS的移植版本,与之相关的还有一个移动设备项目GMAE(GNOME Mobile And Embedded),用于移动和嵌入式设备上图形界面开发。GTK+由多个子模块构成:Glib、GObject、GIO、Pango、ATK、GdkPixbuf、GDK、GTK。各个模块详细功能请参考GTK+项目官方网站8和GNOME开发参考网站9。GTK+官方发布版本包含了GUI设计、文件操作、网络连接、多线程、国际化和本地化、打印等功能,GTK+的图形界面可视化编辑可以通过Glade工具实现,集成开发环境有Anjuta、CodeBlocks等。GTK+是GNOME桌面环境的基础,二者结合比较紧密,对数据库连接的支持可以通过GNOME Data Access(GDA)扩展模块实现,对音频视频等多媒体的支持可以通过GStreamer 库实现,对3D图形的支持可以通过GtkGLExt扩展库实现。(五)Ecere SDKEcere SDK10是独特的编译型语言eC的开发环境,eC是由一位加拿大学者Jrme Jacovella-St-Louis 历经十几年研发而成。eC是C语言的超集,其引入了C+、Java、Python、C#等面向对象特性和语法风格,是C语言的面向对象扩展。eC语言有自己独特的一套生态系统,从eC编译器、集成开发环境、跨平台部署都有相应的工具,可以一次开发,到处部署,eC开发的程序支持在Windows、Linux、Unix、Mac OS以及Android上面运行,而且部署eC程序非常方便,程序依赖的库很少,通常仅仅依赖一个轻量级的运行库。Ecere SDK现由加拿大Ecere公司运营维护11,Ecere SDK是按照新版BSD(Berkeley Software Distribution)开源许可证发布,即BSD 3-Clause License 。Ecere SDK其实相当于一套生态系统,包含跨平台API(Application Programming Interface)、2D绘图、3D绘图、网络、数据库访问、集成开发环境、构建系统等。最有特色的是2D和3D绘图引擎,Ecere公司还有一套商业地理信息系统GNOSIS,就是基于Ecere SDK绘图引擎做的,用于开发跨平台的GIS(Geographic Information System)应用程序。(六).NET/Mono.NET是微软目前大力推广的程序开发框架12,通过.NET可以将各种编程语言的程序统一运行在RyuJit VM虚拟机层之上,从而使各种编程语言开发的模块可以互相利用,统一架构,类似Java程序运行在JVM上。.NET开发库功能丰富,又有微软力推,所以在Windows平台发展迅速,而且WinPhone也是原生支持.NET库的,其集成开发环境就是著名的Visual Studio。在2014年11月12日,微软宣布将.NET开发环境使用MIT许可证开源,将支持在Linux和Mac OS系统上运行,并向开发者提供免费的Visual Studio Community 2013,这也是一件轰动开源社区的大事。Mono是Novell公司开发的跨平台 .NET运行环境13,这样就可以在Linux、Unix、Mac OS上面运行基于.NET 开发的程序,当然Mono也可以运行在Windows系统上。Mono是开源软件,其集成开发环境是MonoDevelop。此外还有Mono的衍生版开发库Xamarin,旨在为移动平台开发应用,其集成开发环境为Xamarin Studio。Xamarin现在是作为独立公司运营14,其产品简化了针对多种平台的应用开发,包括iOS、Android、Windows Phone和Mac App,开发语言为C#,需要注意的是Xamarin为商业软件,是需要付费使用的15。(七)DlibDlib是跨平台的开源C+通用库16,按照Boost Software License许可证发布。Dlib采用模块化思想开发的,是由一堆比较独立的模块组成,从2002年开始,Dlib开发库内容越来越多样,概括说来,包含网络、多线程、GUI、复杂数据结构、线性代数、统计机器学习、图像处理、数据挖掘、XML和文本解析、数值优化、贝叶斯网络以及其他很多功能模块。Dlib原本是用于科学计算的,由于其开放性和通用性思想,欢迎各个领域有用的高质量的软件模块加入,所以功能越来越多。三、常见跨平台开发方式对比上节对七种跨平台开发库进行了概括介绍,本节对它们进行三个方面的比较,通过表格形式展示它们各自的特色,比如开发语言、开发库所采用的授权许可、支持的操作系统、所包含的功能模块等等。(一)开发语言和许可证方面表1 开发语言、许可证等方面比较开发库开发语言许可证虚拟机层应用举例JDKJava商业或GPLJVMOracle数据库各种Android应用神州通用数据库永中OfficeQtC+,存在Python、Perl、PHP、Ruby等语言绑定GPL、LGPL或商业无各种KDE程序VLC Media PlayerWPS for Linux360 for LinuxwxWidgetsC+,存在Python、Perl、Java、Ruby等语言绑定wxWindows License无CodeBlocksCodeLiteBitTorrentFileZillaGTK+C/C+,存在Python、Perl、Java、Ruby等语言绑定LGPL无各种GNOME程序FirefoxGIMPVMWareEcere SDKC/eCBSD 3-Clause License无Ecere IDEEcere ChessAcovel Media Player.NETVisual Basic、C#、C+、F#MIT LicenseRyuJit VMPDFCreatorNuGetMuine Music PlayerMoonlightMonoGPL/LGPL/MIT LicenseMono虚拟机DlibC+,存在Python语言绑定Boost Software License无科学计算领域如Mobile Mind从表1可以看出跨平台开发库使用开源协议发布的居多,而且微软.NET都开始走开源路线,所以使用开源库也的确是大势所趋。而开发语言使用C/C+/Java的居多,C#算是后起之秀,Python、Perl、Ruby等解释性脚本语言也可以用来做跨平台开发,当然这需要在操作系统里安装脚本语言解释器和运行库,一般的通用操作系统都是支持这些脚本语言的。著名的黑客软件Metasploit Framework就是采用Ruby开发的,而且也是开源的。(二)操作系统支持方面表2 操作系统支持比较开发库通用操作系统智能手机系统RTOS/嵌入式系统JDKWindows、Mac OS、Linux、SolarisAndroid通过Java ME支持嵌入式设备QtWindows、Linux、Unix、Mac OSAndroid、iOS、WinPhone、Tizen、MeeGoQNX、VxWorkswxWidgetsWindows、Linux、Unix、Mac OSwxAndroid正在开发中暂无GTK+Windows、Linux、Unix、Mac OS暂无通过GMAE项目有部分支持Ecere SDKWindows、Linux、Unix、Mac OSAndroid暂无.NET/MonoWindowsLinux/Unix/Mac OS(Mono)WinPhoneAndroid/iOS(Xamarin)暂无DlibWindows、Linux、Unix、Mac OS暂无暂无从表2可以看出,跨平台开发库对通用操作系统的支持都是比较好的,由于移动开发平台的火爆,跨平台开发库对智能手机系统的支持也是发展趋势,目前是JDK、Qt、.NET/Mono三个系列对移动平台的支持比较好。RTOS和嵌入式系统由于其使用的特殊性,支持这些系统的跨平台开发库比较少。(三)功能模块方面表3 功能模块方面比较开发库GUI文件网络多线程数据库3D图形多媒体JDK有有有有有有有Qt有有有有有有有wxWidgets有有有有(wxCode)有有GTK+有有有有(GDA)(GtkGLExt)(GStreamer)Ecere SDK有有有有有有目前仅音频.NET/Mono有有有有有有有Dlib有有有有SQLite暂无暂无 表3中七个功能模块是个人枚举的常见程序库模块,不是通用标准,还有其他可能的模块表格中没有列出,仅是枚举常见的功能,对跨平台开发库进行对比。表格中加括号的是指该系列开发库的扩展模块,不是原生自带的。Dlib由于主要用于科学计算,图形界面设计其实并不是它的特长,只是具有这方面的功能。.NET/Mono/Xamarin还处于潜力股阶段,等以后微软推广起来,.NET是会有一席之地的。Ecere SDK由于其语言独特性,通常叫好不叫座,目前应用并不多。GTK+与GNOME、Linux/Unix关系比较密切,真正用它来开发跨平台程序的情况不多。目前实际用来做跨平台开发比较多的是JDK、Qt、wxWidgets。四、总结本文首先简述了跨平台开发的需求背景,然后对JDK、Qt、wxWidgets、GTK+、Ecere SDK、.NET/Mono、Dlib等七种跨平台开发库逐一介绍,并对比了这些开发库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论