• Lv3
    粉丝8

积分383 / 贡献0

提问2答案被采纳15文章11

[经验分享] 新建系统应用权限、签名配置详细解读 原创

onefan 显示全部楼层 发表于 4 天前

新建系统应用权限、签名配置

1.新建应用

File->New->Create Project

image.png

Application->Empty Ability->Next

image.png

image.png

此时,应用初始工程就创建完毕了。

2.调用系统接口

例如我们要增加一个wifi的接口调用,

wifiManager.enableWifi();和wifiManager.isWifiActive()

导入模块import { wifiManager } from '@kit.ConnectivityKit';

image.png

此时build项目 我们会发现需要添加接口调用权限和签名。

isWifiActive(): boolean

查询WLAN开关是否已使能。

需要权限: ohos.permission.GET_WIFI_INFO

enableWifi(): void

使能WLAN,异步接口,需要通过注册"wifiStateChange"事件的回调来监听是否打开成功。

系统接口: 此接口为系统接口。

需要权限:ohos.permission.SET_WIFI_INFO 和 ohos.permission.MANAGE_WIFI_CONNECTION(仅系统应用可用)。

3.权限配置

我们发现这两个接口需要三个权限

ohos.permission.GET_WIFI_INFO

ohos.permission.SET_WIFI_INFO

ohos.permission.MANAGE_WIFI_CONNECTION

我们需要去查询这三个权限的级别,网站在

对所有应用开放:

https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/permissions-for-all.md

image.png

image.png

image.png

仅对系统应用开放:

https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/permissions-for-system-apps.md

我们先将这三个权限加到module.json5中:

"requestPermissions": [ { "name": "ohos.permission.GET_WIFI_INFO" }, { "name": "ohos.permission.SET_WIFI_INFO" }, { "name": "ohos.permission.MANAGE_WIFI_CONNECTION" }, { "name": "ohos.permission.GET_INSTALLED_BUNDLE_LIST", "reason": "\$string:GET_INSTALLED_BUNDLE_LIST", "usedScene": { "abilities": [ "EntryAbility" ] } } ]

额外添加一个user_grant的权限便于权限添加的讲解

image.png

4.签名

此时我们可以去自动签名,File->Project Structure (快捷键:Ctrl+Alt+Shift+S)

image.png

image.png

需要去掉Support HarmonyOS的勾选,只选择Automatically generate signature

image.png

此时我们签名就生成了。(不论当前签名及权限是否正常,我们先调试,后面和正常的签名对比)

5.新建工程的部分配置需要改造

如:根目录中的build-profile.json5

image.pngimage.png

代码 :

"products": [ { "name": "default", "signingConfig": "default", "compatibleSdkVersion": 15, "compileSdkVersion": 15, "targetSdkVersion": 15, "runtimeOS": "OpenHarmony", "buildOption": { "strictMode": { "caseSensitiveCheck": true, "useNormalizedOHMUrl": true } } } ],

6.安装

编译应用后我们尝试安装一次:

hdc bm install -p C:\Users\Administrator\DevEcoStudioProjects\MyApi15_demo\entry\build\default\outputs\default\entry-default-signed.hap

安装失败日志:queuesize:0, msg:error: failed to install bundle. code:9568289 error: install failed due to grant request permissions failed. PermissionName: ohos.permission.MANAGE_WIFI_CONNECTION

我们添加的ohos.permission.MANAGE_WIFI_CONNECTION权限只在module.json5中添加权限是失效的,导致无法安装,原因是我们的权限是acl使能权限,级别为非normal,需要系统应用才能使用系统权限。

7.重新制作签名

具体方法,先找到SDK路径,在sdk的toolchains\lib目录中,

找到UnsgnedReleasedProfileTemplate.json或UnsgnedDebugProfileTemplate.json

image.png

查看原始配置:

image.png

需要变更为:

普通权限:

ohos.permission.GET_WIFI_INFO

ohos.permission.SET_WIFI_INFO

ACL使能权限:

ohos.permission.MANAGE_WIFI_CONNECTION

ohos.permission.GET_BUNDLE_INFO_PRIVILEGED

apl为权限列表中最高的,system_core > system_basic > normal

app-feature配置,hos_normal_app为普通应用,hos_system_app为系统应用。

image.png

此时我们重新通过自动签名制作一次签名即可。

我们再来安装一次:

image.png

此时我们应用就安装成功了。

8.查看应用信息

现在我们需要去看一下我们的权限是否都正常授权了?

使用bm dump –n

查看是否为系统应用 isSystemApp

bm dump -n com.my.myapi_15 | grep -i isSystemApp

image.png

说明系统应用配置成功。

查看权限,看下权限是否都为0,权限异常时为-1

bm dump -n com.my.myapi_15

image.png

这里我们看到ohos.permission.GET_INSTALLED_BUNDLE_LIST权限为-1,其授权方式为user_grant,但实际当前WiFi的两个接口已经可以正常使用了。

额外添加这个权限主要是为了来讲解user_grant权限配置方法。

此时我们需要额外的去配置这个权限,前提是我们要先获取应用指纹:

先打开日志:

hilog -Q pidoff

hilog -b D

hilog -p off

hilog | grep -i finger&

再安装一次应用,查看日志:

image.png

查看:

fingerprint is : D658B2A34A5DB5A6BAA71C22E21218A5C77A32E928BCCC2786518B1D56DB3F13

我们需要配置系统的install_list_permissions.json【注意里面不要有tab或多余的符号或语法错误,否则会导致系统各种异常】

开发板中的路径在system/etc/app/install_list_permissions.json

获取开发板文件:hdc file recv system/etc/app/install_list_permissions.json ./

授权:hdc shell mount -o remount,rw /

推送到开发板验证:

hdc file send install_list_permissions.json system/etc/app/install_list_permissions.json

重启生效:hdc shell reboot

image.png

这里再说一下 应用预安装,我们需要在

system/etc/app/install_list.json中修改

image.png

预制我们还需要修改applications_hap中BUILD.gn配置hap等。

9.签名信息归档到代码工程

image.png

在代码工程中新建sign目录,再找到本地红框签名文件的路径,将配置copy过去。

p7b、cer、csr、p12,可以重命名。

image.png

以及material

并建议将sdk的toolchains\lib目录UnsgnedReleasedProfileTemplate.json或UnsgnedDebugProfileTemplate.json也放到sign目录中,目的是为了后续新增其他应用权限时,可以快速的添加权限和修改签名。

如:

image.png

并同步修改根目录中的build-profile.json5,保持签名随工程同步维护。

image.png

10.修改应用图标

image.png

image.png

11.额外补充服务类型应用配置

比如我们需要一些后台服务,如launcher、systemui、settingsdata或自研xxxService等,

同样我们需要修改签名,修改sdk的toolchains\lib目录UnsgnedReleasedProfileTemplate.json或UnsgnedDebugProfileTemplate.json,其中增加"app-privilege-capabilities"字段,其中可以配置需要的应用特权:

通用应用特权:

image.png

如:

image.png

我们需要额外的配置system/etc/app/ install_list_capability.json

image.png

实例如下:

应用特权配置指南:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-app-privilege-config-guide.md

其他事宜后续再讲解。

demo地址如下:

MyApi15_demo · OneFan/5.0.3R_demo - 码云 - 开源中国

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 | 京公网安备11030102011662号 |技术支持 Discuz!

返回顶部