weex社区Android开发Android开发经验谈

XCore开发体验

2018-04-06  本文已影响123人  妖怪来了

背景

XCore 是一个动态跨平台框架。类似 RN,Weex。一次编写,多端运行是我们的目标。

技术方案

选型

  1. 客户端使用 js 解析引擎,对加载过来的js进行解析,并绑定原生的代码,通过原生代码来实现界面的绘制,事件的传递等。
  2. 说说选型。
    1. 前端基础库,我们选择了 Vue。Vue 非常适合移动界面的开发,现在已经越来越普及。选择 Vue,可以减少前端同学的学习成本。
    2. 安卓端解析引擎,使用谷歌提供的 V8 引擎。chrome 浏览器就在使用 V8 引擎对js进行引擎,解析速度很快。
    3. iOS端,没有选择,只能使用jscore。这个是由于平台所限制的。
  3. 谈谈排版。我们选择了 flex 排版。不了解的同学可以先行谷歌。flex排版方式,非常适合native端解析,而且容易使用。所需要支持的特性较少,但是功能强大。
  4. 功能实现。我们是标准 web api 的一个子集。一个为特定业务场景而生的微浏览器内核。

架构

最上层我们提供Web标准的子集,DOM操作的子集,CSS的子集,H5API的子集,以及所需的事件

我们使用的是标准的CSS规范,在Web端是直接使用的。Native端,在DOM Tree,每个Node有自己的Style属性,当Node被创建或者变成dirty的时候,会触发排版计算。
排版计算主要输出就是元素的位置和大小,随后元素的位置和大小的信息会被同步到Shadow Tree上,Shadow Tree在适当的时机将位置与大小的信息设置的Native Tree上对应的Native View的属性上,最终一次布局完成。

渲染层面我们支持一份代码三端运行,在web和native端我们都有不同的实现
扩展能力的建设。提供扩展机制,方便native开发人员提供对应的native组件

我们提供常用的基础标签,如 view, label, image, input 等。在基础标签的基础上我们提供扩展组件的能力:

调试工具

由于不断的推广,使用人员也越来越多,调试问题亟待解决。在安卓和iOS端通过对对应的js解析引擎的调研,发现其都有自己对应的调试协议。我们通过封装调试协议,在本机通过一个nodejs脚本开启调试服务,将解析引擎的信息通过这个服务进行中转,服务将消息统一处理为浏览器使用的调试协议,通过websocket发送给浏览器,然后在浏览器的操作会发送到此服务上,再进行转换,发送到对应的解析引擎,实现调试功能。目前已经具有:断点调试,console输出,dom实时高亮,浏览器展示设备界面,变量输入等功能。

基础功能复用

我们大量复用了以后App架构的基础设施,如果图片,网络,日志统计等等,Web版的页面在App也是使用Web容器,其他离线化,开关,数据收集等都是复用Web容器的功能。同时,我们还提供了配套的编译、集成的工具。

总结

个人经历的第一个框架开发,框架开发确实需要考虑诸多因素。在高速的迭代中,也成长了许多。

上一篇下一篇

猜你喜欢

热点阅读