OpenHarmony开发实战手册:应用开机自启原理

159 篇文章 0 订阅
159 篇文章 0 订阅

专研了几天的应用开机自启终于实现了,OpenHarmony 开发版本是使用的 api9,然后设备使用的是开发板,找了很久 api9 貌似是没有开机自启的 api 的,然后发现全网都没有一篇完整详细介绍自启的文章,那我就来分享一下吧。

实现原理

整个实现原理就是专门弄个应用当启动器,让这个应用进行开机自启(此处的开机自启并不是直接打开应用,而是自启一个服务挂在后台运行),然后让这个应用去打开需要自启的那个应用,在此也是参考了这篇文章
https://blog.csdn.net/q228931518/article/details/131520737

创建应用及替换 full-sdk

创建完毕之后需要替换一下 sdk,使用 full-sdk 才有权限使用 ServiceExtensionAbility 模块

具体替换步骤可以去参考官方文档,我大概说下步骤
OpenAtom OpenHarmony

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
  1. 在工程 Module(entry)对应的 ets 目录下,右键选择 New > Directory,新建一个目录并命名为 ServiceExtAbility
  2. 在 ServiceExtAbility 目录,右键选择 New > TypeScript File ,新建一个 TypeScript 文件并命名为 ServiceExtAbility.ets
  3. 在 ServiceExtAbility.ts 文件中,导入 ServiceExtensionAbility 的依赖包,自定义类继承 ServiceExtensionAbility 并实现生命周期回调。
  4. 代码如下,包含跳转应用的代码,我加了个二十秒的延迟,不然的话开机是检测不到应用包的是跳转不了的,这里应该也可以去检测之类的吧,大佬可以优化下。
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`);
  }
}
  1. 然后再去 src/main/module.json5 去添加注册 ServiceExtensionAbility,并修改 module.mainElement 为 ServiceExtAbility
"mainElement": "ServiceExtAbility"
"extensionAbilities": [
      {
        "name": "ServiceExtAbility",
        "icon": "$media:icon",
        "description": "service",
        "type": "form",
        "exported": true,
        "srcEntry": "./ets/ServiceExtAbility/ServiceExtAbility.ets"
      }
    ],
  1. 然后这个文件下还要再配置一个权限
"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 所以需要单用户安装

  1. 把 Build 完成的 hap 包推入系统中。

    hdc file send D:\data\start_run.hap /data

  2. 使用 bm 命令安装应用

hdc shell "bm install -p /data/start_run.hap -u 0"

  1. 重启系统,然后就可以了

hdc shell reboot

在这里再加一个卸载的命令,卸载这个应用也是需要 id 的

hdc shell "bm uninstall -n com.example.start_run -u 0"

如果开机没有启动要开启的应用,首先排查下开机自启的这个应用是否已经后台启动了,然后再核对一下需要自启的应用的 bundleName 包名是否正确

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为资料太多,太杂,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

为了确保高效学习,建议规划清晰的学习路线,涵盖以下关键阶段:

 →【纯血版鸿蒙全套最新学习资料】希望这一份鸿蒙学习资料能够给大家带来帮助~


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频学习资料+学习PDF文档

HarmonyOS Next 最新全套视频教程 (鸿蒙语法ArkTS、TypeScript、ArkUI教程……)

​​

 纯血版鸿蒙全套学习资料(面试、文档、全套视频等)

                   

​​​​鸿蒙APP开发必备

​​

总结

【纯血版鸿蒙全套最新学习资料】

总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值