HarmonyOS overlay机制动态添加没有权限

动态overlay使用方式2

应用通过addResource(path),实现资源覆盖;通过removeResource(path),实现overlay删除。overlay资源路径需经过元能力的getContext().BundleCodeDir获取此应用对应的沙箱根目录,由应用的沙箱根目录+overlay的hsp名称组成。如:let path = getContext().bundleCodeDir + “hsp名”,其对应沙箱路径为:/data/storage/el1/bundle/enter-release-signed.hsp。

getContext().bundleCodeDir获取的应用水箱目录不允许拼接路径访问资源文件,导致没有权限将下载好的hsp包存储在该目录下,此问题该如何处理

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

文档中的动态overlay,是使用hdc file send命令把hsp包推到指定的应用安装路径下,再在代码中使用addResource(path)实现资源覆盖。但如果开发者的rom为user权限,会没有权限往安装路径下推hsp包,此时,可以通过以下步骤实现overlay:

1.在overlay hsp包的module.json5文件中,配置 "targetModuleName"和"targetPriority"值,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/module-configuration-file-V5#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%87%E7%AD%BE

2.将overlay的hsp包和hap主包同时安装到手机端上,注意hsp包和hap包的签名需要一致,此时hsp包会存在与hap包的安装目录下

3.在hap包中通过this.context.resourceManager.addResource(this.path)方式动态overlay,path为this.context.bundleCodeDir + overlay包包名,注意包名需要与overlay包的module.json5中的name保持一致,如overlay包的module.json5中的name配置为’overlay’,则path为this.context.bundleCodeDir + ‘overlay.hsp’;

同时也可以使用overlay.setOverlayEnabled方式进行静态overlay

4.杀掉应用进程,重新进入应用,可以看到overlay成功。如果希望在线热更新,需要申请system_basic等级权限ohos.permission.LISTEN_BUNDLE_CHANGE

分享
微博
QQ
微信
回复
6天前
相关问题
动态申请权限能否添加描述
828浏览 • 1回复 待解决
没有权限说明清单,分享一下啊?
4495浏览 • 1回复 待解决
HarmonyOS没有办法动态添加组件?
673浏览 • 1回复 待解决
HarmonyOS view动态添加
148浏览 • 1回复 待解决
HarmonyOS 权限添加出错
60浏览 • 1回复 待解决
HarmonyOS没有deeplink 机制
86浏览 • 1回复 待解决
HarmonyOS 如何动态添加组件?
115浏览 • 1回复 待解决
HarmonyOS 动态申请权限申请不了
105浏览 • 1回复 待解决
Harmony Navigation组件动态添加
239浏览 • 1回复 待解决
HarmonyOS Tabs组件怎么动态添加TabContent
149浏览 • 1回复 待解决
DirectionalLayout 动态添加组件问题
4644浏览 • 1回复 待解决
HarmonyOS 添加权限后运行安装失败
791浏览 • 1回复 待解决
ets怎么实现动态添加组件?
3642浏览 • 1回复 待解决