HarmonyOS鸿蒙Next应用源码中module.json5

HarmonyOS鸿蒙Next应用源码中module.json5 module.json5中,之前的API版本中即便是用户授权的权限也不需要强制写reason吗

cke_912.png


更多关于HarmonyOS鸿蒙Next应用源码中module.json5的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

1. 旧版本规则(DevEco Studio NEXT Developer Preview 2 之前)

  • 不需要强制填写 reasonusedScene 在旧版本中,即 DevEco Studio NEXT Developer Preview 2 版本发布前,配置 requestPermissions时:
    • 对于 user_grant权限(如 ohos.permission.READ_IMAGEVIDEO),允许省略 reason(申请原因)和 usedScene(使用场景)字段
    • 开发者只需声明权限名称(name)即可通过编译。

2. 新版本规则(DevEco Studio NEXT Developer Preview 2 起)

  • 必须强制填写 reasonusedScene 从该版本开始,新增以下强制规则:
    • 所有 user_grant权限必须明确配置 reason(说明权限用途)和 usedScene(声明使用场景)。
    • 若未配置这两个字段,编译将失败并报错: "The reason and usedScene attributes are mandatory for user_grant permissions"

更多关于HarmonyOS鸿蒙Next应用源码中module.json5的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在之前的API版本中,对于需要用户授权的权限并不强制要求在module.json5文件中填写“reason”字段。不过,从DevEco Studio NEXT Developer Preview 2版本开始,规则发生了变化,现在强制要求写“reason”,如果缺少,应用将无法通过编译。

module.json5是HarmonyOS Next应用的模块配置文件,定义了HAP(Harmony Ability Package)的基本信息。其结构主要包括module(模块名称、类型、描述等)、abilities(UIAbility组件配置)、extensionAbilities(ExtensionAbility组件配置)以及metadata(元信息)等核心对象。该文件用于声明应用的组件、权限、设备类型兼容性等关键配置,是应用安装和运行的基础。

在HarmonyOS Next中,对于需要用户授权的敏感权限(如ohos.permission.APPROXIMATELY_LOCATION),module.json5文件中的权限声明规则已经收紧。

根据当前HarmonyOS Next的官方规范,所有需要用户授权的权限都必须在module.json5中明确声明,并且必须提供对应的reason字段,用于向用户解释申请该权限的原因。这与早期API版本(如您截图中可能显示的API 9或更早版本)的宽松策略有显著不同。

您截图中的配置方式(仅声明权限,未提供reason)在Next版本上会导致应用安装失败或权限申请流程异常。正确的声明方式示例如下:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.APPROXIMATELY_LOCATION",
        "reason": "用于为您提供附近的商户推荐服务",
        "usedScene": {
          "abilities": [
            "MainAbility"
          ],
          "when": "inUse"
        }
      }
    ]
  }
}

核心变更点:

  1. 强制声明与解释reason字段现在是必填项,其内容会直接展示给用户。
  2. 使用场景细化usedScene字段(包含abilitieswhen)也必须配置,明确权限在哪个Ability、在什么时机(使用时inUse或始终always)使用。

因此,如果您在开发HarmonyOS Next应用,必须按照新规范为每一个需要用户授权的权限补充完整的声明信息,包括namereasonusedScene。早期版本的兼容写法在Next上已不可用。

回到顶部