OpenHarmony如何维护升级自己的应用

OpenHarmony如何维护升级自己的应用 我开发了一款基于openharmony的类似车机应用,可以理解为一个APP,但现在APP如何去升级安装更新?目前应用是不上架到应用市场的,完全由我们后台接口提供下载安装包,进行安装,但目前我不知道我这个思路是否正确,我想在开机的时候就执行一个脚本,然后通过判断某个路径下是否有新的安装包,如果有就在脚本中执行 bm install -r -p /data/local/tmp/aifarmcar.hap,进行安装,但现在碰到的问题是脚本中报错说是没有权限,无法安装,但我通过hdc shell bm install -r -p /data/local/tmp/aifarmcar.hap是可以正常安装的,大家有没有好的解决方案?

图片


6 回复

感谢回答,但这个installer模块我已经集成了,是因为百度地图SDK需要AGC颁发的证书才能使用其功能,我现在被卡这了

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

https://developer.huawei.com/consumer/cn/forum/topic/0207203526110489060?fid=0109140870620153026

OpenHarmony上面没有开发过地图相关的功能,可以试试上面链接中1楼的回答

OpenHarmony应用维护升级主要通过应用市场或OTA推送实现。开发者需在项目配置中更新版本号,编译生成新的HAP包。系统支持静默升级和用户确认升级两种方式。应用数据在升级过程中会自动迁移,确保用户数据不丢失。可通过ohos.upgrade接口检测更新状态,使用分布式能力实现跨设备协同升级。

针对您提出的OpenHarmony应用升级安装权限问题,您的整体思路(通过后台接口下载安装包,再执行本地安装)是可行的,但直接通过开机脚本执行bm install命令通常会因权限不足而失败。这是因为bm命令需要系统级权限(如ohos.permission.INSTALL_BUNDLE),而普通脚本或应用默认不具备该权限。

问题核心

您通过hdc shell可以安装成功,是因为hdc shell默认以rootshell用户身份运行,拥有较高权限。而开机脚本(如通过initsystem能力启动)或普通应用进程,通常运行在受限的上下文中,无法直接调用需要高权限的系统命令。

解决方案建议

  1. 使用系统API进行静默安装
    对于系统应用或具有相应权限的应用,推荐使用OpenHarmony的@ohos.bundle.bundleManager@ohos.bundle.installer API进行安装。这需要:

    • 在应用的module.json5中声明权限:ohos.permission.INSTALL_BUNDLE
    • 应用需要被签名为系统应用(使用平台证书签名),或设备已授予该权限(如通过特权应用配置)。
  2. 通过系统服务或特权应用代理安装
    如果您的应用不是系统应用,可以开发一个具有安装权限的特权应用作为“安装器”,主应用通过IPC(如RPC或Ability调用)请求该特权应用执行安装操作。这是更规范的权限管理方式。

  3. 配置启动服务时提升权限
    如果坚持使用脚本方式,可以考虑将安装脚本配置为系统服务,并在init.cfg中为其声明所需权限(需要系统定制能力)。但这种方式涉及系统镜像修改,适用于设备厂商或深度定制场景,对普通应用开发者不推荐。

关键注意事项

  • 权限声明必须匹配签名:即使声明了INSTALL_BUNDLE权限,若应用未使用正确的证书签名(如平台证书),权限仍无法生效。
  • 避免直接使用shell命令:在生产环境中,直接调用bm命令存在安全风险,且依赖shell环境,API方式更稳定可靠。
  • 如果您的应用用于车机等特定设备,建议与设备厂商合作,将应用预置为系统应用或特权应用,以便获得必要的安装权限。

操作建议

首先检查您的应用是否满足系统/特权应用要求。如果无法满足,则需设计一个具备安装权限的独立服务应用,作为安装代理。这样可以兼顾安全性和功能需求。

回到顶部