news 2026/10/28 1:16:23

【HarmonyOS】元服务开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【HarmonyOS】元服务开发

1 前言

在万物互联的今天,终端设备不断增多,app数量也是呈指数级上升,导致终端设备中的许多应用变得冗余,有些甚至使用一次后就再也没有打开过,所以迫切需要一种“即开即用”的应用软件。HarmonyOS中的元服务正是基于HarmonySDK(只能使用“元服务API集”)开发,支持运行在多种设备上的更加方便快捷的免安装应用,自我理解为系统级的小程序。

引开发者官网所述,元服务具有“秒开直达,纯净清爽;服务相伴,恰合时宜;即用即走,账号相随;一体两面,嵌入运行;原生智能,全域搜索;高效开发,生而可信”等特征。通常我们可以在负一屏或者终端设备桌面设置快捷入口,实现“一键直达”的效果。

2 基础知识

在开发之前,我们首先要了解几个关于元服务的基础知识。

2.1 分包

在HarmonyOS的应用开发中,整个项目会被打包成一个程序包(.app),一个程序包会包含多个包文件(HAP包或HSP包)。元服务则是在这个基础上进一步限制每一个包文件(HAP包或HSP包)大小,从而实现快捷打开、免安装的特性。而这种多包开发的操作即称为“分包”。

具体的分包规格其实和我们开发应用时一样:首先会将EntryHAP作为程序的入口包,也称“首包”,此程序包中存放元服务首次打开时运行的代码和资源文件;前文说到元服务对程序包大小有限制,具体为同一个元服务下所有包文件(加上其依赖的所有共享包)的大小总和不能超过10MB,单个包文件(加上其依赖的所有共享包),大小不能超过2MB,这两个规格必须同时满足,否则会打包失败。

2.2 预加载

开发者可以通过配置预加载,这样系统就会自动下载和安装可能需要的分包模块,实现运行某一模块时预加载下一模块,提升模块加载速度,优化用户体验。具体配置为在某一分包模块下的module.json5中“atomicService”标签下的preloads字段设置进入此模块并完成页面加载后的预加载模块。此处以Homemodule为例,具体代码如下:

