UI自动化技术在高德的实践

简介: 高德地图技术团队希望打造一套快速精准的UI解决方案,通过自动化的方式生产UI代码,解放研发生产力的同时满足客户需求。

一、背景
汽车导航作为ToB业务,需要满足不同汽车厂商在功能和风格上体现各自特色的需求。针对这种情况,传统的UI开发方式,基本上是一对一的特别定制。但是这种方式动辄就要500~600人日的工作量投入,成为业务发展的重要瓶颈。因此,能够对导航UI进行快速定制开发,成为汽车导航业务UI开发的必解课题。

高德地图技术团队希望打造一套快速精准的UI解决方案,通过自动化的方式生产UI代码,解放研发生产力的同时满足客户需求。

二、方案调研
为了避免重复造轮子,我们调研了行业上现有的UI自动化生成方案。主要分为两种:

Sketch插件方案:
guanzhong1.png

该方案是基于Sketch开发插件,利用SketchAPI读取出图层信息转换DSL,主要代表作有imgcook、Dapollo等。

优势:从SketchAPI可以读取到非常详细的信息,足以生成高质量的界面代码。

劣势:要求效果图必须使用Sketch制作,并且对效果图会有一定的制图要求。

图片转代码方案:
guanzhong2.png

该方案是通过经训练的深度神经网络,从截图或手稿直接生成UI代码,主要代表作有pix2code、Sketch2Code等。

优势:简单粗暴,通过截图或手绘就可以生成界面资源代码。

劣势:图层细节丢失,识别准确率欠佳、自适应不好。

调研总结:

  • Sketch插件方案更加适合工程化使用,图片转代码方案更加适合用于快速生产原型。
  • 目前行业上并没有能完全满足车载导航业务使用的UI自动化解决方案。

基于以上调研结果,我们决定基于Sketch插件方案,自研适合高德汽车业务需求的UI自动化方案。

三、技术方案与实践
结合Sketch插件方案的工作流以及高德内部的人员体制,我们将UI自动化解决方案在高德内部的使用过程拆分成4大环节,如下图所示:
guanzhong3.png

制作环节

  • 提供效果图编辑的能力:
  • 制作带有主题信息的控件库供设计师拖拽使用。

对生成环节需要的信息进行输入(比如布局、控件、动画等)。

生成环节
提供资源的生成能力:

  • 生成xml、drawable、png、asvg等资源,同时打包成可执行程序,用于验证环节。
  • 对生成资源进行性能优化(如控件智能合并、png图片无损压缩,asvg生成)。

验证环节
提供多设备、多分辨率的还原度精准验证能力:

  • 效果图质量检测能力,提前发现效果图像素偏差,不符合设计规范等问题,降低后期成本。
  • 布局意图标注能力,通过简单的布局意图标注后,能实现把效果图拉伸成任意分辨率,解决设计师和开发人员沟通不流畅问题,降低沟通成本。
  • 对比验证能力,通过坐标对比、截图和效果图差分对比等方式,实现还原度的像素级验证,保障资源质量。

应用环节
客户端工程资源管理能力:

  • 通过一系列工具链,简化资源对接成本(如资源导入工具、重复资源清理工具等)。
  • 开发DHMI主题定制平台,提供给设计师或客户,实现可视化的快速修改客户端主题,自主验证的能力。满足客户不断增长的主题定制需求,实现千人千面。

四、技术难点

1、控件体系

Sketch的图层只有text、shape两种类型,分别可以对应上Android的TextView和ImageView,但是只有这两种控件无法满足业务需求。参考Android控件体系中基础控件+自定义控件的方式,我们对这两种类型图层进行组合+继承,得到两种新的控件类型。
guanzhong4.png

基础控件:Android原生控件集合,如TextView、EditText、ProgressBar等,能满足界面搭建的基本需求。

扩展控件: Android自定义控件,又分为以下两类:

业务控件:用于解决Sketch静态设计无法满足的部分,如需要canvas paint的控件。设计师只需画出静态部分,让开发人员自由发挥,能满足界面设计上动态元素、复杂元素的需求;同时也能形成控件库积累。

