【鸿蒙南向开辟】OpenHarmony 应用开机自启

打印 上一主题 下一主题

主题 245|帖子 245|积分 735

实现原理

整个实现原理就是专门弄个应用当启动器,让这个应用进行开机自启(此处的开机自启并不是直接打开应用,而是自启一个服务挂在背景运行),然后让这个应用去打开需要自启的那个应用,在此也是参考了这篇文章
创建应用及替换 full-sdk


创建完毕之后需要替换一下 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

设置 ServiceExtensionAbility


  • 在工程 Module(entry)对应的 ets 目次下,右键选择 New > Directory,新建一个目次并定名为 ServiceExtAbility
  • 在 ServiceExtAbility 目次,右键选择 New > TypeScript File ,新建一个 TypeScript 文件并定名为 ServiceExtAbility.ets
  • ServiceExtAbility.ts 文件中,导入 ServiceExtensionAbility 的依赖包,自界说类继续 ServiceExtensionAbility 并实现生命周期回调。
  • 代码如下,包含跳转应用的代码,我加了个二十秒的延长,否则的话开机是检测不到应用包的是跳转不了的,这里应该也可以去检测之类的吧,大佬可以优化下。
  1. import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
  2. import Want from '@ohos.app.ability.Want';
  3. const TAG: string = "[ServiceExtAbility]";
  4. export default class ServiceExtAbility extends ServiceExtensionAbility {
  5.   onCreate(want: Want) {
  6.     setTimeout(() => {
  7.       let params: Want = {
  8.         'bundleName': 'com.example.app_question_40', // 这里是你的应用包名
  9.         'moduleName': 'entry',
  10.         'abilityName': 'EntryAbility'
  11.       };
  12.       try {
  13.         this.context.startAbility(params, (error) => {
  14.           if (error.code) {
  15.             // 处理业务逻辑错误
  16.             console.error(`startAbility failed, error.code: ${error.code}, error.message: ${error.message}`);
  17.             return;
  18.           }
  19.         });
  20.       } catch (paramError) {
  21.         // 处理入参错误异常
  22.         console.error(`error.code错误:  ${paramError.code}, error.message: ${paramError.message}`);
  23.       }
  24.     }, 20000)
  25.     console.info(TAG, `onCreate_____end, want: ${want.abilityName}`);
  26.   }
  27.   onRequest(want: Want, startId: number) {
  28.     console.info(TAG, `onRequest, want: ${want.abilityName}`);
  29.   }
  30.   onConnect(want: Want) {
  31.     console.info(TAG, `onConnect, want: ${want.abilityName}`);
  32.     return null
  33.   }
  34.   onDisconnect(want: Want) {
  35.     console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
  36.   }
  37.   onDestroy() {
  38.     console.info(TAG, `onDestroy`);
  39.   }
  40. }
复制代码

  • 然后再去 src/main/module.json5 去添加注册 ServiceExtensionAbility,并修改 module.mainElementServiceExtAbility
  1. "mainElement": "ServiceExtAbility"
  2. "extensionAbilities": [
  3.       {
  4.         "name": "ServiceExtAbility",
  5.         "icon": "$media:icon",
  6.         "description": "service",
  7.         "type": "form",
  8.         "exported": true,
  9.         "srcEntry": "./ets/ServiceExtAbility/ServiceExtAbility.ets"
  10.       }
  11.     ],
复制代码

  • 然后这个文件下还要再设置一个权限
  1. "requestPermissions": [
  2.       {
  3.         "name": "ohos.permission.INTERNET"
  4.       },
  5.       {
  6.         "name": "ohos.permission.START_ABILITIES_FROM_BACKGROUND"
  7.       }
  8.     ],
复制代码
获取指纹证书

如今把应用安装到呆板上是安装不上的因为要改设置文件才支持 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 以是需要单用户安装

  • 把 Build 完成的 hap 包推入体系中。
   hdc file send D:\data\start_run.hap /data
  

  • 使用 bm 命令安装应用
   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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表