{ "module": { "name": "HomeModule", "type": "entry", "installationFree": true, "pages": "$profile:main_pages", "atomicService": { "preloads": [ { //注意:此处设置的模块不可为类型为entry的模块,任何模块均不可设置预加载类型为entry的模块 "moduleName": "FeatureModule" } ] }, ... } }

在HomeModule模块的页面加载结束后,系统会自动执行预加载,去下载和安装模块名为FeatureModule的模块。

2.3 老化

元服务的老化是指系统按照一定策略清理不活跃的元服务,以释放空间的过程。如图1所示。

图1

2.3.1老化时机

元服务会由系统定时器触发老化 。当系统中所有元服务占用总空间大于既定阈值时,系统会启动老化机制 。此时,系统会优先清理长时间未使用及使用频率较低的元服务。此外,老化机制还会在设备处于熄屏状态且剩余电量不低于10%时触发。

2.3.2老化顺序

老化顺序优先清理长时间未使用及使用频率较低的元服务 。具体来说,系统会首先清理Cache目录中的数据,然后再清理其他目录中的数据,直到系统中所有元服务占用总空间小于既定阈值的80%。

为了避免重要数据被频繁老化清理,开发者应合理规划数据存放目录。建议将非重要数据存放到Cache目录,而将重要数据存放在其他目录中。

3 开发流程

3.1 开发准备

创建元服务项目前,需要注册华为开发者帐号并创建您的元服务;然后搭建开发环境,通过DevEco Studio创建元服务工程。

3.2 创建元服务工程

如图2所示创建元服务工程

值得注意的是,点击next后会让我们进行登录,如果以游客模式创建元服务,当开发的元服务工程或历史元服务工程在真机上运行并安装时,需要在AppScope > app.json5文件中补充当前开发者账号下已在AppGallery注册且真实存在的包名。

图2

登录完成后,按照指引去agc平台新建元服务项目,并绑定appid。然后你会发现其实新建的元服务工程和之前自己写的其他项目结构基本一致,因为其实元服务就是轻量化的app。

3.3 生成元服务图标

为了区别元服务和正常app,agc在图标方面做了差异化区分,元服务的图标会在开发者上传的图标外围加上一圈上点下线的圆环。DevEco Studio支持Image Asset功能,可帮助开发者生成统一的元服务图标样式。具体流程如下:

右键模块文件,新建→Image Asset,按照页面指引选择图片路径,配置颜色和名字等信息。

3.4 新建分包模块

当元服务的功能逐渐变多时,可以把相对独立的功能拆分成新的分包模块,再配合前文介绍的预加载,实现「首屏秒开、功能按需加载」。具体操作:右键工程根目录,选择 New → Module,选择 Ability 模板,将模块类型设为 feature(免安装模块),命名如 FeatureModule。创建完成后该模块的 module.json5 大致如下:

{ "module": { "name": "FeatureModule", "type": "feature", "installationFree": true, "pages": "$profile:main_pages" } }

随后在 entry 模块的 module.json5 中,把新模块配置进 atomicService 的 preloads 字段(见 2.2),即可实现首页加载完成后自动预加载该分包。页面跳转时使用系统路由能力即可,目标分包尚未安装时系统会按需拉起下载,对用户来说仍然是「无感」的。

3.5 运行调试与签名

元服务在真机上运行同样需要签名。依次打开 File → Project Structure → Signing Configs,勾选 Automatically generate signature(需提前登录开发者账号),DevEco Studio 会自动完成调试签名。点击 Run 安装运行,重点验证两点:一是冷启动的「秒开」体验是否达标,二是跨分包页面的跳转与预加载是否生效。若工程是以游客模式创建的,记得按 3.2 中的说明在 AppScope 的 app.json5 中补充真实包名,否则真机安装会失败。

4 总结

总的来说,元服务本质上就是「轻量化的 app」:开发方式与普通应用几乎一致,差异主要集中在包体积限制(单包不超过 2MB、总包不超过 10MB)、分包与预加载、老化机制以及图标的差异化设计上。它适合功能单一、即用即走的场景,例如工具查询、扫码、出行服务等。

开发实践中有三点建议:第一,合理规划数据目录,非重要数据放进 Cache 目录以应对系统老化清理,重要数据放其他目录;第二,按功能边界拆分 feature 模块并配好预加载,让首包尽可能小;第三,上线前务必用真实设备完整跑一遍秒开、跨分包跳转与账号相随的体验,确保「即开即用」的卖点真正落地。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 1:15:30

CentOS 7源码编译keepalived-1.2.13双机热备与VIP漂移排障

简介:这是 keepalived-1.2.13.tar.gz 开源软件源码包,面向网络运维、系统管理员与高可用架构学习者,聚焦 VRRP 虚拟路由冗余协议、服务健康检查与 LVS 负载均衡支撑,可用于搭建主备故障切换实验环境、研读 1.2.13 版本的实现细节并…

作者头像 李华
网站建设 2026/10/28 1:14:48

【傻呱呱】云服务器开启ssh的root权限登录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 1:13:02

STM32C5嵌入式开发实战:从固件到上位机的完整软件链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 1:12:56

ESP8266 DIY智能WIFI时钟:NTP自动校时+天气显示,成本仅23元

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 1:12:21

宽禁带半导体从顶流到主流:SiC与GaN的产业化之路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 1:11:26

营销技能修炼:从用户洞察到数据驱动的完整闭环

1. 营销技能到底包含什么——先别急着学工具每次有人问我“怎么提升营销技能”,我第一反应都是反问一句:你说的营销技能,是指写文案、投广告、做活动,还是指那种能把东西卖出去的能力?这两者差别非常大。前者是“术”&…

作者头像 李华