HarmonyOS7 module.json5 配置全解:Ability 注册与权限

文章目录

前言

module.json5 是每个 HarmonyOS 模块的"身份证"。Ability 怎么注册、图标长啥样、要哪些权限,全写在这一个文件里。

我刚学时最怕动它,生怕写错一个字段 app 就起不来。后来发现它其实很有规律。这篇文章我把最常用的配置项逐个拆开讲,你照着改就行,不用背。

文件长什么样

json5 复制代码
{
  "module": {
    "name": "entry",
    "type": "entry",
    "mainElement": "EntryAbility",
    "deviceTypes": ["phone", "tablet"],
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:internet_reason",
        "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
      }
    ]
  }
}

逐字段讲解

字段 作用 说明
name 模块名 一般 entry
type 模块类型 entry(入口)/ feature(特性)
mainElement 启动 Ability 写你入口 Ability 名
deviceTypes 支持设备 phone/tablet/tv
abilities[].name Ability 名 要和代码里类名一致
abilities[].srcEntry 代码路径 指到你的 .ts 文件
abilities[].exported 是否可被外部拉起 入口一般 true
abilities[].skills 启动能力 entity.system.home 表示桌面图标入口
requestPermissions 申请的权限列表 每个权限要写理由

注册一个新 Ability 的正确步骤

我踩过"只建了文件却忘了注册"的坑,结果跳转直接报错。正确流程:

  1. ets/ 下建 SecondAbility.ts,类名为 SecondAbility
  2. module.json5abilities 数组里加一项,nameSecondAbilitysrcEntry 指到文件路径。
  3. 如果要从别的 app 拉起它,exportedtrue;否则 false(更安全)。

代码实现

json5 复制代码
{
  "name": "SecondAbility",
  "srcEntry": "./ets/secondability/SecondAbility.ts",
  "exported": false
}

漏了注册是最常见的"Ability 找不到"错误。记住:建 Ability 文件 ≠ 能用,必须在 json5 里登记。

权限怎么加才规范

权限分"普通"和"敏感"。敏感权限(如定位、通讯录)光在 requestPermissions 写还不够,运行时还要弹窗动态申请(下一篇讲)。这里先说配置:

核心代码

json5 复制代码
"requestPermissions": [
  { "name": "ohos.permission.INTERNET", "reason": "$string:net_reason" },
  { "name": "ohos.permission.LOCATION", "reason": "$string:loc_reason",
    "usedScene": { "abilities": ["EntryAbility"], "when": "inuse" } }
]
  • reason 是给用户看的申请理由,写清楚"为什么需要",否则上架会被拒。
  • when: "inuse" 表示仅使用时申请;always 表示安装/启动时。尽量用 inuse,对用户更友好。

常见误区(小白必踩)

误区 说明
建了 Ability 不登记 只建 .ts 文件忘了在 module.json5abilities 里注册,跳转直接报"找不到"。
exported 乱设 能被外部拉起的设 true,否则 false 更安全;设错可能桌面上找不到图标或被人乱拉起。
敏感权限不写 reason 上架会被拒,每个权限都要写清"为什么需要"。

下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲,改一改文末「动手改一改」里的参数,亲眼看看效果。

完整可运行示例:module.json5 真配置

这是「Ability 注册 + 权限声明」的最小可用配置。和代码一起看才完整。

完整示例

json5 复制代码
// entry/src/main/module.json5(节选关键字段)
{
  "module": {
    "name": "entry",
    "type": "entry",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ts",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "requestPermissions": [
      { "name": "ohos.permission.INTERNET" },
      { "name": "ohos.permission.CAMERA" }
    ]
  }
}

你会看到什么 :这段配置注册了一个名为 EntryAbility 的入口,声明了桌面图标、启动窗口背景,并预申请了「联网」和「相机」两个权限。编译后,应用图标出现在桌面,且首次用到相机时会弹出系统授权框。

动手改一改

  • 删掉 requestPermissions 里的 INTERNET,再发起网络请求,观察报错------理解「声明即契约」。
  • exported 改成 false,其它应用将无法拉起这个 Ability。
  • abilities 里复制一份并改名,体验「一个模块多个入口」。

写在最后

module.json5 看着吓人,其实就是"登记册":Ability 来登记一下,权限来登记一下。你只要记住建了 Ability 必须登记敏感权限要写理由,基本不会再踩配置坑。

建议把你项目的 json5 打开,对着上面的表格逐项核对一遍------尤其 exportedskills,这两处错一个,app 就可能起不来或桌面上找不到图标。

相关推荐
贾伟康12 小时前
【中国方言题库|06】HarmonyOS ArkTS 闽南语与客家话实战:统一分库页面导航与空状态
harmonyos·arkts·arkui·router·空状态
贾伟康13 小时前
【中国方言题库|07】HarmonyOS ArkTS 方言练习实战:推进题目、提交答案并同步统计
harmonyos·arkts·数据持久化·状态管理·arkui
贾伟康14 小时前
【中国方言题库|05】HarmonyOS ArkTS 东北话分库实战:让地区内容与通用列表解耦
harmonyos·arkts·路由·arkui·数据架构
m0_749690232 天前
【寻迹校园 HarmonyOS NEXT 实战 06】共享权威词表:让发布表单与首页筛选使用同一套分类
harmonyos·arkts·数据建模·软件架构·arkui
m0_749690232 天前
【寻迹校园 HarmonyOS NEXT 实战 07】不引入全局状态库:用 dataRevision 实现跨页面刷新
harmonyos·arkts·软件架构·状态管理·arkui
贾伟康2 天前
【中国方言题库|01】HarmonyOS ArkTS 方言题库首页实战:组织地区入口、推荐内容和学习进度
harmonyos·arkts·arkui·多设备适配·本地数据
贾伟康2 天前
【中国方言题库|04】HarmonyOS ArkTS 粤语分库实战:处理繁简文本、读音与练习入口
harmonyos·arkts·unicode·tts·arkui
贾伟康4 天前
【知律|16】HarmonyOS ArkTS 多设备布局实战:适配手机、平板和 PC/2in1 的窗口变化
harmonyos·arkts·arkui·响应式布局·多设备适配
m0_749690234 天前
【寻迹校园 HarmonyOS NEXT 实战 01】从校园痛点到可上架 MVP:失物招领应用产品设计
人工智能·深度学习·移动开发·harmonyos·arkts·arkui·产品设计
m0_749690234 天前
【寻迹校园 HarmonyOS NEXT 实战 03】NavPathStack 路由实战:18 个页面如何集中管理
华为·移动开发·harmonyos·arkui·navigation·navpathstack