细读鸿蒙应用生态开发白皮书
版本:V2.0,发布时间:2022
万物互联IoT设备量级到2025将达到百亿级,万物互联IoT场景下的挑战,开发者需要支持多样化的设备、跨设备的协作,但目前不同的设备类型包含不同的传感器能力、硬件、屏幕尺寸、OS和开发语言,还有不同的交互方式,跨设备协作面临分布式开发带来的各种复杂性,如跨设备间的网络通信、数据同步。采用传统开发模式,适配、管理工作量巨大。
总结移动App开发面临的主要挑战:
- 针对不同设备上的不同OS,重复开发、维护多套版本
- 多种语言栈,对开发者技能要求高
- 多种开发框架,不同编程范式
- 命令式编程,关注过程细节、变更频繁、维护成本高
AI的演进,云化(计算在云端数据中心进行),依赖网络,有一定时延,且数据传输的安全性、私密性不能得到有效保证。端侧AI可派上用场,它可提供自然语言交互、环境智能感知、图像识别等。
传统厚重App-体验好、功能全,开发成本高、周期长,且用户需主动搜索、安装、升级、卸载等显性操作。
小程序-轻量化、快速达成消费者意愿、可独立执行、完成单一功能,即用即走、无需安装卸载、永远最新
提出新的应用生态特征:
- 跨设备:一次开发多端运行,软件实体转移、跨设备协同运行,分布式体验
- 轻量化:轻量化服务、最小化资源消耗
- AI智慧分发: 智慧场景服务找人
- 软硬AI协同:满足应用高性能
应用核心技术理念:
- 一次开发多段部署
- 可分可合自由流转
- 统一生态原生智能
鸿蒙为一多提供了:多端开发环境、多端开发能力、多端分发机制
多端开发环境
面向全场景多设备提供的一站式开发平台 - HUAWEI DevEco Studio
能力细分:
- 多端双向预览
- 分布式调试
- 分布式调优
- 超级终端模拟
- 低代码可视化开发
多端开发能力:
- 多端UI适配。尺寸抽象化:
- 交互事件归一。缩放交互的规则:
- 设备能力抽象。使用SysCap来定义每个部件对App开发者提供的系统软硬件能力。API、SystemCapability、部件和设备的关系:
多端分发机制
开发多设备应用,一套工程一次打包出多个HAP,统一上架,按需分发。
1.多设备按需分发,两种模式:
2.多入口按需分发:
可分可合,通过业务模块解耦,部署时可将一个或多个模块自由组合,打包成一个App Pack统一上架,在分发运行态,每个HAP都可以单独分发满足用户单一使用场景,也可多个HAP组合分发来满足复杂使用场景。两种打包上架模式:。
- 模式1:打包成多个App Pack,不同App Pack包名不一样,需单独上架,运行态中的应用、服务的生命周期完全独立。
- 模式2:打包成1个App Pack,App Pack中的包名相同,统一上架,运行态中的应用生命周期共享。
统一生态。跨平台App开发框架从渲染方式分为3类:WebView渲染、原生渲染、自渲染。鸿蒙对应提供系统WebView、ArkUI框架、XComponent。
原生智能。原生智能 AI 能力分层开放框架:
- 场景化能力:通用卡证识别、实时语音识别
- AI控件能力:融合文字识别
- Core DeepLearning API:高性能、低功耗、端侧推理、端侧学习
鸿蒙生态应用开发能力全景图
赋能套件全景图
鸿蒙开发套件全景图
开发套件全景图
测试标准覆盖范围
鸿蒙生态应用测试工具概览
典型测试工具能力简介
上架分发测试能力介绍
运维分析能力介绍
OS开放能力集
涵盖:
- ArkUI框架
- 开箱急用的组件、丰富的动效、状态和数据管理、API扩展
- Ability
- 组件生命周期回调、系统环境变化通知、应用跳转、万能卡片。
- MVVM、声明式UI、分布式、多设备
- 分布式服务
- 通信方式差异化:WLAN、蓝牙、ETH、PLC、NFC、USB、Zigbee、红外、超声波
- 分布式软总线(分布式文件、分布式数据库、分布式硬件)、融合感知能力:
- 安全
- 设备互信认证、用户身份认证、应用隔离、权限管理、数据分级访问、数据防泄漏
- 方舟编译器(ArkCompiler)
- 支持ArkTS、TS、JS,编译为ABC(ArkCompiler Bytecode),方舟编译器:
- 方舟编译器特点:
- 原生支持类型(业界执行TS是先把TS转为JS,方舟编译器则是推导TS类型信息并将其传递给运行时,运行时使用类型信息在运行前预生成内联缓存InlineCache来加速字节码执行。TSAOT Compiler可利用字节码中的类型信息,直接编译生成优化机器码。)
- 并发模型优化与并发API。ECMAScript中没有并发语义表述,浏览器或Node.js通常会提供基于Actor并发模型的Worker API来支持多线程开发。Actor模型下的执行体之间不共享任何数据对象,通过消息机制进行通信,导致Worker启动速度慢、内存占用高。方舟编译器运行时实现了Actor实例中的不可变或不易变对象的共享,较大程度优化了Actor的启动性能和启动内存。
- 简洁的并发API。提供了TaskPool作为并发API的增强。它支持优先级调度、工作线程自动扩容。
- 安全。静态编译为ABC时提供了多重混淆能力。且不支持sloppy模式(严格模式)的JS代码,不支持eval等运行动态字符串的功能。
- 基础软件服务
- 多媒体服务:相机、视频、音频、图片、多媒体数据管理
- 通信服务:WLAN、传统蓝牙、低功耗蓝牙、NFC、电话、网络管理
- 图形服务:绘制、动画、效果、渲染、显示与内存管理、2D图形库、3D图形引擎
- 硬件服务
- 电源
- USB
- 泛sensor。订阅、控制、服务管理、数据上报、权限管控、维测。
- 位置服务。GPS、网络定位、地理编码、被动定位、地理围栏、区域管理。
- App Service
- 云端服务:账号服务、推送服务、应用内支付服务、分析服务、广告服务。
- 三方库
- ArkTS/TS/JS三方库
- C/C++三方库,NAPI方式使用
- 鸿蒙生态三方库发布与使用完整的流程:
鸿蒙应用的典型开发场景:
- 独立开发一个应用
- 独立开发一个元服务
- 同时开发应用和元服务
Harmony Design细节:
- 全场景设计规范: 包括设计理念、人因研究、应用架构、人机交互、视觉风格、动效、声音、多态控件、界面用语、全球化、无障碍、隐私设计等。
- 丰富的设计资源:图标、媒体音效、字体(支持GB18030-2022 L2)
- 设计工具:响应式布局、6种动态布局能力。
ArkTS语言细节:它使用.ets作为源码文件后缀,它在TS语法风格基础上,对TS的动态类型添加更严格的约束,引入静态类型,将编译时所确定的类型应用到运行时性能优化中(由于在编译时就可确定对象布局,对象属性的访问可更高效)。同时提供声明式UI、状态管理等能力。ArkTS引入并行、并发能力增强、类型系统增强等语言特性。
ArkUI框架,主体结构图:
声明式开发范式,
- 状态管理
应用范围的数据以 AppStorage 为中心进行管理,根据使用场景分为提供系统环境数据管理的 Environment,提供持久化存储支持的 Persistent Storage。组件范围的数据通过装饰器方式提供管理机制,称为状态变量装饰器:
- @State,组件拥有的状态属性,发生更改时,组件会重新渲染更新UI
- @Link,组件依赖父组件中的某些状态属性,当任何一个组件中的数据更新时,另一个组件的状态都会更新,父子组件重新渲染
- @Prop,类似@Link,但子组件的更改不会同步到父组件上,属于单向传递
- @Provide,作为数据提供方,可更新其子孙节点的数据并触发页面渲染
- @Consume,在感知到@Provide数据更新后,触发当前自定义组件的重新渲染
基于 AppStorage 还提供了两个状态变量装饰器:
- @StorageLink,通过该状态变量与 AppStorage 建立双向数据绑定,key 为 AppStorage 中所的属性键值。
- @StorageProp,单向数据绑定。
- 布局
- 页面布局结构
- 页面元素构成
- 适合的布局容器组件、属性控制元素位置和大小约束
- 支持多种布局方式:弹性布局、列表、宫格、栅格
- 组件化
一切UI显示都是组件,ArkUI框架提供的为预置组件,开发者定义的为自定义组件,特点:
- 可组合
- 可冲用
- 配置化生命周期回调
- 数据驱动更新
- 装饰器
- @Builder,修饰函数,可在 build() 之外生命,在一个自定义组件内快速生成多个布局内容
- @Styles,将多条样式提炼成一个方法,直接在组件声明的位置使用。
- @Extend,将新的属性函数添加到内置组件上
- 动效
声明式UI的动画由数据变化驱动,而不是直接控制动画的播放,UI框架根据配置自动地进行动画执行:
- 属性动画
- 显式动画,animateTo接口
- 转场动画
- 事件交互
- UI组件事件
- 交互事件:点击、拖拽、焦点、触摸、按键、鼠标、手势
- 绘制能力
- 图形组合,布局、绝对定位、各种图形组合实现
- Canvas绘制
- 混合开发
游戏、地图需要C++ SDK独立渲染,或相机、视频播放器需要独立纹理填充,XComponent组件支持加载应用动态库、NAPI跨语言调用。
- 跨平台
ArkUI-X
类Web开发范式
应用于LiteOS,HML+CSS+JS,单项数据绑定,事件绑定、列表渲染、条件渲染、逻辑控制。后端采用C++实现,可将JS框架下沉到C++层以减少JS内存占用。
可视可说框架
系统级-无需应用适配,自动支持标准控件文本,语音操控
应用级-开发者对控件场景、角标、别名、个性化播报等元素适配
可视可说框架 :
单次语音交互生命周期:
应用程序框架
Stage模型,主要特点:
- 规范化后台进程管理,四类后台任务:短时任务、长时任务(如音乐播放、投屏、导航)、延时任务(实时性要求不高的场景)、托管任务(如下载、提醒、定位)
- 原生支持分布式
- 跨端统一窗口管理
- 组件共享及面向对象,多个应用组件在运行时共享同一个虚拟机引擎,减少复杂应用的内存占用
- 逻辑与界面解耦
- 灵活扩展,如万能卡片、输入法、快捷开关、分享、壁纸、长时任务
Ability 是鸿蒙应用的最基本抽象单位,能够完成一个独立功能,Stage模型中Ability分为:
- UIAbility,应用主入口,对应桌面图标。一个 UIAbility 实例对应一个任务,一般一个 UIAbility 包含多个 ArkUI 页面。
- ExtentionAbility,拥有多个具体子类型,如 FormExtention 用于开发万能卡片,InputMethodExtensionAbility 用于开发输入法。
Stage模型的相关概念:
Module 的编译结果的三种目标形态:
- HAR(HarmonyOS Archive),中间编译产物,最终将被编译合并到HSP或HAP中。
- HSP(HarmonyOS Shared Package),使得模块可以以运行态服用的形式共享。相较HAR,当有多个 HAP 包依赖与同一个 HSP 时,最终的打包产物中,HSP 只存在一份,
- HAP(HarmonyOS Ability Package),可单独安装的容器包,同一个HAP包支持在多个设备上运行,但当设备差异较大时,可为不同设备设计不同的 HAP 包。
SDK
ArkTS API,涵盖应用服务、声明式UI、多媒体、图形窗口、通信、安全、Web、AI等
C API,覆盖部分基础底层能力,如libc、图形库、窗口系统、多媒体、压缩库,适合游戏、复用C/C++库、针对CPU特性专项定制如neon加速
C API接口组成:
N-AP接口,类Node的N-API接口mm
方舟工具链
普通 JS 运行时与方舟编译运行时比对图
前端流水线在发起编译时,进行工程参数解析,依赖分析,语法校验,语法转换,代码编译等各个编译动作的编排。前端编译器负责编译流水线中源代码编译,提供对应的触发接口给编译流水线。
编译流水线
前端编译器负责将 ArkTS 代码编译成方舟字节码 ABC,鸿蒙生态应用编译流程中,分为两种编译模式。分别是 bundle 和 esmodule 编译模式。两者的区别主要在源码文件的处理上,bundle 编译把各个有依赖关系的源代码通过打包方式打成一个 bundle 文件,然后通过前端编译器编译成 ABC 字节码文件;而 esmodule 编译是保持用户写的 ArkTS 模块不变,通过前端编译器编译成 ABC 字节码文件,字节码文件内保留各个模块的代码段,依赖关系等信息;当前推荐开发者使用 esmodule 模式,保持模块语义。
前端编译器架构
前端编译器是根据输入的 ArkTS 源码,进行词法,语法解析、转换、编译、输出字节码文件;在这个过程中会提取代码中标注的类型信息,进行类型检查,类型绑定,最终作为元数据生成到字节码 ABC 文件中。
集成开发环境
界面预览全景
代码调试:
- 分布式调试:分布式调试用于定位跨设备交互场景下的代码缺陷。使用跨设备的断点调试,可以使断点在不同设备的代码间跳转,自动寻找目标设备并建立调试会话。通过查看跨设备的调试堆栈,可以快速准确地跟踪设备交互的详细情况,包括每次流转的起点(设备、函数栈)、终点(设备、函数栈)和详细交互数据。
- 跨语言调试:支持 ArkTS 和 C/C++两种语言同时调试,并支持断点从 ArkTS 语言跳转到被调用的 C/C++语言;提供统一的调试堆栈,便于快速查阅两种语言代码的调用层次关系,整体操作体验与单一语言调试一致。
- Hot Reload:修改代码后,无需重新创建调试会话和启动鸿蒙生态应用、元服务,即时生效,大幅缩短调试时间。
- 多维日志:查看系统消息日志时,可根据设备、进程、日志级别以及自定义的规则灵活过滤,快速筛选,协助定位代码缺陷。在分布式场景下,可以同时查看多个设备的系统消息日志。其中特别重要的异常日志在独立的窗口呈现,避免淹没在大量系统消息日志中。
- ArkUI Inspector:支持显示视图的布局及组件关系,查看组件属性列表,过滤组件及属性,用于定位真机上的 UI 显示问题。
- 反向调试:支持通过反向单步,反向 continue 等操作,查看历史快照,线程,栈帧,变量等信息。通过反向时间线界面,查看多线程场景下的快照时序,用于定位偶现问题以及多线程并发的资源竞争等问题。
性能调优,常用场景化调优模板 :
设备模拟:
- 超级终端
- 器件模拟:外设、传感器、电池、WLAN、移动网络、GPS、Camera、陀螺仪、心率
- 场景化数据注入:低电量、弱网络信号、摇一摇、GPS、跑步
- 统一设备管理
命令行:
- sdkmgr,管理HarmonyOS SDK
- hdc,设备间传输文件、管理应用
- bytrace,内核ftrace的封装扩展
端云一体:
测试:
单元测试框架
集成测试
1.UI 测试框架 ,uitest-api 核心类功能列表
2. 性能测试工具 SmartPerf 功能介绍
3. 稳定性测试工具
4. 分布式设备录制回放
专项测试
1.应用与服务体检
2.专项测试云测平台
上架与分发
上架
一站式分发能力
签名方案
统一上架能力
上架审核 开发者检测 , 应用/服务检测
应用分发
应用分发全景图
分发阶段
智慧分发 引擎介绍
服务分发
基于场景感知的 AI 分发元服务
自由流转
自由流转的两种形态
分布式运行环境
跨端迁移示意
显示协同示意
交互协同示意
算力协同示意
运维监控架构图
崩溃服务功能
性能管理功能
云服务监控功能
全场景案例
多机位直播场景
分布式健身场景
分布式打车场景
分布式办公场景
分布式游戏场景