为什么80%的码农都做不了架构师?>>>
#hybrid混合开发初尝
这是我第一次写markdown博客,也算是一种尝试吧。 小菜鸡一枚,以下内容写的不好的,求轻喷。
hybrid一直都是很热门的话题,简单的说,纯native开发固然体验好但是开发成本高,迭代周期长,某商店还需要审核周期,并不能做到热更新,那么某些轻量级的需求,尤其是总是会变动的界面以及数据显示等,用native就会比较麻烦;纯web app成本确实相对低,但是体验确实不太好,太依赖网络了,而且纯web app能调用的api是跟不上native速度的,也就是说,例如iOS8更新了4000+个API,那么等web跟上这个脚步那不知道要多长时间。这个时候,一种折中的方案——混合开发(hybrid)就出现了。
我理解的混合开发是这样的:
- native:原生主要的任务是提供底层API支持和APP对性能、交互等要求比较高的用原生来完成;
- h5:这部分主要是用于变化较大、经常改动、对热更新要求较高的业务需求,类似APP的“通知中心”等;
- bridge:桥的作用主要是将native和h5链接起来,提供一个管道供二者安全的相互调用。
在公司做小业务,其中一个需求丢到我这里:APP的通知中心开发,这部分leader让上hybrid,于是我还自己看了一些介绍hybrid的链接,最后选择了(当然是leader拍板的)cordova解决方案。cordova是phonegap的开源版本,现在是Apache下的顶级项目,相对成熟稳定,所以我必须没有意见,于是就去踩坑了,原谅我菜并没有做过类似的东西。
简单的说,cordova提供了Android(我是Android开发工程师)下的webview控件——cordovawebview支持,同时提供了cordovaActivity,然后cordova有一套plugin,是让native和h5交互的管道。这里提一下,由于Android4.2以下addJavascriptinterface的安全性问题,cordova对4.2以上和4.2以下分别作了处理:4.2以上继续使用addJavascriptinterface,4.2以下则使用prompt方式,详细细节请看上述链接。
这部分主要由我和一位web前端同事负责(原谅我太菜不会写js)。native这边主要是封装好原生业务逻辑和提供给h5的方法调用接口,然后通过cordovaplugin和h5进行交互,只要
public xxxClass extend CordovaPlugin
就可以继续写了,我这边还是比较简单的我觉得,因为我是用cordovawebview嵌入到一个fragment里,所以在插件类中,我都是用EventBus分发事件,然后在需要处理的时候订阅处理就行。h5那边我感觉写懵逼了,因为也没有类似经验吧,cordova.exec没封装就直接写出来了,然后在cordova.js没load完的时候,exec方法是not find的,然后同事采取的方案简单粗暴——直接setTimeout,啊哈哈最后写到他自己逻辑都乱了……我看了看官方文档,正确的做法应该是监听cordova的ondeviceready事件,然后在回调用做cordova相关的操作,这时候cordova.js就会load好了。
其实也不知道写了些什么,整个过程就是这样了……
后续这部分我们几个人同事讨论了下,还是采取自己写cordova插件,然后用过cli去安装,这样在js代码中就不会出现exec这种东西了……这部分主要都是给js调原生API用的。慢慢丰富起来我们自己的业务逻辑插件就好啦~
一枚Android开发小菜鸡 落笔