OpenHarmony开发者论坛

标题: 新建系统应用权限、签名配置详细解读 [打印本页]

作者: onefan    时间: 4 天前
标题: 新建系统应用权限、签名配置详细解读
[md]# 新建系统应用权限、签名配置

## 1.新建应用

File->New->Create Project

![image.png](https://forums-obs.openharmony.c ... axatwzcot4zcwv4.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)

Application->Empty Ability->Next

![image.png](https://forums-obs.openharmony.c ... 6ssi9rzri13ilr9.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)

![image.png](https://forums-obs.openharmony.c ... 9qqgrkgg9zqra0k.png "image.png")

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

## 2.调用系统接口

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

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

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

![image.png](https://forums-obs.openharmony.c ... d5i3dbh3izci3bi.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.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/page ... missions-for-all.md](https://docs.openharmony.cn/page ... missions-for-all.md)

![image.png](https://forums-obs.openharmony.c ... vxkzvhcptx7omeg.png "image.png")

![image.png](https://forums-obs.openharmony.c ... csy1x5zi6u145uc.png "image.png")

![image.png](https://forums-obs.openharmony.c ... 6zt6554b6a5jllw.png "image.png")

仅对系统应用开放:

[https://docs.openharmony.cn/page ... -for-system-apps.md](https://docs.openharmony.cn/page ... -for-system-apps.md)



![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.png)

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png)

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png)

我们先将这三个权限加到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](https://forums-obs.openharmony.c ... 1rpfsissqfq6769.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)

## 4.签名

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

![image.png](https://forums-obs.openharmony.c ... 9s9h1y9719en4yd.png "image.png")

![image.png](https://forums-obs.openharmony.c ... nican4vrnvnc5j4.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png)

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png)

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

![image.png](https://forums-obs.openharmony.c ... zbjs2sbtbvb5c50.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png)

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

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

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

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)
![image.png](https://forums-obs.openharmony.c ... 9cdd8ekydsz8o9d.png "image.png")![image.png](https://forums-obs.openharmony.c ... prbuzyxru0toyrr.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image022.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](https://forums-obs.openharmony.c ... ihpegvigrcaji5j.png "image.png")



![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image024.png)

查看原始配置:

![image.png](https://forums-obs.openharmony.c ... eeu4f2shuc5el5f.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image025.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](https://forums-obs.openharmony.c ... ntxlxn33x0k0bx3.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image026.png)

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

我们再来安装一次:

![image.png](https://forums-obs.openharmony.c ... 6puhpzdmudxazkb.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg)

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

## 8.查看应用信息

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

使用bm dump –n

查看是否为系统应用 isSystemApp

bm dump -n com.my.myapi\_15 | grep -i isSystemApp

![image.png](https://forums-obs.openharmony.c ... mvzr7lftdplzzwv.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image029.png)

说明系统应用配置成功。

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

bm dump -n com.my.myapi\_15

![image.png](https://forums-obs.openharmony.c ... 9paw5fawduat1ip.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image031.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](https://forums-obs.openharmony.c ... pdqavuvff8zhxv8.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image033.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](https://forums-obs.openharmony.c ... lh6k9fu292u70lw.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image035.png)

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

system/etc/app/install\_list.json中修改

![image.png](https://forums-obs.openharmony.c ... ae6pjla1epp8hty.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image037.png)

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

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

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image039.png)

![image.png](https://forums-obs.openharmony.c ... 0sltj4tnzeuxixr.png "image.png")

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

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

![image.png](https://forums-obs.openharmony.c ... 7128sm087rbbs07.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image041.png)

以及material

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image043.png)

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

如:

![image.png](https://forums-obs.openharmony.c ... cys0ceqcyumfy8p.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image044.png)

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

![image.png](https://forums-obs.openharmony.c ... tahytzd1az1dd3d.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image046.png)

## 10.修改应用图标

![image.png](https://forums-obs.openharmony.c ... sx1ololocnsmjuu.png "image.png")

![image.png](https://forums-obs.openharmony.c ... ebbp4pw9h8olbe7.png "image.png")



![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image048.png)

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image049.png)

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

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

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

通用应用特权:

![image.png](https://forums-obs.openharmony.c ... pqm5p8vo5lvy8ip.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image051.png)

如:

![image.png](https://forums-obs.openharmony.c ... b7kavbsxakq00bk.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image053.png)

我们需要额外的配置system/etc/app/ install\_list\_capability.json

![image.png](https://forums-obs.openharmony.c ... j32wsrjudsszuj4.png "image.png")

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image055.png)

实例如下:

![](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image057.png)

应用特权配置指南: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