跨移动终端平台实现

很久之前就接触过跨平台的项目,横跨ios/android/windowsmobile/windowspc(symtian也能跨,只不过当时已经淘汰),使用的不是Hybird技术,而是通过c来实现跨平台中间件,在中间件基础上实现业务逻辑,再对业务逻辑提供各平台相关的接口,这种方式要求业务逻辑实现者人员精简,精通c/c++,而且要懂得jni技术。

其实国外很多项目都是基于此种方式,只不过国内的技术人员,只有在一些特殊业务和软件方向才会涉猎(比如:VOIP/VoLTE/音视频编解码等技术复杂度较高的项目),而且国外的很多项目都是开源,比如Linphone代码就是如此,只不过Linphone的代码并没有抽象出一套中间件,而是直接使用c进行开发。

简单回顾下当时做跨平台项目的经历吧,那还是之前做华为项目时的事,当时好像一共是7个平台版本,包括ipad也算独立版本,虽然横跨各大平台,如果全部独立实现,人力资源紧张不说,周期和成本将无法控制,几百w的项目,岂不要亏本,思前想后,大家觉得还是应该采用跨平台方式来做,虽然之前都没做过,但是既然别人能做,相信经过积累,还是可以实现的。但话又说回来,万事开头难,一开始就设立这样一个大的目标,实在是难下手,当时从南京调来两个同事出差,有个同事的工作经验也算蛮丰富,于是部分工作让他一起参与,不到几天,问题就出来了,写出来的东西,应该讲只能是基本运用了c基本库的方法,对于各种容器并没有很好的实现封装,比如string,这样的容器只是简单的用sprintf/strcat等函数做二次封装,是个简漏的容器,没办法用,只有放弃,另择途径吧。

好在之前做过看过不少跨平台的项目,那就从这些国外项目中吸取精华吧,最接近我们想实现的是pjlib,这个其实就是我们的目标,于是一点一点看代码,先从配置文件入手,将基础数据类型按照平台特性进行统一定义,再在此基础上,将应用开发所要用到的所有基础api逐个实现封装,有的同事负责os相关的,比如:线程、锁、socket、timer等,我则负责把各种容器折腾折腾,于是看看别的项目当中哪个比较好用,比较适合我们的,研究差不多了之后,开始移植,使用统一的基础类型,经过一段时间,终于告一段落,接下来在此基础上,要封装工具库,包括基础加密算法,json/xml,以及http封装等等。

经过一阵折腾,终于能够实现简单跨平台中间件,虽说简单,实则也不易。在此基础上,实现业务逻辑,业务逻辑层也是一套代码,因为我们建立在中间件基础之上,因此各平台都能够编译。只不过针对特殊版本要求,其提供给上层界面使用的接口,可能有所不同而已。相比Hybird开发方式,可能这种中间件用的人会越来越少,随着2014年H5标准的落地,以及硬件的快速发展,相信未来h5能实现很多native的东西,最重要的是性能已不再是瓶颈,做js的人有福了,像我这种不懂js的研发,以后还能找到工作么?

不过项目中较遗憾的是,当时android平台人对jni不甚了解,担心风险较大,未能实现,仍然完全使用java进行开发。其实加点劲,估计是没问题的,现在回想看,jni也不复杂,估计是做java的人对c比较虚(原谅我对java的偏见),个人认为只做java不会c的人,技术宽度比较窄,技术深度比较浅。话又说回来,从底层语言往上层语言看,总是如此,做汇编的人,想必也认为做c的人,技术宽度比较窄,技术深度比较浅,嘎嘎^_^

你可能感兴趣的:(移动平台)