[经验分享] OpenHarmony设备直装hap脱离电脑hdc的两种实现思路 原创

westinyang 显示全部楼层 发表于 2023-10-27 10:00:59

关于作者:I'm westinyang

演示视频:https://www.bilibili.com/video/BV11k4y1i7Fh

实现思路1(官方接口)

  • 参考文档 应用开发文档 > 包管理 @ohos.bundle.installer (installer模块)
    • 安装应用 BundleInstaller.install
    • 卸载应用 BundleInstaller.uninstall
  • 需要注意的是,这个API需要 ohos.permission.INSTALL_BUNDLE 权限,权限等级为 system_core,所以我们要配置APL或者ACL方式修改应用的Profile,具体参考:应用开发文档 > 访问控制(权限)开发概述,可手动或自动签名,文档内都有详细说明
  • 卸载API的调用很顺利,但安装始终报 17700012 错误码(hap路径有问题),是因为没有填写沙箱路径导致的,需要做如下修改
    • hap包要放到 /data/app/el2/100/base/你的应用包名/haps/entry/files/
    • hapFilePaths前缀要写:/data/storage/el2/base/haps/entry/files/
    • hapFilePaths需要写上文件名,并且必须和步骤1中hap包的名字保持一致
  • 打开应用:使用显式Want启动Ability

实现思路2(另辟蹊径)

实际上我是先想到的这个方法,因为当时没仔细看官方文档,忽略了有包管理API的存在,这种方式毕竟是非常规手段,如果有官方API可用当然还是首选官方API的

  • 开发一个shell命令服务放到系统内,用于操作bm/aa等本地shell命令去安装和打开应用,并提供http或其他协议的接口给上层应用调用 思路清奇哈哈
    • 参考文档:设备开发文档 > Shell命令开发指导 不一定非得参考这个,自己写一个命令行工具实现就行
    • 可以放到 /system/bin/ 目录
    • 挂载系统分区可读可写:mount -o remount,rw /
  • 添加一个引导启动配置,用于开机自动启动我们自己写的这个shell命令服务
    • 参考文档:设备开发文档 > init启动引导组件
    • 其实很简单,文档内有开发实例,就是一个简单的json配置文件
    • 参考上面的挂载系统分区可读可写命令,然后放到 /system/etc/init/ 目录
    • 然后重启系统,服务将自动启动
  • 至此,我们开发的应用只需要调用本机的一个接口,即可实现安装、卸载、打开应用等操作
  • 很明显这违背了OpenHarmony的访问控制权限机制,所以我称之为非常规手段 [手动狗头],并不推荐这么做

持续关注

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部