1、Hybrid技术在Flyme的应用实践 2011.7-2014.6 腾讯 WebQQ、Q+、手Q、Q群 2014.7-2015.10 唯品会 特卖会移动平台前端架构 2015.11-魅族科技,Hybrid App架构设计和落地、前端生态和基础设施建设About me大纲1.Flyme hybrid 原有架构简析2.通用Hybrid App开发体系的建设3.前端工程、组件生态、工具链 通讯 资源管理 性能优化Hybrid Apps on FlymeOSFlyme Hybrid 原有架构流程Flyme hybrid 原有架构改进思路问题解决方案代码复用模块化、SDK、前端工程接口设计模块化,优雅设
2、计访问url不一致在线和离线均采用唯一urlH5包分发控制包动态更新接口+push通道H5编译、打包、发布自建包管理平台+前端工具通用的Hybrid架构设计理论:https:/ Android调用H5通讯基本原理webview.loadUrl(javascript:alert(hello world);Android调用H5:shouldOverrideUrlLoadingOverridepublic boolean shouldOverrideUrlLoading(WebView view,String url)/自定义的schema if(url.indexOf(myschema:/)!=
3、-1)./other code /返回true 则表明webview已经“消费”了H5的request事件 return true;/返回false,webview将用默认的方式处理H5的request事件 return false;在SDK内部封装桥协议约定 H5的调用封装成以下格式:业务层继承SDK,并根据实际需求扩展Handler JS SDK遵循ES6的模块化写法,并提供完善的二次编译打包工具通讯我们的实现 flyme:/类名/方法?参数.通讯异步调用通讯(回调)调用过程Hybrid SDKAndroid SDKJS SDKAndroid bridgeHybrid routerAPI
4、HandlerJS bridgeHybrid APIEvent API业务apkH5bridgeMonitor Tools模块化的API设计文档和Q&A支持H5作为数据接收方l按键操作l硬件状态变更l客户端数据变更l客户端UI变更未来未知时刻来自客户端的数据变更mback、其他按键网络、位置等歌曲播放状态变更、登陆掉线等反向通知事件H5 listen keypress UI status change data change device status changeandroid notifyH5 callback/H5拦截mback按键FlymeJS.on(mback,function mb
5、ackHandler(date)console.info(data)/客户端notifyWebview.loadUrl(“javascript:FlymeJS.notify(com.meizu.hybrid.event.MBack,JSON.stringify(value:xxx)”)相同的资源使用唯一url定位 离线文件不存在或过期则走线上 基本覆盖所有H5应用场景H5资源访问 H5资源文件打包路径不受约束,根据正则规则将线上url匹配离线文件 客户端实现路径重定向、重写等功能资源定位规则routes:regex:/ ,regex:/h(d+) 离线访问方案原理优点缺点Web缓存HTTP头纯
6、Web方案,简单伪离线无网不可用manifestHTML5新接口纯Web方案,简单更新有坑离线包请求拦截+本地替换无网可用,资源易于控制需要后台、客户端等资源和人力的配合Cache APIW3C新草案纯web方案,可实现更细粒度地定制资源更新依赖Service Worker,两者皆不成熟,webview兼容问题几种Web缓存方案对比 托管H5离线包,前端只需要轻量的包管理 CI、测试、灰度、发布一体化 版本管理、增量对比 本地资源包更新检查接口 静默更新(服务端主动推送)资源包管理平台设计资源包管理平台轻量的H5离线包托管平台待发包测试离线包分发控制多种灰度方式,更精确地控制离线资源更新范围离
7、线包更新流程 上传测试包时同时自动生成增量包 更新时同时返回增量和全量包地址 增量包在客户端进行hash校验防篡改 文件级别的增量diff离线包瘦身增量包 同一个apk内的H5按功能分为多个模块 模块之间的更新频率不同 生成离线包时只打包改动的模块进行更新 在客户端合并多包离线包瘦身拆包离线包规范 私有npm仓库cnpm 基于React的一系列前端组件 遵循ES6模块化标准 组件publish约定前端组件生态工具前端工具链生成项目模板集成前端开发环境跨平台命令zip、md5、rm等通用数据mock平台重写npm install逐渐完善的工具链Flyme Hybrid 体系(类)Hybrid开发方案对比方案原理优点缺点适用范围ReactNative/Weexjs书写原生代码运行高性能、跨平台接入门槛高大公司、创业团队Hybrid定制且易扩展的webview方案通用、稳定、技术细节容易把控技术实现不通用开发成本高性能不够好大中型团队Ionic/Cordova高度定制的webview丰富的api和完善的工具、插件,纯web方案高度定制导致扩展性差,性能差,依赖官方后台实现热更个人开发者