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

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/pages/v5.0/zh-cn/application-dev/security/AccessToken/permissions-for-all.md

仅对系统应用开放:

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的权限便于权限添加的讲解

 

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地址如下:

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

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