记得三年前,有人问我Flex有什么优势,我毅然决然地说出了三个字:跨平台。然后此人的第二问就让我万般无语:“跨平台?除了Windows,还有人用别的平台吗?”
的确,在三年前,在国内跨平台几乎是没有意义的。因为国内用户使用软件的环境90%以上都是Windows,MacOS和Linux是绝对的小众。所以编写软件往往只需要考虑Windows平台即可。可正所谓天下之事,分久必合,合久必分。随着智能手机、平板电脑等以触摸屏为用户界面的终端的兴起,iOS,Android等Touch-Based操作系统开始成为应用程序开发者不可忽视的一块市场。进而人们也开始认识到,除了Windows,还有许多优秀的操作系统可用。这些操作系统一样可以运行QQ,Office,Photoshop甚至MATLAB。结果就是,很多iPhone和iPad用户开始尝试Mac OS系统;Android用户开始尝试Linux系统;当然,反过来也有微软的忠实拥趸不愿意放弃Windows,开始尝试Window Phone系统。
时间进入2012年,软件平台俨然已经形成了iOS(包括MacOS)/Android/Windows三足鼎立的局面。根据2011年12月的统计数字,在触屏设备方面,iOS的市场份额占52.10%,Android占16.29%,Windows只占1.9%。在键鼠设备方面,MacOS的市场份额占8.9%,Android约为0,而Windows虽然不及当年,但依然占据89.6%的可怕比重。从这组数据上来看,Android更像一个纯粹的触屏系统,而Windows更像一个纯粹的键鼠系统,但根据Google和微软的路线图,Google正在研究Android系统在桌面电脑上的应用,而微软更是在Windows 8中直接整合了触屏的Metro界面。可以预见,在不久的将来,i/A/W三大平台将会成为软件开发者的主要目标平台。
那我们就来对比一下这三个平台各自的优劣吧。
首先是设备兼容性。平台对处理器指令集的兼容性可以说直接决定了该平台产品的性价比。苹果由于自己控制了硬件,所以几乎没有兼容性可言。目前MacOS兼容x86/x64指令集,而iOS兼容ARM指令集。微软从Windows 8开始,兼容的指令集相对要丰富些,桌面和移动平台均兼容x86/x64和ARM指令集,而嵌入式版本还兼容MIPS指令集。Android由于是开源的,其兼容的指令集是最丰富的,x86/64,ARM,MIPS自然不用说,现在甚至还能兼容Sparc,PowerPC,SP等非主流的指令集(版本相对滞后些)。
其次是开发工具。i/A/W三大平台为了拉拢开发者,都提供了非常完善的开发工具。
iOS/MacOS的开发工具主要是XCode。XCode是一款运行于Mac电脑上的IDE,可以编写iOS/MacOS使用的基于Cocoa环境的应用程序。XCode基本不需要开发者配置,只要在AppStore中安装并打开就能使用,非常方便。XCode最大的优势在于界面设计上,苹果向开发者提供了众多美妙的控件,可以为开发者优化界面布局,还能展示各个页面之间的关系。可以说,这是我见过的最先进的界面设计系统了。
Windows的主要开发工具是Visual Studio。由于微软面临的向下兼容问题要比苹果复杂得多,所以Visual Studio除了用来开发最新的WPF架构的应用程序之外,还能开发早期的MFC甚至DOS命令行程序,对于开发者而言,虽然安装完也不需要配置,但是在新建工程时,难免也会有些晕头转向。Visual Studio开发WPF程序的方法几乎是完全抄袭了Adobe Flex(微软抄袭的功夫真是让人叹为观止啊!),用xaml和笛卡尔坐标系统来描述界面,用.NET语言来表述逻辑。.NET应该算是微软系统最大的优势了,因为目前市面上的外设,只要是和电脑连的,基本都有.NET的驱动,编写程序时载入相应的DLL即可。
Android的主要开发工具是Eclipse+Android SDK+ADB。从名字上就能看出,搭建一套Android开发平台是最为复杂的。由于Android没有对应的桌面系统,所以他的开发环境必须依赖于Windows或MacOS系统,这就导致了开发工具的安装与配置具有很大的差异性。而且Android的设备分化也很厉害,目标终端的屏幕分辨率、长宽比、处理器性能等区别也很大,这也导致了Android开发工具的界面设计异常复杂,而且效果极为低劣。好在Google对API的封装还是比较科学的,开发者很容易找到自己需要的API接口。
最后是开发语言。每个平台都有自己“御用”的开发语言。Android用的是目前如日中天的Java,众多的开发者几乎主需要了解一下Android的调用机制和API接口,再自己研习一下界面设计方法,就可以直接上手Android应用开发了。微软的所用的是.NET兼容语言,其中包括了Basic,C++和C#,目前微软主推的是C#,Basic只面向初级开发者,而C++已经在淘汰的边缘。C#语言除了事件机制外,和Java几乎一模一样(再次瞻仰微软抄袭的功夫),Java开发者只需要很短的时间学习一下WPF的界面设计方法就能够适应过来,而对于Flex开发者更是连WPF都不用适应,几乎可以直接上手。苹果的主流语言是Objective-C。这个Java,C#,PHP等Simula-Style语言横行的世界里,这个smalltalk型的语言绝对是非主流中的非主流。但俗话说得好,“一人得道,鸡犬升天”,随着iPhone,iPad及Mac电脑的热卖,很多开发者被苹果逼上梁山,开始洗脑式地学习Objective-C。而在全球语言排名上,Objective-C也是从两年前的20名开外一跃成为第五名(2012年2月统计,前四名是Java,C,C#,C++)。但与C++类似,Objective-C也有一个优点,那就是与C语言的编译兼容性,也就是说所有的C语言程序都可以用Objective-C的编译器编译。所以如果你不想被smalltalk洗脑,直接用C语言的思维编写苹果系统的程序也未尝不可。
最后的最后,还有一个不能不提的角色,那就是Adobe的AIR。这个Flex的衍生品编写出来的程序能够仅用很小的改动,就同时在iOS/MacOS,Android和Windows上运行。虽然AIR虚拟机的执行效率不如原生程序高,但是对于计算量小且开发时限短的应用而言,这不失为一条跨平台的捷径~
总结一下,我觉得三大平台里面,苹果开发程序的界面设计非常方便,但编程语言非常扯淡;Android则正好相反,界面设计异常丑陋且复杂,而后台的Java语言则非常强大。微软虽然在移动市场上几乎没有份额,但对于开发者而言,面向微软平台开发绝对是一个中庸的选择:界面设计部分虽然不如苹果的炫,但效果也不错;C#语言虽然需要一定时间适应,但也不难学;目标设备虽然比不上苹果的统一,但也不会像Android那样过于碎片化。
欢迎分享/讨论~