news 2026/7/12 10:28:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS7 module.json5 配置全解:Ability 注册与权限

文章目录

    • 前言
    • 文件长什么样
    • 逐字段讲解
    • 注册一个新 Ability 的正确步骤
      • 代码实现
    • 权限怎么加才规范
      • 核心代码
    • 常见误区(小白必踩)
    • 完整可运行示例:module.json5 真配置
      • 完整示例
    • 写在最后

前言

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

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

文件长什么样

{ "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[].nameAbility 名要和代码里类名一致
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(更安全)。

代码实现

{ "name": "SecondAbility", "srcEntry": "./ets/secondability/SecondAbility.ts", "exported": false }

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

权限怎么加才规范

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

核心代码

"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 注册 + 权限声明」的最小可用配置。和代码一起看才完整。

完整示例

// 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 就可能起不来或桌面上找不到图标。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 10:27:21

工业负载控制方案:TPD2015FN与PIC18LF47K40的实战应用

1. 工业负载控制的核心挑战与方案选型在工业自动化、电力电子等高需求场景中,对电感和电阻负载的精确控制一直是工程师面临的关键技术难题。这类负载具有独特的电气特性:电感负载(如电磁阀、继电器线圈)在开关瞬间会产生高达数百伏…

作者头像 李华
网站建设 2026/7/12 10:25:49

JAVA Object类

1.equalsA.equals(B)1)判断A与B指向的地址是否一致两边必须是引用类型(数据类型int,引用类型String)2)一般会对Object.equals重写Integer判断两个整数是否相等String会逐位比较两个字符串是否一样2.hashCode1&#xff…

作者头像 李华
网站建设 2026/7/12 10:24:18

C++编程禁用网卡IPv6:原理、实现与Windows网络协议栈控制

1. 项目概述:为什么我们需要在代码层面禁用网卡IPv6? 在当前的网络环境中,IPv6的普及已是大势所趋,它为海量设备接入互联网提供了几乎无限的地址空间。然而,对于许多C开发者,尤其是从事网络编程、客户端软件…

作者头像 李华
网站建设 2026/7/12 10:23:58

AI推理评估新范式:从答案匹配到过程验证

1. 项目概述:一场被长期忽视的评估失焦“我们一直在错误地衡量AI推理能力”——这句话不是危言耸听,而是过去五年我在参与12个大模型评估项目、审阅超过87份第三方评测报告、亲手复现34套主流推理基准(如GSM8K、MMLU、BBH、LogiQA、ARC-C&…

作者头像 李华
网站建设 2026/7/12 10:20:21

DataLab:面向教育政策的数据科学操作系统

1. 项目概述:这不是一个“教育数据平台”,而是一套面向真实业务场景的数据工作流操作系统US Department of Education’s DataLab——这个名字听起来像某个政府网站角落里的静态数据库入口,但实际用过的人会立刻意识到:它根本不是…

作者头像 李华