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所示。图12.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 生成元服务图标为了区别元服务和正常appagc在图标方面做了差异化区分元服务的图标会在开发者上传的图标外围加上一圈上点下线的圆环。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 模块并配好预加载让首包尽可能小第三上线前务必用真实设备完整跑一遍秒开、跨分包跳转与账号相随的体验确保「即开即用」的卖点真正落地。
阅读完成 · 觉得有帮助?