前言

前几天天介绍了怎么自启动添加权限(OpenHarmony怎么开机自启动添加权限_云端筑梦-Laval社区),这篇文章介绍一下怎么自启动应用。

一、实现原理

我这里自启动应用的方法大致的思路是设置一个常驻的自启动应用来拉起另外一个应用。
参考的文章:https://blog.csdn.net/q228931518/article/details/131520737?spm=1001.2014.3001.5501

二、具体步骤

1.创建包含ServiceExtensionAbility类型的应用

这部分完全参考社区TiZizzz老师的文章即可

1、创建新工程ServiceDemo

在这里插入图片描述
2、修改工程类型为OpenHarmony工程。修改entry/build-profile.json5文件,targets.runtimeOS为OpenHarmony,并Sync工程。

在这里插入图片描述 

 

3、添加权限。因为后面需要用到startAbility接口所以在这里在配置文件module.json5中配置权限

在这里插入图片描述
4、配置自动签名。单击File > Project Structure > Project > SigningConfigs 界面勾选Automatically generate signature ,等待自动签名完成即可,单击OK。

在这里插入图片描述 

 
5、在工程Module(entry)对应的ets目录下,右键选择New > Directory,新建一个目录并命名为ServiceExtAbility。

6、在ServiceExtAbility目录,右键选择 New > TypeScript File ,新建一个TypeScript文件并命名为ServiceExtAbility.ts。

在这里插入图片描述
7、在ServiceExtAbility.ts文件中,导入ServiceExtensionAbility的依赖包,自定义类继承ServiceExtensionAbility并实现生命周期回调。在这里使用startAbility接口来拉起你需要自启动的应用。

 

import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
import { BusinessError } from '@ohos.base';
import Want from '@ohos.app.ability.Want';

const TAG: string = "[ServiceDemo]";

export default class ServiceExtAbility extends ServiceExtensionAbility {
  onCreate(want) {
    console.info(TAG, `onCreate, want: ${want.abilityName}`);
    setTimeout(()=> {

      let mywant: Want = {
        bundleName: "com.example.api",         //目标应用的包名
        abilityName: "EntryAbility"
      };

      try {
        this.context.startAbility(mywant)
          .then((data: void) => {
            console.log('startAbility succeed');
          })
          .catch((error: BusinessError) => {
            console.error(`startAbility failed, error.code: ${error.code}, error.message: ${error.message}`);
          });
      } catch (paramError) {
        // 处理入参错误异常
        console.error(`error.code: ${paramError.code}, error.message: ${paramError.message}`);
      }
    },10000)                //这里延时10秒是为了不和launcher启动时冲突,可以根据自己的开发板来改
  }

  onRequest(want, startId) {
    console.info(TAG, `onRequest, want: ${want.abilityName}`);
  }

  onConnect(want) {
    console.info(TAG, `onConnect, want: ${want.abilityName}`);
    return null;
  }

  onDisconnect(want) {
    console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
  }

  onDestroy() {
    console.info(TAG, `onDestroy`);
  }
}


8、在工程Module(entry)对应的module.json5配置文件中注册ServiceExtensionAbility,type标签需要设置为“service”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。修改module.mainElement为ServiceExtAbility,mainElemen标识当前Module的入口UIAbility名称或者ExtensionAbility名称,常驻和自启动需配置此项为ServiceExtensionAbility对应的名称。

在这里插入图片描述

 

2.获取证书指纹

这里介绍我最常用的一种,想要了解更多的方法可以去看tizizzz老师的文章https://ost.51cto.com/posts/21696
首先在终端上执行 hdc shell hilog -b D命令

PS F:\4.0R_Project\ServiceDemo> hdc shell hilog -b D
Set global log level to D successfully


点击运行应用,然后在日志这里筛选一下finger

在这里插入图片描述
这样我们就得到了SeriveDemo应用的指纹证书

 

3.应用特权配置

提取当前系统中的特权配置文件install_list_capability.json ,文件位于/etc/app/ 中。

hdc file recv /etc/app/install_list_capability.json D:\

在这里插入图片描述

 

2. 在文档最下面添加应用的信息,以本文档示例工程为例。其中:

bundleName:应用包名。

app_signature:上一章节获取的证书指纹。

allowAppUsePrivilegeExtension:是否允许应用使用ServiceExtension、DataExtension。

singleton:是否允许应用安装到单用户下(U0),常驻和自启动需配置。

keepAlive:是否允许应用常驻,常驻和自启动需配置。

allowAppDesktopIconHide:是否在桌面隐藏图标

  {
            "bundleName": "com.example.servicedemo",
            "app_signature" : ["E79C5A4C55E61E943EDCC25C74DA8749E925A6EA2C14FCF2A9CB9E1792B3973A"],
            "singleton":true,
            "keepAlive":true, 
            "allowAppUsePrivilegeExtension": true,
            "allowAppDesktopIconHide": true
        }


将特权配置文件install_list_capability.json 推送回系统中,覆盖系统配置

hdc shell "mount -o remount,rw /"
hdc file send D:\install_list_capability.json /etc/app/install_list_capability.json

在这里插入图片描述 

这里要执行一下hdc shell reboot 重启一下才能生效

4.安装ServiceAbility应用

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

C:\Users\Administrator>hdc file send F:\\4.0R_Project\\ServiceDemo\\entry\\build\\default\\outputs\\default\\entry-default-signed.hap /data/ServiceDemo.hap
FileTransfer finish, Size:42870, File count = 1, time:53ms rate:808.87kB/s


2.使用bm命令安装应用

C:\Users\Administrator>hdc shell "bm install -p /data/ServiceDemo.hap -u 0"
install bundle successfully.


3.执行hdc shell reboot 重启系统,验证效果

5.常见错误

1.权限问题:因为上面用到的startAbility属于是系统接口,所以需要替换full-sdk,并且修改UnsgnedReleasedProfileTemplate.json文件,相关的细节可以在社区搜索OpenHarmony如何调用系统接口
2.忘记执行hdc shell reboot重启,导致特权配置文件install_list_capability.json没有生效。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