OpenHarmony开发者论坛

标题: OpenHarmony设备直装hap脱离电脑hdc的两种实现思路 [打印本页]

作者: westinyang    时间: 2023-10-27 10:00
标题: OpenHarmony设备直装hap脱离电脑hdc的两种实现思路
[md]> 关于作者:[I'm westinyang](https://kaihongpai.feishu.cn/wiki/CqWLwJRadibxztkrIWZcogWxnXd)

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

# 实现思路1(官方接口)

- 参考文档 [应用开发文档 > 包管理 @ohos.bundle.installer (installer模块)](http://docs.openharmony.cn/pages ... -apis-installer.md/)
  - 安装应用 BundleInstaller.install
  - 卸载应用 BundleInstaller.uninstall
- 需要注意的是,这个API需要 `ohos.permission.INSTALL_BUNDLE` 权限,权限等级为 `system_core`,所以我们要配置APL或者ACL方式修改应用的Profile,具体参考:[应用开发文档 > 访问控制(权限)开发概述](http://docs.openharmony.cn/pages ... stoken-overview.md/),可手动或自动签名,文档内都有详细说明
- 卸载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](http://docs.openharmony.cn/pages ... h-explicit-want.md/)

# 实现思路2(另辟蹊径)

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

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

# 持续关注

- 关于作者:[I'm westinyang](https://kaihongpai.feishu.cn/wiki/CqWLwJRadibxztkrIWZcogWxnXd)
- 哔哩哔哩:[个人主页](https://space.bilibili.com/74433635)
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5