开发环境:Windows 11
DevEco Studio 版本:DevEco Studio 3.1 Release(3.1.0.500)
SDK 版本:3.2.14.1(Full SDK)
应用模型:Stage
开发板型号:DAYU 200
系统版本:OpenHarmony 3.2.2 Release
RK3568的应用特权配置文件源码位于:
vendor/hihope/rk3568/preinstall-config/install_list_capability.json
在系统中位于:
/etc/app/install_list_capability.json
1. 创建新工程ServiceDemo(com.openharmony.servicedemo)
2. 修改工程类型为OpenHarmony工程。
修改entry/build-profile.json5文件,targets.runtimeOS为OpenHarmony,并Sync工程。
3. 配置自动签名。单击File > Project Structure > Project > SigningConfigs 界面勾选Automatically generate signature ,等待自动签名完成即可,单击OK。
4. 在工程Module(entry)对应的ets目录下,右键选择New > Directory,新建一个目录并命名为ServiceExtAbility。
5. 在ServiceExtAbility目录,右键选择 New > TypeScript File ,新建一个TypeScript文件并命名为ServiceExtAbility.ts。
6. 在ServiceExtAbility.ts文件中,导入ServiceExtensionAbility的依赖包,自定义类继承ServiceExtensionAbility并实现生命周期回调。
import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
const TAG: string = "[ServiceDemo]";
export default class ServiceExtAbility extends ServiceExtensionAbility {
onCreate(want) {
console.info(TAG, `onCreate, want: ${want.abilityName}`);
}
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`);
}
}
7. 在工程Module(entry)对应的module.json5配置文件中注册ServiceExtensionAbility,type标签需要设置为“service”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。修改module.mainElement为ServiceExtAbility,mainElemen标识当前Module的入口UIAbility名称或者ExtensionAbility名称,常驻和自启动需配置此项为ServiceExtensionAbility对应的名称。
{
"module": {
"mainElement": "ServiceExtAbility",
"extensionAbilities": [
{
"name": "ServiceExtAbility",
"icon": "$media:icon",
"description": "service",
"type": "service",
"exported": true,
"srcEntry": "./ets/ServiceExtAbility/ServiceExtAbility.ts"
}
]
}
}
指纹获取有多种方式,此处选用一种较为方便的方式,其他方式可参考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"
480EB53D7568D38BFA686D0550744B499FA798C196705367F01D50F64812F8B8
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 - 应用特权配置指南