新建系统应用权限、签名配置详细解读
新建系统应用权限、签名配置
1.新建应用
File->New->Create Project
Application->Empty Ability->Next
此时,应用初始工程就创建完毕了。
2.调用系统接口
例如我们要增加一个wifi的接口调用,
wifiManager.enableWifi();和wifiManager.isWifiActive()
导入模块import { wifiManager } from '@kit.ConnectivityKit';
此时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
我们需要去查询这三个权限的级别,网站在
对所有应用开放:
仅对系统应用开放:
我们先将这三个权限加到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的权限便于权限添加的讲解
4.签名
此时我们可以去自动签名,File->Project Structure (快捷键:Ctrl+Alt+Shift+S)
需要去掉Support HarmonyOS的勾选,只选择Automatically generate signature
此时我们签名就生成了。(不论当前签名及权限是否正常,我们先调试,后面和正常的签名对比)
5.新建工程的部分配置需要改造
如:根目录中的build-profile.json5
代码 :
"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
查看原始配置:
需要变更为:
普通权限:
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为系统应用。
此时我们重新通过自动签名制作一次签名即可。
我们再来安装一次:
此时我们应用就安装成功了。
7.查看应用信息
现在我们需要去看一下我们的权限是否都正常授权了?
使用bm dump –n
查看是否为系统应用 isSystemApp
bm dump -n com.my.myapi_15 | grep -i isSystemApp
说明系统应用配置成功。
查看权限,看下权限是否都为0,权限异常时为-1
bm dump -n com.my.myapi_15
这里我们看到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&
再安装一次应用,查看日志:
查看:
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
这里再说一下 应用预安装,我们需要在
system/etc/app/install_list.json中修改
预制我们还需要修改applications_hap中BUILD.gn配置hap等。
8.签名信息归档到代码工程
在代码工程中新建sign目录,再找到本地红框签名文件的路径,将配置copy过去。
p7b、cer、csr、p12,可以重命名。
以及material
并建议将sdk的toolchains\lib目录UnsgnedReleasedProfileTemplate.json或UnsgnedDebugProfileTemplate.json也放到sign目录中,目的是为了后续新增其他应用权限时,可以快速的添加权限和修改签名。
如:
并同步修改根目录中的build-profile.json5,保持签名随工程同步维护。
9.修改应用图标
10.额外补充服务类型应用配置
比如我们需要一些后台服务,如launcher、systemui、settingsdata或自研xxxService等,
同样我们需要修改签名,修改sdk的toolchains\lib目录UnsgnedReleasedProfileTemplate.json或UnsgnedDebugProfileTemplate.json,其中增加"app-privilege-capabilities"字段,其中可以配置需要的应用特权:
通用应用特权:
如:
我们需要额外的配置system/etc/app/ install_list_capability.json
实例如下:
应用特权配置指南:https://docs.openharmony.cn/pages/v5.0/zh-cn/device-dev/subsystems/subsys-app-privilege-config-guide.md
其他事宜后续再讲解。
demo地址如下:
更多推荐
所有评论(0)