HarmonyOS鸿蒙Next中关于开发应用的权限问题

HarmonyOS鸿蒙Next中关于开发应用的权限问题 我看到一个鸿蒙应用源码他在ets这个文件夹下的module.json5里申请了ohos.permission.PLACE_CALL,但是需要这个权限的API方法写在了feature这下面的ets文件里,这种写法会导致权限识别不到吗,如下图结构

cke_503.png


更多关于HarmonyOS鸿蒙Next中关于开发应用的权限问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

这种写法不会导致权限识别不到。 HarmonyOS 的权限授予是 App 级别(按 bundleName + 签名身份),不是按 Module 隔离的。同一个 App 内的所有 HAP/HSP/HAR 共享应用身份与已授予权限。

建议写法:应用级权限统一在 entry/src/main/module.json5 声明:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.PLACE_CALL",
        "reason": "$string:reason_place_call",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}

官方文档

声明权限 & ACL:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/declare-permissions-V5

受限权限申请指导:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/restricted-permissions-V5

更多关于HarmonyOS鸿蒙Next中关于开发应用的权限问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如上述写权限识别也能识别到。

1、 在子模块(feature)或者entry模块的module.json5中申请均可。

2、 建议涉及权限的代码写在哪个子模块(feature)就在哪个子模块(feature)中申请,子模块(feature)中申请后,权限将在整个应用生效。这样方便子模块(feature)提供给其他工程使用,权限配置不会遗漏。

已经验证过。
在多HAP场景下,已在entry模块中声明的权限,无需在feature模块中重复添加,权限将在整个应用中生效。

同理,在feature模块中已声明的权限,在entry模块也无需重复添加。

参考《声明权限》

鸿蒙Next应用权限基于声明式授权机制,通过module.json5配置requestPermissions字段声明权限。系统将权限分为normal和dangerous等级,dangerous权限需运行时使用ability.requestPermissionOnPermissionDialog()请求用户授权。权限校验可调用ability.checkPermission()实现。

在 HarmonyOS 应用中,如果在 entry 模块的 module.json5 中声明了权限(例如 ohos.permission.PLACE_CALL),那么即使调用受保护 API 的代码位于 feature 模块中,也不会导致权限识别不到。

因为鸿蒙系统在安装时会将所有 HAP 模块声明的权限合并为应用的最终权限列表,应用整体拥有该权限,运行时权限校验以应用为单位,因此 feature 模块中的调用同样能获得授权。不过请注意,如果 feature 模块需独立运行或作为原子化服务单独分发,则需要在它自己的 module.json5 中显式声明权限,否则会缺少权限。开发工具可能会提示该模块未声明权限,但不影响最终应用的行为。

回到顶部