共计 3292 个字符,预计需要花费 9 分钟才能阅读完成。
本文作者:石磊
随着社会的一直倒退,人们逐步重视更加高效、舒服、便捷、乏味的生存和工作体验。OpenAtom OpenHarmony(以下简称“OpenHarmony”)作为面向下一代的分布式操作系统,具备全场景、多设施、天然交互、便捷精准的技术特点,为行业数字化转型的高速倒退提供当先的技术根底,为用户体验的翻新满足提供了新思路。为了让大家深刻理解 OpenHarmony 的技术特点,本期对 OpenHarmony HAP 包装置实现进行分析。
一、HAP 包介绍
HAP 包是由代码、资源、第三方库以及利用配置文件打包生成的模块包,次要分为两种类型:entry 和 feature。
• entry:利用的主模块,作为 OpenHarmony 利用的入口,提供了利用的根底性能。
• feature:利用的动静个性模块,作为利用能力的扩大,能够依据用户的需要和设施的类型进行选择性装置。
OpenHarmony 用户利用程序包能够只蕴含一个根底的 entry 包,也能够蕴含一个根底的 entry 包和一个或多个功能型的 feature 包。
HAP 包的类型你 get 了吗?接下来咱们对 HAP 包的装置实现进行深度分析。
二、HAP 包的装置流程简介
首先咱们来看看在失常场景下,HAP 包的装置流程。如图 1:
图 1 HAP 包装置流程
- 端侧设施(如平板、大屏、车机、PC、手表和手机等)从 CDN(Content Delivery Network)云端服务器下载须要装置的 HAP 包。
- 由设施上的包治理服务来对 HAP 包进行校验,包含 HAP 包文件合法性校验、HAP 包签名信息校验和 HAP 包配置信息校验。
- 装置 HAP 包,包含创立 HAP 包的装置目录、将 HAP 包解压并拷贝到装置目录和将利用信息数据存入数据库和缓存。
以上是 HAP 包从下载到装置的整个流程,接下来对 HAP 包装置实现进行详解!
三、HAP 包装置实现详解
HAP 包文件合法性校验
当端侧设施实现从各种渠道下载 HAP 包文件之后,launcher(桌面利用)会取得该 HAP 文件的存储门路,随后 launcher 将该门路传递给包治理服务。
包治理服务获取了所有要装置的 HAP 包文件门路之后,开始对 HAP 包文件合法性进行校验。
校验的内容次要包含以下几项:
• HAP 包文件是否存在
• HAP 包文件名的合法性,要求文件名的长度不能超过 256 个字节
• HAP 包文件类型的合法性,要求文件必须以 .hap 作为后缀
• HAP 包文件门路的类型
• HAP 包文件的大小,要求单个 HAP 文件的大小不能超过 4GB
• 磁盘是否有足够的空间来装置 HAP 包文件
HAP 包签名信息校验
为了确保利用的发布者来自于同一个组织或集体,避免利用的信息被别人歹意篡改,因而须要在 HAP 包的装置或降级过程中对 HAP 包签名信息进行校验。装置过程中须要保障同一利用不同 HAP 包签名信息统一,降级过程中须要保障同一利用中待装置的 HAP 包和已装置的 HAP 包签名信息统一。
签名信息校验时,包治理服务调用平安子系统的接口,获取 HAP 包的签名信息,校验签名信息中的 appId 字符串(该字符串通过哈希算法的解决,能够保障一个利用对应惟一的一个 appId 字符串)。通过判断同一利用不同 HAP 包签名信息中 appId 字符串是否统一来判断 HAP 包的签名信息的一致性。
HAP 包配置信息校验
在装置过程中须要校验所有的 HAP 包中 config.json 文件中 APP 对象外部的配置信息是否统一。
config.json 文件中 APP 对象外部配置信息示例如下:
"app": {
"bundleName": "com.example.13jsdemo",
"vendor": "huawei",
"version": {
"code": 1000000,
"name": "1.0.0"
},
"apiVersion": {
"compatible": 4,
"releaseType": "Release",
"target": 5
}
},
通过 config.json 文件配置信息实例能够看出 HAP 包配置信息具体包含如下几项:
• 利用的包名
• 供应商
• 版本号
• 公布形式
• 实用的设施类型
• 兼容的 API 的版本信息
若同一利用的多个 HAP 包的 config.json 文件中的配置信息统一,则持续接下来的装置。若不统一,则终止装置。
装置 HAP 包
包治理服务通过创立 HAP 包的装置目录、解压 HAP 包文件及利用信息数据存入数据库和缓存三个步骤实现 HAP 包的装置。
因为系统文件的管控导致包治理服务并没有权限来创立目录,也不能将从 HAP 包中解压进去的文件拷贝到指定的目录,因而借助零碎的常驻过程——installd 过程来创立文件目录,及实现目录下文件的 IO 操作(input/output 缩写,指代读写操作)。
具体操作如图 2 所示:
图 2 装置 HAP 包
- 包治理服务通过 IPC(Inter-Process Communication)跨过程通信,告诉 installd 过程。
- Installd 过程先通过调用内核的接口 mkdir 来创立目录,再通过文件操作(将文件转换成字节流的操作)将文件写到目录下。
- Installd 过程将创立胜利与否的后果以错误码的模式返回给包治理服务。返回的错误码包含:
• ERR_APPEXECFWK_INSTALLD_CREATE_DIR_FAILED,代表创立目录失败
• ERR_APPEXECFWK_INSTALLD_REMOVE_DIR_FAILED,代表移除目录失败
• ERR_OK,代表目录创立或者删除操作胜利
- 包治理服务将 HAP 包信息保留在服务缓存中,同时为了避免包信息的失落,将这部分的内容写入到数据库。
阐明:
尽管 installd 过程领有创立和删除目录的权限,然而 installd 的权限也是无限的,它只有在利用目录的下级目录下创立和删除的权限。
通过对 HAP 包文件合法性校验、HAP 包签名信息校验、HAP 包配置信息校验和装置 HAP 包的层层分析之后,是不是对 HAP 包整个装置过程了然于胸了,接下来咱们一起来探索下 HAP 包的降级装置策略吧。
四、降级装置策略
降级装置时须要思考曾经装置的 HAP 包和待装置的 HAP 包的版本兼容性。如果开发者在新版本的 HAP 包中迭代了某些新性能和个性,这些变动对于低版本的 HAP 包可能是不能兼容的。如果一个利用的局部 HAP 包降级到更高的版本之后还仍然保留着局部低版本的 HAP 包,将造成低版本的 HAP 包无奈失常应用。因而,制订正当的降级策略是保障利用失常运行的根底。
HAP 包的降级策略总结为以下几点:
• 不容许装置比已装置利用版本号更低的 HAP 包。
• 在装置了 entry 类型的 HAP 包的前提下,装置的 feature 类型 HAP 包必须和 entry 类型 HAP 包的版本号统一。当降级装置更高版本的 entry 类型 HAP 包,须要将已装置的低版本 feature 类型 HAP 包在降级完结之后卸载,再重新安装高版本 feature 类型 HAP 包。
• 在未装置 entry 类型 HAP 包的前提下,能够降级装置更高版本的 feature 类型 HAP 包,然而须要保障在降级完结之后,低版本的 HAP 包被卸载。
装置异样解决
循序渐进实现以上操作之后依然装置失败怎么办?以后提供了如下常见问题供开发者进行查问。
问题景象 1
当曾经实现局部 HAP 包的装置时,其中某个 HAP 包创立目录失败导致该 HAP 包装置失败。
解决措施:
在装置流程完结之前,零碎卸载装置好的 HAP 包,删除已创立的装置目录和数据目录,同时删除包治理服务和数据库中的包信息,再重新安装。
问题景象 2
在 HAP 包装置的过程中,设施忽然重启,导致 HAP 包装置中断。
解决措施:
在设施重启后,首先包治理服务查看利用的装置状态,若状态失常则零碎将数据库中信息复原到包治理服务的缓存中。若状态异样则零碎将删除包信息、残留的包文件、装置目录和数据目录,再重新安装。
问题景象 3
在 HAP 包降级装置过程中,设施重启。
解决措施:
在设施重启后,包治理服务删除已创立的长期装置目录。
问题景象 4
在装置过程中,包治理服务忽然重启。
解决措施:
包治理服务忽然重启,且不会返回任何后果。此时 IPC 提供的死亡监听机制将会告知装置设施,包治理服务曾经死亡。期待数秒,包治理服务会主动重启,用户只须要重新安装。