毕业于西安电子科技大学通信工程学院,曾在乐视就职,现担任芒果TV平台技术部Android高级研发工程师,负责芒果TV客户端整体框架建设及核心技术体系的探索落地,覆盖Android技术架构、业务研发、跨平台、动态化及客户端性能体验的优化。作为核心研发人员推动芒果TV客户端动态化技术体系的建设。
1. 移植工作
1.1 团队建设:鸿蒙开发者缺失,如何保证从现有团队中合理抽调人员在规定的时间点完成研发工作。
1.2 资源整合:如何保证在鸿蒙系统上已有研发资源的兼容性,如CMS运营数据,业务接口等。
1.3 基建能力:鸿蒙原生基础能力建设,降低研发人员重复性工作,如网络库,图片库,日志库,WebView等。
1.4 工程能力:工程结构选型,组件化模式研发,共享包的依赖与使用,搭建流水线等工程能力。
1.5 移植进展:芒果TV目前已完成内测版本交付,完成频道,搜索,广告,片库,播放等核心功能的移植工作。
2. DSL在鸿蒙系统的主要挑战
2.1 端能力一致性
现状:目前芒果动态化是在Yoga的基础上实现动态布局能力,而鸿蒙系统原生的Flex布局能力与Yoga存在差异性,如绝对布局,
Flex&Shrink,父视图如何适应子视图的100%填充等。
挑战:同一份XML布局文件,如何解决原生Flex布局能力与Yoga的差异性,保证端能力的一致性?
技术实现:
2.1.1 基础组件建设:根据组件类型,使用场景,渲染样式等方面规划基础组件的建设工作,如文本,图片,视图,轮播图等。
2.1.2 排除差异性:通过技术手段与XML布局文件中不同平台差异化定制解决绝对布局如何支持右下排列,Flex&Shrink冲突性问题,父子
视图的自适应等问题。
2.2 动态渲染控件
现状:鸿蒙系统采用声明式UI,页面布局需要提前声明,APP运行时通过状态绑定,完成控件的渲染与刷新。
挑战:在声明式UI前提下,如何实现控件的动态创建,渲染及刷新?
技术实现:
2.2.1 布局解析:客户端解析下发的XML布局文件,根据布局唯一标识管理树状结构布局。
2.2.2 控件创建:根据业务下发数据,查找对应的树状结构布局,根据节点类型与原生控件的映射关系,遍历树状结构实现控件的动态创建。
2.2.3 控件渲染:根据节点绑定的布局与样式信息,动态完成控件的状态绑定,实现控件的渲染与刷新。
2.3 动态绑定事件
现状:鸿蒙系统采用声明式UI,控件需要提前在onClick方法中绑定响应事件,APP运行时执行控件绑定的响应事件实现交互。
挑战:同一个控件在不同的渲染场景下,需要支持动态绑定事件,否则会造成手势冲突。
技术实现:
2.3.1 事件优先级:所有基础组件均支持响应事件的优先级定义。
2.3.2 动态调整优先级:根据XML布局中节点定义的响应信息,动态调整组件的事件优先级,避免组件之间发生手势冲突。
2.4 GraphQL能力
现状:XML布局文件支持局部控件动态配置业务接口地址,通过二次接口请求实现局部UI刷新。
重大挑战:如何实现接口动态组装二次接口请求,控件动态绑定接口数据,实现UI刷新
技术亮点:
2.4.1 接口请求:根据接口配置信息,动态创建接口请求并发起二次请求。
2.4.2 数据绑定:接口数据的融合,状态绑定,实现局部UI刷新。
3. DSL在鸿蒙系统的优势
3.1 研发效率:鸿蒙APP首页实现DSL动态下发布局能力,研发成本降低70%,缩短迭代周期,提高人效的同时保证端能力一致性。
3.2 运营收益:与Android,iOS平台共用同一套DSL文件,运营成本降低90%
3.3 业务收益:高效支撑运营策略调整,内容做到千人千面
4. DSL在鸿蒙系统的后续探索
4.1 完善DSL基础组件支撑范围。
4.2 XML文件支持基础动画配置,控件支持动画交互效果。
4.3 XML文件支持动态脚本配置,桥接脚本与原生能力的交互。
4.4 XML文件支持颜色与图片的主题适配能力。
4.5 支持控件的动态查找,增,删能力。