
本节目标理解元服务的核心特征与适用场景掌握元服务与传统应用的核心差异掌握元服务工程的创建流程能够正确配置BundleName与工程模板掌握元服务的分包策略与体积约束能够将功能模块合理拆分为HSP分包掌握ArkTS卡片的开发流程能够创建动态卡片并实现数据刷新与交互处理掌握元服务与应用之间的代码复用设计模式能够实现开发态与运行态的双向复用掌握元服务卡片的多设备协同设计方法能够实现卡片与元服务之间的数据共享能够独立完成一个元服务的开发、调试与上架准备一、元服务概述1.1 什么是元服务元服务是HarmonyOS提供的一种轻量应用程序形态具备免安装、即用即走、账号相随等特征。元服务可独立上架、分发、运行独立实现业务闭环可大幅提升信息与服务的获取效率。从应用程序入口看传统应用和元服务均可选择服务卡片作为入口。用户点击卡片或图标后无需显式安装即可使用元服务。元服务包含页面、卡片、图标三个部分分别对应UI开发、服务卡片开发和图标生成。1.2 元服务与传统应用的核心差异安装方式传统应用需要手动下载安装元服务免安装即用即走。包大小限制传统应用包大小无限制元服务单个包文件不能超过2MB所有包文件总和不能超过10MB。API范围传统应用可使用全量API元服务只能使用“元服务API集”。分发入口传统应用通过应用市场分发元服务通过负一屏、服务中心等系统分发入口触达用户。能力载体元服务跟随华为账号用户在不同设备上使用同一账号即可访问相同的元服务数据。1.3 元服务的适用场景元服务适合轻量化、高频、即时的服务场景如快递跟踪、天气查询、打车、外卖点单、日程提醒等。不适合功能复杂、需要大量本地计算或存储的重度应用。二、元服务工程创建2.1 前置准备创建元服务工程前需要先完成以下准备注册华为开发者账号并在AppGallery Connect创建元服务应用获取APP ID搭建开发环境DevEco Studio。2.2 创建工程在DevEco Studio中选择Atomic Service元服务开发选择模板后点击Next进行配置。当前元服务支持的模板类型包括Empty Ability用于Phone、Tablet设备的基础模板、CloudDev Empty Ability端云一体化开发模板、Embeddable Ability用于开发支持被其他应用嵌入式运行的元服务。注意元服务不支持Native开发方式无法选择Native工程模板开发元服务。2.3 BundleName命名规范元服务的BundleName采用固定前缀和APP ID组合的方式命名格式为com.atomicservice.[APP ID]。BundleName为自动生成开发者无法手动修改不符合命名规范的包名无法在APP ID下拉列表中展示。2.4 工程目录结构元服务工程的目录结构与标准应用工程基本一致核心目录包括AppScope app.json5元服务的全局配置信息。entryHarmonyOS工程模块编译构建生成一个HAP。包含src/main/etsArkTS源码、entryability元服务入口、pages元服务页面、resources资源文件、module.json5模块配置文件、build-profile.json5模块级编译配置、hvigorfile.ts模块级构建脚本。三、元服务分包策略3.1 分包的必要性元服务为了实现快速启动效果对HAP和HSP文件大小做了限制同时优化了元服务启动机制。元服务的这种多模块开发方式称为“分包”。通过分包页面路由跳转时系统将动态加载分包加载完成后启动对应页面。这样启动元服务时只需下载和安装首包即可立即启动元服务大大缩短元服务启动时间。3.2 分包规则与约束首包将EntryHAP作为首包包含元服务首次启动时会打开的页面即首页代码和资源。分包将其他包含功能页的模块以及HSP动态共享模块作为分包包含功能页和元服务页的代码和资源。体积约束单个包文件加上其依赖的所有共享包大小不能超过2MB超过限制DevEco Studio会打包失败。同一个元服务下所有包文件加上其依赖的所有共享包的大小总和不能超过10MB超过限制会上架应用市场失败。如因业务需要可向平台申请总包大小放宽至20MB。模块类型约束元服务仅支持单个Ability分包模块类型需要使用sharedHSP。元服务不支持feature类型模块。3.3 分包配置首包entry模块的module.json5配置{ module: { name: entry, type: entry, pages: $profile:main_pages, // ... } }分包library模块的module.json5配置{ module: { name: library, type: shared, // ... } }3.4 分包加载与路由跳转当跳转的目标NavDestination在不同的HSP分包且未被主包依赖时首次运行元服务只会下载安装主包。需要使用NavPushPathHelper先下载安装相应HSP分包再将指定的NavDestination页面信息入栈使Navigation支持动态加载HSP分包后再跳转。3.5 分包瘦身实践将非首屏Tab的业务模块拆到HSP并从entry模块的oh-package.json5的dependencies中移除对HSP的静态依赖使HSP体积不计入首包2MB限制。四、ArkTS卡片开发4.1 卡片类型ArkTS卡片分为动态卡片和静态卡片两种。在form_config.json配置文件中通过isDynamic参数控制置空或赋值为true则为动态卡片赋值为false则为静态卡片。静态卡片和动态卡片切换之后用户交互实现也需要修改。4.2 创建卡片在DevEco Studio中选中entry目录单击右键选择New → Service Widget → Dynamic Widget或Static Widget在选择开发语言类型时选择ArkTS选项选择期望的卡片尺寸后点击Finish即可完成卡片创建。创建完成后工程中会新增以下卡片相关文件EntryFormAbility.ets卡片生命周期管理文件提供卡片创建、销毁、刷新等生命周期回调。WidgetCard.ets卡片页面文件定义卡片的UI布局。form_config.json卡片配置文件定义卡片的外观规格、刷新策略等。4.3 卡片数据刷新卡片数据刷新有两种方式被动刷新定时刷新在onUpdateForm生命周期中获取最新数据并推送。结合定时刷新updateDuration配置和主动推送使用。正确做法是将更新逻辑迁移到FormExtensionAbility.onUpdateForm中在onUpdateForm中获取最新数据然后调用formProvider.updateForm(formId, formInfo)推送数据。主动刷新卡片提供方应用运行过程中如果识别到有要更新卡片数据的诉求可以主动通过formProvider提供的updateForm接口更新卡片。从API 20开始如果卡片刷新的数据通过共享内存更新刷新数据总大小不超过10MB刷新图片数量不超过20张。4.4 卡片数据共享当卡片需要从元服务获取信息或元服务需要响应卡片的操作时可以采用共享存储数据的方式实现。例如在打车场景中用户可以在卡片上执行拨打电话的操作此时卡片侧显示的司机手机号就是从元服务中获取的数据。五、应用与元服务协同设计5.1 开发态可复用设计在开发阶段将元服务的代码复用到应用在应用内快速实现和元服务相同的功能。应用和元服务分别打包上架在运行态用户可以通过元服务体验功能也可以通过应用来体验相同的功能。应用和元服务包体都包含了这一部分的功能代码通过自身的功能入口分别对用户提供相同的服务。注意应用和元服务之间共享的模块代码只能使用元服务API集。5.2 运行态可复用设计在开发阶段应用不需要实现和元服务相同的功能也不需要将元服务的功能代码复用到应用中。只需要在应用的界面中增加运行元服务的功能入口通过系统提供的嵌入式运行元服务的能力将元服务的功能页面嵌入到应用中完成对元服务的功能复用。5.3 多团队协作建议应用和元服务由不同的团队开发时建议应用和元服务通过不同的工程开发并实现代码复用。比较稳妥的结构是App和元服务作为两个独立壳共享一个common HAR源码HAR或产物HAR。5.4 多设备协同与状态共享元服务通过分布式能力 原子化服务模型让服务可以在多设备间自然流转。分布式层负责数据传输与设备间调用通过分布式数据接口distributed.put()可以在多个设备上共享同一份数据状态。卡片支持个性化定制可固定在桌面任意位置并能在手机、平板、手表等设备间便捷分享。卡片能在手机、手表、平板等设备间分享流转一点即开无需下载这依托于HarmonyOS的分布式技术。5.5 组合卡片组合卡片指多个卡片协同工作实现主控信息面板联动的效果。组合卡片的联动逻辑涉及中转页面和异步状态同步卡片尺寸适配需要同时考虑多种布局同时需要关注安全与隐私合规权限配置和隐私政策撰写。六、多元化习题习题 1判断题题目元服务的BundleName可以由开发者手动指定与普通应用没有区别。答案错误解读元服务的BundleName采用固定前缀和APP ID组合的方式命名格式为com.atomicservice.[APP ID]BundleName为自动生成开发者无法手动修改不符合命名规范的包名无法在APP ID下拉列表中展示。习题 2单选题题目以下关于元服务分包的说法正确的是 A. 元服务支持feature类型模块作为分包B. 元服务单个包文件大小不能超过5MBC. 元服务分包模块类型需要使用sharedHSPD. 元服务所有包文件总和不能超过20MB答案C解读元服务仅支持单个Ability分包模块类型需要使用sharedHSP元服务不支持feature类型模块。单个包文件加上其依赖的所有共享包大小不能超过2MB所有包文件总和不能超过10MB如因业务需要可申请放宽至20MB。习题 3多选题题目关于应用与元服务的代码复用以下说法正确的有多选A. 开发态可复用设计是在开发阶段将元服务的代码复用到应用B. 运行态可复用设计需要将元服务的功能代码复用到应用中C. 应用和元服务之间共享的模块代码只能使用元服务API集D. 运行态可复用设计通过系统提供的嵌入式运行元服务的能力实现复用答案A、C、D解读开发态可复用设计是在开发阶段将元服务的代码复用到应用选项A正确。运行态可复用设计不需要将元服务的功能代码复用到应用中只需要在应用的界面中增加运行元服务的功能入口选项B错误。应用和元服务之间共享的模块代码只能使用元服务API集选项C正确。运行态可复用设计通过系统提供的嵌入式运行元服务的能力将元服务的功能页面嵌入到应用中完成功能复用选项D正确。习题 4代码填空题题目请补全以下form_config.json配置将卡片设置为动态卡片。{forms:[{name:widget,description:示例卡片,src:./ets/widget/pages/WidgetCard.ets,uiSyntax:arkts,window:{designWidth:720,autoDesignWidth:true},______________:true,colorMode:auto,isDefault:true,updateEnabled:true,scheduledUpdateTime:10:30,updateDuration:1}]}答案isDynamic解读isDynamic参数控制卡片类型置空或赋值为true则为动态卡片赋值为false则为静态卡片。习题 5代码改错题题目以下卡片更新代码存在刷新不生效的问题请指出问题并修正。// 在元服务页面中直接调用 updateFormimport{formProvider}fromkit.FormKit;functionrefreshCard(formId:string,data:object):void{constformInfo:formProvider.FormInfo{formId:formId,data:data};formProvider.updateForm(formId,formInfo);}答案卡片更新逻辑应该迁移到FormExtensionAbility.onUpdateForm中结合定时刷新被动刷新和主动推送使用。正确做法是在onUpdateForm中获取最新数据然后调用formProvider.updateForm(formId, formInfo)推送数据。// EntryFormAbility.etsexportdefaultclassEntryFormAbilityextendsFormExtensionAbility{onUpdateForm(formId:string):void{// 获取最新数据constlatestDatathis.getLatestData();constformInfo:formProvider.FormInfo{formId:formId,data:latestData};formProvider.updateForm(formId,formInfo);}}习题 6简答题题目简述元服务的分包策略以及分包如何帮助元服务实现快速启动。答案元服务的分包策略为将EntryHAP作为首包包含元服务首次启动时会打开的页面即首页代码和资源。将其他包含功能页的模块以及HSP动态共享模块作为分包包含功能页和元服务页的代码和资源。分包帮助元服务实现快速启动的原理是启动元服务时只需下载和安装首包即可立即启动元服务大大缩短元服务启动时间。当用户需要访问分包页面时系统动态加载分包加载完成后启动对应页面。同时元服务对包大小有严格限制单个包文件不能超过2MB所有包文件总和不能超过10MB这进一步保证了元服务的轻量化特性。习题 7简答题题目简述应用与元服务之间的两种代码复用设计模式以及各自的适用场景。答案两种代码复用设计模式包括开发态可复用设计在开发阶段将元服务的代码复用到应用在应用内快速实现和元服务相同的功能。应用和元服务分别打包上架运行态用户可以通过元服务体验功能也可以通过应用来体验相同的功能。适用于需要在应用和元服务中实现相同功能的场景。运行态可复用设计在开发阶段应用不需要实现和元服务相同的功能只需要在应用的界面中增加运行元服务的功能入口通过系统提供的嵌入式运行元服务的能力将元服务的功能页面嵌入到应用中完成对元服务的功能复用。适用于应用只需要集成元服务能力、不需要重复实现相同功能的场景。七、本节知识点总结元服务核心特征元服务是HarmonyOS的轻量应用程序形态具备免安装、即用即走、账号相随等特征。包含页面、卡片、图标三个部分仅能使用元服务API集。BundleName采用固定前缀和APP ID组合方式命名。分包策略与体积约束EntryHAP作为首包其他模块作为分包。单个包文件不能超过2MB所有包文件总和不能超过10MB可申请放宽至20MB。分包模块类型必须使用sharedHSP不支持feature类型模块。ArkTS卡片开发卡片分为动态卡片和静态卡片通过isDynamic参数控制。卡片相关文件包括EntryFormAbility.ets、WidgetCard.ets和form_config.json。卡片数据刷新通过formProvider.updateForm接口实现。卡片与元服务数据共享当卡片需要从元服务获取信息或响应操作时采用共享存储数据的方式实现。打车场景中卡片显示的司机手机号就是从元服务中获取的数据。应用与元服务协同设计开发态可复用设计将元服务代码复用到应用运行态可复用设计通过嵌入式运行元服务的方式实现功能复用。多团队协作时建议App和元服务作为两个独立壳共享common HAR。多设备协同元服务通过分布式能力实现多设备间自然流转卡片可在手机、平板、手表等设备间分享流转。组合卡片实现多卡片协同主控信息面板联动。下节预告第14课将进入ArkUI的AI能力深度集成的学习涵盖端侧大模型部署、意图框架与智能体开发、以及AI驱动的动态UI生成。