问题现象
元服务首包HAP依赖其他HSP包,HAP加依赖的HSP大小已超过2MB,为何可以打包成功?
背景知识
元服务为了实现快速启动效果,对HAP和HSP文件大小做了限制,单个包文件(加上其依赖的所有共享包),大小不能超过2MB,具体参考:分包。
解决方案
结论:元服务单包体积限制是基于压缩后的文件大小。在打包发布版本时,系统将校验包体积是否满足上架要求,开发者需确保HAP/HSP(含其直接依赖包)压缩后大小不超过2MB。
- 场景一:首包HAP不直接依赖HSP包
首包HAP不直接依赖HSP包,指在entry模块的oh-package.json5中dependencies字段未声明依赖的HSP包。
Navigation跨模块页面路由支持首包Navigation跳转的目标NavDestination在不同的HSP分包且该HSP包未被首包依赖。由于未被直接依赖,打包时HSP大小不会统计到首包中,首包HAP加上间接依赖的HSP1和HSP2大小(压缩后)虽然超过2MB,依然可以打包成功。

- 场景二:首包HAP直接依赖HSP包
首包直接依赖HSP包,指在entry模块的oh-package.json5中dependencies字段直接声明了依赖的HSP包。
- 压缩后首包HAP+依赖的HSP小于2MB,打包成功:
通过DevEco Studio直接打开APP包,发现首包HAP加依赖的HSP1和HSP2虽然大于2MB,但通过压缩软件打开发现,压缩后的首包加依赖包的大小是小于2MB,所以能够打包成功。


- 压缩后首包HAP+依赖的HSP大于2MB,打包失败:
选择场景一的HSP1和HSP2,并在entry模块的oh-package.json5中dependencies字段直接声明了依赖的HSP1和HSP2,由于压缩后的首包HAP加HSP1,HSP2大小超过2MB,打包失败,报错内容符合预期:

总结
元服务首包大小计算规则是首包本身加上直接依赖的HSP包压缩后的大小。通过Navigation跨模块路由,首包HAP无需直接依赖分包HSP,可以有效降低首包大小。