OpenHarmony设备直装hap脱离电脑hdc的两种实现思路 原创 精华
westinyang
发布于 2023-4-3 11:50
浏览
1收藏
关于作者:I’m westinyang
序言
自 2023-02-27 日创建了 OpenHarmony开源应用社区 以来,目前已经做了3个开源应用和一些脚本文档类项目,一直想着未来做一个类似安卓世界F-Droid一样的自由开源软件应用仓库,把Gitee组织内的开源应用陆续添加进去,那为了实现这个小目标,首先要解决的问题肯定是如何在设备端实现直接安装hap,完全脱离电脑hdc命令。
关于这个问题,现阶段网上可能搜不到什么特别有价值的信息,那只能自己探索了,经过几天的研究和尝试,目前给出以下两种实现思路,希望能帮助到大家~
设备信息
- 一加6T
- OpenHarmony 3.2.11.1
此固件由 @AlgoIdeas 移植并发布
实现思路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包的名字保持一致
- hap包要放到
- 打开应用:使用显式Want启动Ability
实现思路2(另辟蹊径)
实际上我是先想到的这个方法,因为当时没仔细看官方文档,忽略了有包管理API的存在,这种方式毕竟是非常规手段,如果有官方API可用当然还是首选官方API的
- 开发一个shell命令服务放到系统内,用于操作bm/aa等本地shell命令去安装和打开应用,并提供http或其他协议的接口给上层应用调用
思路清奇哈哈
- 参考文档:设备开发文档 > Shell命令开发指导
不一定非得参考这个,自己写一个命令行工具实现就行
- 可以放到
/system/bin/
目录 - 挂载系统分区可读可写:
mount -o remount,rw /
- 参考文档:设备开发文档 > Shell命令开发指导
- 添加一个引导启动配置,用于开机自动启动我们自己写的这个shell命令服务
- 参考文档:设备开发文档 > init启动引导组件
- 其实很简单,文档内有开发实例,就是一个简单的json配置文件
- 参考上面的挂载系统分区可读可写命令,然后放到
/system/etc/init/
目录 - 然后重启系统,服务将自动启动
- 至此,我们开发的应用只需要调用本机的一个接口,即可实现安装、卸载、打开应用等操作
- 很明显这违背了OpenHarmony的访问控制权限机制,所以我称之为非常规手段 [手动狗头],并不推荐这么做
持续关注
- 关于作者:I’m westinyang
- 哔哩哔哩:个人主页
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-1-18 11:46:22修改
赞
5
收藏 1
回复
相关推荐
厉害,期待细节分享
后续来了,我做了一个名为F-OH的OpenHarmony自由开源软件的应用中心
B站演示:https://www.bilibili.com/video/BV1dM411N7CG
开源地址:https://gitee.com/ohos-dev/f-oh
大佬666!
好思路,思路2确实清新