主题控件:大多数情况作为底色色块,实现App换肤的能力,支持在DHMI主题平台上做主题样式编辑。控件之间也支持互相组合,如多个主题控件和基础控件可以组合成一个新的业务控件。

通过基础控件和扩展控件的搭配使用,在实际生产中证实,这套控件体系可以无限扩展,做到全覆盖,满足任意界面的搭建需求。

示例

基础控件:
guanzhong5.png

业务控件:
guanzhong6.png

guanzhong7.png
2、布局体系

布局的选择

布局采用的是约束布局ConstraintLayout。

优势:

  • 扁平化,理论上一个层级可以完成复杂界面的设计,相比传统布局,性能会有很大的提升。
  • 简单易懂,贴近UED界面设计思路。
  • 通过正向推导与反向逆推,证明该布局可以替代Android平台目前所有的布局,支持搭建任意界面。

布局识别算法

布局识别算法是在设计稿上基于位置关系推算布局约束关系的一种算法。

布局识别的难点:

  • 主观性太强,容易出现误识别,没有绝对的规律。
  • 交互动态性如何识别。
  • 识别出的布局需要能支持多分辨率适配(横屏、竖屏、宽屏、方屏)。
    guanzhong8.png

3、主题定制

由于车载导航面向的对象是车厂客户,不同的客户对于应用的UI或者主题是有不同需求的,也就是说针对不同客户,不同渠道的版本,需要有不同的应用主题。随着项目的增多,如果没有一个灵活,易管理,低成本的主题定制方案,那么这将是一个噩梦的开始。

传统的实现方案
guanzhong9.png

DHMI主题定制方案
guanzhong10.png

guanzhong11.png

具体实现如下

  • 设计师在界面设计时,通过主题控件库拖拽的方式搭建界面。
  • UI自动化生成环节生成主题相关资源集成到客户端。
  • DHMI平台部署主要界面的关键场景。
  • 设计师通过点哪改哪,实时预览的方式定制界面主题。
  • 设计师自主出包还原度验收,全程无需研发参与。

五、小结
能力建设完成后,设计师和开发人员效率都得到极大提升。对于设计师,整体成本降低50%以上,有助于设计规范更好的落地,省去标注和切图环节,精准的还原度验收,快速的主题定制。对于开发人员,UI开发成本降低80%以上,不用再操心如何开发UI,只需关注资源如何对接,完善的资源管理工具链,低成本的版本迭代,主题定制0成本。

相关文章
|
22天前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
22小时前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
19天前
|
运维 监控 持续交付
自动化运维在现代数据中心的应用与实践####
本文探讨了自动化运维技术在现代数据中心中的应用现状与实践案例,分析了其如何提升运维效率、降低成本并增强系统稳定性。通过具体实例,展示了自动化工具如Ansible、Puppet及Docker在环境配置、软件部署、故障恢复等方面的实际应用效果,为读者提供了一套可参考的实施框架。 ####
|
20天前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
24天前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
51 7
|
1月前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
44 12
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
27天前
|
敏捷开发 Devops 测试技术
探索自动化测试之美:从理论到实践
在软件开发的海洋中,自动化测试犹如一座灯塔,指引着项目向着质量和效率的彼岸。本文将扬帆起航,从自动化测试的意义出发,穿越工具选择的海域,停靠在实战演练的岛屿,最终抵达持续集成的港湾。我们将通过一个具体的代码示例,体验自动化测试的魅力,并分享如何将这些实践应用到日常的软件质量保证过程中。
|
25天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
61 1
|
1月前
|
运维 监控 持续交付
云计算环境下的运维自动化实践
本文探讨了在云计算环境下实施运维自动化的必要性、挑战及解决方案,重点介绍了如何利用现代技术工具实现高效的云资源管理和监控。通过具体案例分析,展示了自动化运维在提升系统稳定性、降低人力成本方面的优势。