赞
踩
整个实现原理就是专门弄个应用当启动器,让这个应用进行开机自启(此处的开机自启并不是直接打开应用,而是自启一个服务挂在后台运行),然后让这个应用去打开需要自启的那个应用,在此也是参考了这篇文章
创建完毕之后需要替换一下 sdk,使用 full-sdk 才有权限使用 ServiceExtensionAbility 模块
具体替换步骤可以去参考官方文档,我大概说下步骤
https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/faqs/full-sdk-switch-guide.md
1.首先去这个地址下载 full-sdk 包
下载地址
选择全量包进行下载,我是 windows 就以 windows 为例,解压选择 windows,只需要这个包 ets-windows-x64-3.2.14.1-Release,版本按照你自己的来。
下一步打开 sdk 目录,在编辑器-> 工具->sdk 管理找到 sdk 安装路径
只需要替换 ets 文件夹里面的文件即可,首先先记录 ets 目录下随便哪个文件夹里的 oh-uni-package.json 文件里的版本号,比如我这里是 3.2.13.5
然后将 ets 里的文件删除,也可以备份到外面去,然后将这个压缩包 ets-windows-x64-3.2.14.1-Release 解压,解压的文件全部放进 ets 目录中,然后将每个文件夹里面的 oh-uni-package.json 的版本号改为之前所记录的版本号,我是 3.2.13.5 我就全改成 3.2.13.5 了。
替换完成之后把依赖安装一下,也就是 \build-tools\ets-loader 目录中打开 cmd 执行 npm install 依赖装完就替换完成
因为后台打开系统应用的 api 是只有系统应用才有权限的所以更改一下
还是进入 sdk 目录下打开这个文件
修改这两个的值就行了
"apl":"system_core",
"app-feature":"ohos_system_app"
然后保存就 ok 了
单击 文件 > 项目结构 > Project > SigningConfigs 界面勾选 Automatically generate signature,等待自动签名完成即可,单击 OK。
import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility'; import Want from '@ohos.app.ability.Want'; const TAG: string = "[ServiceExtAbility]"; export default class ServiceExtAbility extends ServiceExtensionAbility { onCreate(want: Want) { setTimeout(() => { let params: Want = { 'bundleName': 'com.example.app_question_40', // 这里是你的应用包名 'moduleName': 'entry', 'abilityName': 'EntryAbility' }; try { this.context.startAbility(params, (error) => { if (error.code) { // 处理业务逻辑错误 console.error(`startAbility failed, error.code: ${error.code}, error.message: ${error.message}`); return; } }); } catch (paramError) { // 处理入参错误异常 console.error(`error.code错误: ${paramError.code}, error.message: ${paramError.message}`); } }, 20000) console.info(TAG, `onCreate_____end, want: ${want.abilityName}`); } onRequest(want: Want, startId: number) { console.info(TAG, `onRequest, want: ${want.abilityName}`); } onConnect(want: Want) { console.info(TAG, `onConnect, want: ${want.abilityName}`); return null } onDisconnect(want: Want) { console.info(TAG, `onDisconnect, want: ${want.abilityName}`); } onDestroy() { console.info(TAG, `onDestroy`); } }
"mainElement": "ServiceExtAbility"
"extensionAbilities": [
{
"name": "ServiceExtAbility",
"icon": "$media:icon",
"description": "service",
"type": "form",
"exported": true,
"srcEntry": "./ets/ServiceExtAbility/ServiceExtAbility.ets"
}
],
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.START_ABILITIES_FROM_BACKGROUND"
}
],
现在把应用安装到机器上是安装不上的因为要改配置文件才支持 ServiceExtensionAbility 服务,我们先把 module.json5 里面的 extensionAbilities 里 type 类型改下,先把应用装到机器上去。
然后执行 hdc 命令
hdc shell “bm dump -n 包名 | grep finger”
然后就可以得到指纹代码了
然后将机器上的特权配置文件**install_list_capability.json **放到本地
hdc file recv /etc/app/install_list_capability.json D:\
添加应用信息
bundleName:应用包名。
app_signature:就是刚刚获取到的指纹
allowAppUsePrivilegeExtension:是否允许应用使用 ServiceExtension、DataExtension。
singleton:是否允许应用安装到单用户下(U0),常驻和自启动需配置。
keepAlive:是否允许应用常驻,常驻和自启动需配置。
然后将其推回到机器上
hdc shell “mount -o remount,rw /”
hdc file send D:\install_list_capability.json /etc/app/install_list_capability.json
然后重启机器
hdc shell reboot
记得把配置文件的 type 改回去改为 service
因为设置了 singletion 所以需要单用户安装
hdc file send D:\data\start_run.hap /data
hdc shell “bm install -p /data/start_run.hap -u 0”
hdc shell reboot
在这里再加一个卸载的命令,卸载这个应用也是需要 id 的
hdc shell “bm uninstall -n com.example.start_run -u 0”
●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。