很久之前就接触过跨平台的项目,横跨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封装等等。