OpenHarmony开发者论坛
标题:
新建系统应用权限、签名配置详细解读
[打印本页]
作者:
onefan
时间:
4 天前
标题:
新建系统应用权限、签名配置详细解读
[md]# 新建系统应用权限、签名配置
## 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
我们需要去查询这三个权限的级别,网站在
对所有应用开放:
[
https://docs.openharmony.cn/page ... missions-for-all.md
](
https://docs.openharmony.cn/page ... missions-for-all.md
)



仅对系统应用开放:
[
https://docs.openharmony.cn/page ... -for-system-apps.md
](
https://docs.openharmony.cn/page ... -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的权限便于权限添加的讲解


## 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为系统应用。


此时我们重新通过自动签名制作一次签名即可。
我们再来安装一次:


此时我们应用就安装成功了。
## 8.查看应用信息
现在我们需要去看一下我们的权限是否都正常授权了?
使用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等。
## 9.签名信息归档到代码工程


在代码工程中新建sign目录,再找到本地红框签名文件的路径,将配置copy过去。
p7b、cer、csr、p12,可以重命名。


以及material

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


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


## 10.修改应用图标




## 11.额外补充服务类型应用配置
比如我们需要一些后台服务,如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/page ... ege-config-guide.md
其他事宜后续再讲解。
demo地址如下:
[MyApi15\_demo · OneFan/5.0.3R\_demo - 码云 - 开源中国](
https://gitee.com/wanfan_yyds/5. ... master/MyApi15_demo
)
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5