现在Hybrid app是一中非常火热的开发模式,在国内对应的开发工具也乱象丛生,有WeX5、crossApp、ExMobi、Appcan、apicloud、HBuilder等。

  其中WeX5只是在PhoneGap外面套了一层壳子,内部的UI都是通过大量的css,js实现的,页面切换也大量采用webapp模式,类似于JQuery Mobile中的框架,太过偏向于webapp,性能得不到较好的体验,而且缺少第三方功能SDK封装支持。

  crossapp是一款实用C++开发跨平台应用的工具,因为Android与IOS应用程序本身就是能够用C++来开发的,所以这也算是一种类原生方式开发,但是C++开发Android应用程序或者开发IOS应用程序很少见,会的人不多,缺少交流平台,自己开发插件比较困难,只能完全依赖官方提供,官方的第三方插件库资源不足,很难满足开发者变态的需求。

  ExMobi是烽火科技研发的一种内部使用的开发平台,当然也可以购买使用权,虽然也有免费版,但是在免费版连推送功能都不开放的情况下你还会选择吗?大量的功能需要购买不同的版本才会提供,对于小型开发团队来说不切实际。

  Appcan是国内最早一批研发Hybrid app开发模式中的一员,其存在时间之久,属目前国内Hybrid app开发平台之最,为什么它能够一直坚持下去?那肯定是有其优点所在。Appcan基于多webview来开发单Activity模式app,最近去除了ActivityGroup,采用Fragment来代替,优化了性能及体验,同时其合作商家广泛,第三方SDK应有尽有,能够很好地满足开发者的变态需求。

  apicloud的一种从Appcan脱离出来的技术,虽说其开发人员有很多是Appcan原来的技术人员,但是这是两种不同的设计方式,它也有大量的第三方SDK支持,并且其UI是令人看着比较舒服的(个人觉得)。

  HBuilder的webview处理方式与apicloud基本类似,其实这种用webview装载网页的技术都大同小异,网上也能找到,只是在于细节点处理方面不同而已。

  Appcan&apicloud&HBuiler

  • 最初使用Appcan的时候感觉其打开新窗口响应较慢,而且其内部UI完全是黑色的,比较难看,当初找相关技术人员,想让其提供能够选择UI主题的接口,但是最后不了了之,在apicloud出来之后,发现其UI效果很好,因此又去研究了一下,发现其窗口响应速度比Appcan要高

  • 现在Appcan引擎已全部开源,开发者能够完全自己Design,主题这些都不是问题,而且我再次测试了窗口响应速度,现在有了明显提高,与apicloud不想上下

  • HBuilder的webview最初一直不看好,因为没有采用硬件加速渲染,渲染比较慢,会出现空白,而他们官方提供的一种方式是预加载,当初我问他们技术,预加载不会过多消耗资源吗?他们技术脱口而出,只要不显示就不消耗资源,不用担心。而且好像还发表了一篇这样的文章介绍预加载的,我就在想,难道我这些年开发一直白学了,哪个程序创建个变量会不消耗资源?预加载你总要创建webview实例吧?这是忽悠谁呢?如果真的不消耗资源为什么你们右面又提供一种模板页构建的方式呢,所有二级页面只需预加载两个嵌套webview就可以。

  • 对于前段UI,Appcan有一套很全面的css与js框架,其完全采用自适应模式。。什么?不知道自适应?好吧一会介绍其区别。HBuilder也有一套UI,js和css比较全,apicloud没有专门的UI,需要用户自己DIY,对于个人来说,我反而倾向于apicloud,因为他们提供的UI中js与css太多而杂,Appcan中js引入了Zepto,Backbone、Underscore库,显得异常臃肿,导致网页加载js效率受影响;HBuilder中所有css与js都在一个文件中,大量不需要用到的样式无法删除,就算你这个页面只需要用到一个按钮样式,那么都需要引入整个css与js

  • 关于自适应,有很多人说,我前端就是自适应的啊,其实那并不能严格说是自适应,你们的布局只能说是根据设备大小进行自适应,而不是分辨率,apicloud和HBuilder的webview会根据设备的分辨率来进行放大或缩小(一般是放大),并不是网页原来的形态,这也就是为什么明明定义的1px的border在Android上看上去是2px或者1.5px的原因。而Appcan中1px就是1dp,其设备大小被修改成与分辨率相等,这就使得网页在webview中保留了原形态,没有放大缩小,其视觉体验非常好,图片等不会失真。其本质原因是Appcan是基于Android 4.4.2的API,也就是API19来开发的,其设置了viewport的支持,在viewport中设置target-densitydpi=device-dpi就可以实现高清晰效果,而apicloud是基于API20以上开发的,Android在4.4以后就不支持viewport属性了,因此在apicloud中设置viewport属性与否没有任何影响,在这点上HBuilder与Appcan类似,能够通过viewport属性来修改像素点,从而得到较好的视觉体验,当然也可以设置成与apicloud一样的情况,这种就具有较好的选择性,但是这种布局就要求有较强的能力了,Appcan中为不同分辨率定义了不同的字体大小,也就是em值对应的像素,在其中布局最好使用em来实现,不要使用px。而在apicloud中使用px能够在不同的手机上达到一样的效果,这就是不同分辨率的适配