细读鸿蒙应用生态开发白皮书

下载鸿蒙应用生态开发白皮书

版本:V2.0,发布时间:2022

万物互联IoT设备量级到2025将达到百亿级,万物互联IoT场景下的挑战,开发者需要支持多样化的设备、跨设备的协作,但目前不同的设备类型包含不同的传感器能力、硬件、屏幕尺寸、OS和开发语言,还有不同的交互方式,跨设备协作面临分布式开发带来的各种复杂性,如跨设备间的网络通信、数据同步。采用传统开发模式,适配、管理工作量巨大。

总结移动App开发面临的主要挑战:

  • 针对不同设备上的不同OS,重复开发、维护多套版本
  • 多种语言栈,对开发者技能要求高
  • 多种开发框架,不同编程范式
  • 命令式编程,关注过程细节、变更频繁、维护成本高

AI的演进,云化(计算在云端数据中心进行),依赖网络,有一定时延,且数据传输的安全性、私密性不能得到有效保证。端侧AI可派上用场,它可提供自然语言交互、环境智能感知、图像识别等。

传统厚重App-体验好、功能全,开发成本高、周期长,且用户需主动搜索、安装、升级、卸载等显性操作。
小程序-轻量化、快速达成消费者意愿、可独立执行、完成单一功能,即用即走、无需安装卸载、永远最新

提出新的应用生态特征:

  • 跨设备:一次开发多端运行,软件实体转移、跨设备协同运行,分布式体验
  • 轻量化:轻量化服务、最小化资源消耗
  • AI智慧分发: 智慧场景服务找人
  • 软硬AI协同:满足应用高性能

应用核心技术理念:

  1. 一次开发多段部署
  2. 可分可合自由流转
  3. 统一生态原生智能

核心技术理念

鸿蒙为一多提供了:多端开发环境、多端开发能力、多端分发机制

一次开发多段部署


多端开发环境

面向全场景多设备提供的一站式开发平台 - HUAWEI DevEco Studio

HUAWEI DevEco Studio 核心功能和特征

能力细分:

  1. 多端双向预览
  2. 分布式调试 分布式调试交互图
  3. 分布式调优 多设备联合分析
  4. 超级终端模拟
  5. 低代码可视化开发

多端开发能力:

  1. 多端UI适配。尺寸抽象化:尺寸抽象化
  2. 交互事件归一。缩放交互的规则:缩放交互的规则
  3. 设备能力抽象。使用SysCap来定义每个部件对App开发者提供的系统软硬件能力。API、SystemCapability、部件和设备的关系: 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 能力分层开放框架

  • 场景化能力:通用卡证识别、实时语音识别
  • 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方式使用
    • 鸿蒙生态三方库发布与使用完整的流程:

鸿蒙应用的典型开发场景:

  1. 独立开发一个应用
  2. 独立开发一个元服务
  3. 同时开发应用和元服务

Harmony Design细节:

  • 全场景设计规范: 包括设计理念、人因研究、应用架构、人机交互、视觉风格、动效、声音、多态控件、界面用语、全球化、无障碍、隐私设计等。
  • 丰富的设计资源:图标、媒体音效、字体(支持GB18030-2022 L2)
  • 设计工具:响应式布局、6种动态布局能力。

ArkTS语言细节:它使用.ets作为源码文件后缀,它在TS语法风格基础上,对TS的动态类型添加更严格的约束,引入静态类型,将编译时所确定的类型应用到运行时性能优化中(由于在编译时就可确定对象布局,对象属性的访问可更高效)。同时提供声明式UI、状态管理等能力。ArkTS引入并行、并发能力增强、类型系统增强等语言特性。

ArkUI框架,主体结构图:


声明式开发范式,

  1. 状态管理

应用范围的数据以 AppStorage 为中心进行管理,根据使用场景分为提供系统环境数据管理的 Environment,提供持久化存储支持的 Persistent Storage。组件范围的数据通过装饰器方式提供管理机制,称为状态变量装饰器:

  • @State,组件拥有的状态属性,发生更改时,组件会重新渲染更新UI
  • @Link,组件依赖父组件中的某些状态属性,当任何一个组件中的数据更新时,另一个组件的状态都会更新,父子组件重新渲染
  • @Prop,类似@Link,但子组件的更改不会同步到父组件上,属于单向传递
  • @Provide,作为数据提供方,可更新其子孙节点的数据并触发页面渲染
  • @Consume,在感知到@Provide数据更新后,触发当前自定义组件的重新渲染

基于 AppStorage 还提供了两个状态变量装饰器:

  • @StorageLink,通过该状态变量与 AppStorage 建立双向数据绑定,key 为 AppStorage 中所的属性键值。
  • @StorageProp,单向数据绑定。
  1. 布局
  • 页面布局结构
  • 页面元素构成
  • 适合的布局容器组件、属性控制元素位置和大小约束
  • 支持多种布局方式:弹性布局、列表、宫格、栅格
  1. 组件化

一切UI显示都是组件,ArkUI框架提供的为预置组件,开发者定义的为自定义组件,特点:

  • 可组合
  • 可冲用
  • 配置化生命周期回调
  • 数据驱动更新
  1. 装饰器
  • @Builder,修饰函数,可在 build() 之外生命,在一个自定义组件内快速生成多个布局内容
  • @Styles,将多条样式提炼成一个方法,直接在组件声明的位置使用。
  • @Extend,将新的属性函数添加到内置组件上
  1. 动效

声明式UI的动画由数据变化驱动,而不是直接控制动画的播放,UI框架根据配置自动地进行动画执行:

  • 属性动画
  • 显式动画,animateTo接口
  • 转场动画
  1. 事件交互
  • UI组件事件
  • 交互事件:点击、拖拽、焦点、触摸、按键、鼠标、手势
  1. 绘制能力
  • 图形组合,布局、绝对定位、各种图形组合实现
  • Canvas绘制
  1. 混合开发

游戏、地图需要C++ SDK独立渲染,或相机、视频播放器需要独立纹理填充,XComponent组件支持加载应用动态库、NAPI跨语言调用。

  1. 跨平台

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 分发元服务


自由流转

自由流转的两种形态

分布式运行环境

跨端迁移示意

显示协同示意

交互协同示意

算力协同示意


运维监控架构图

崩溃服务功能

性能管理功能

云服务监控功能


全场景案例

多机位直播场景

分布式健身场景

分布式打车场景

分布式办公场景

分布式游戏场景

posted @ 2024-02-29 19:15  汪淼焱  阅读(350)  评论(0编辑  收藏  举报