概述

文档环境

DevEco Studio 版本:DevEco Studio 6.0.1 Release(6.0.1.251)

SDK 版本:6.0.0.48(API 20 Full SDK)

开发板型号:DAYU 200

系统版本:OpenHarmony 6.0 Release(6.0.0.48)

功能简介

  • OpenHarmony支持包含ServiceExtensionAbility类型模块的应用配置常驻和自启动。
  • 常驻和自启动配置是设备厂商根据设备的产品形态为特殊应用定义的特权项。

RK3568的应用特权配置文件源码位于:
vendor/hihope/rk3568/preinstall-config/install_list_capability.json
在系统中位于:
/etc/app/install_list_capability.json

  • 本文档将介绍如何修改系统配置项使自己开发的应用可以获得常驻和自启动的能力。临时配置用于测试配置项是否生效,当生效后可将配置信息拷贝到系统源码中,使配置永久生效。
  • 本文档创建的ServiceExtensionAbility仅用作演示应用常驻和自启动配置,不可用于正式项目,ServiceExtensionAbility的开发请参考ServiceExtensionAbility介绍

应用常驻和自启动配置

创建包含ServiceExtensionAbility类型的应用

1. 创建新工程ServiceDemo(com.openharmony.servicedemo)

2. 按照示例修改工程级别build-profile.json5文件,Sync后,同意默认设备类型变更。

"compatibleSdkVersion": 20,
"compileSdkVersion": 20,
"runtimeOS": "OpenHarmony",

3. 按照示例修改默认签名文件 {SDK目录}/toolchains/lib/UnsgnedReleasedProfileTemplate.json,使得应用可以获得系统API使用权限。

"apl": "system_core",
"app-feature": "hos_system_app"

4. 配置自动签名。单击File > Project Structure > Project > SigningConfigs 界面勾选Automatically generate signature ,等待自动签名完成即可,单击OK。

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

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

7. 在ServiceExtAbility.ets文件中,导入ServiceExtensionAbility的依赖包,自定义类继承ServiceExtensionAbility并实现生命周期回调。

import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

const TAG: string = '[ServiceExtAbility]';
const DOMAIN_NUMBER: number = 0xFF00;

export default class ServiceExtAbility extends ServiceExtensionAbility {
  onCreate(want: Want): void {
    hilog.info(DOMAIN_NUMBER, TAG, `onCreate, want: ${want.abilityName}`);
  };

  onRequest(want: Want, startId: number): void {
    hilog.info(DOMAIN_NUMBER, TAG, `onRequest, want: ${want.abilityName}`);
  };

  onDestroy(): void {
    hilog.info(DOMAIN_NUMBER, TAG, 'onDestroy');
  };
};

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

{
  "module": {
    "mainElement": "ServiceExtAbility",
    "extensionAbilities": [
      {
        "name": "ServiceExtAbility",
        "description": "service",
        "type": "service",
        "exported": true,
        "srcEntry": "./ets/ServiceExtAbility/ServiceExtAbility.ets"
      }
    ]
  }
}

证书指纹获取

指纹获取有多种方式,此处选用一种较为方便的方式,其他方式可参考OpenHarmony应用开发技巧 - 如何获取证书指纹​​​​

1. 在工程中创建新Module,File > New > Module > Empty Ability。一直点击Next 直到创建成功。

2. 执行Run > Run 'application'(application为新创建Module的名称),新创建的Module 的HAP包被安装到系统中。

3. 执行以下命令打印出HAP的finger 信息,然后删除新创建的Module ,恢复工程。

hdc shell "bm dump -n com.openharmony.servicedemo | grep finger"

0F4229F878D1C39F32F82F4184799FC750E395C5CA59394A17EE858F779670BE

应用特权配置

1. 提取当前系统中的特权配置文件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:是否允许应用常驻,常驻和自启动需配置。

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

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

4. 重启系统特权配置文件生效。

hdc shell reboot

安装常驻和自启动应用

由于常驻和自启动应用只有单用户应用才可以配置,所以需要特殊的安装方式进行安装。

1. 检查设备中是否有已安装过的应用,并检查安装userId。

hdc shell "bm dump -n com.openharmony.servicedemo | grep userId"

2. 如果userId显示为0则是单用户,显示为大于100的数字,则为其他用户安装,需要卸载。

hdc shell "bm uninstall -n com.openharmony.servicedemo"

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

hdc file send  D:\Code\DevEcoStudioProjects\ServiceDemo\entry\build\default\outputs\default\entry-default-signed.hap /data/ServiceDemo.hap

4. 使用bm命令安装应用。

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

5. 重启系统,验证功能。

hdc shell reboot

6. 设备重启后,通过ps -ef 指令过滤包名,查看应用是否已经启动。

hdc shell "ps -ef | grep com.openharmony.servicedemo"

参考文档

OpenHarmony Docs - ServiceExtensionAbility

OpenHarmony Docs - 应用特权配置指南

OpenHarmony Docs - HarmonyAppProvision配置文件说明

Logo

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

更多推荐