当前位置: 首页 > news >正文

HarmonyOS应用开发实战:猫猫大作战-Ability 注册规则、skills 意图过滤、deviceTypes 多设备适配,以及与 app.json

前言

在 HarmonyOS 应用中,module.json5是每个模块下必不可少的配置文件——它定义了模块的名称、类型、支持的设备、Ability 注册、页面路径、权限声明等关键信息。不理解这个文件,就无法理解应用是如何被系统识别和启动的。

本文以「猫猫大作战」的entry/src/main/module.json5为锚点,逐字段拆解其含义,深入讲解 Ability 注册规则、skills 意图过滤、deviceTypes 多设备适配,以及与 app.json5 的协作关系。

提示:本系列不讲 ArkTS 基础语法与环境搭建,假设你已跟完第 1–75 篇。本篇是阶段三第 76 篇。

一、项目中的 module.json5

1.1 完整配置

{ "module": { "name": "entry", "type": "entry", "deviceTypes": [ "tablet", "phone", "wearable" ], "deliveryWithInstall": true, "installationFree": false, "pages": "$profile:main_pages", "abilities": [ { "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ets", "description": "$string:EntryAbility_desc", "icon": "$media:app_icon", "label": "$string:EntryAbility_label", "startWindowIcon": "$media:app_icon", "startWindowBackground": "$color:start_window_background", "exported": true, "skills": [ { "actions": [ "action.system.home" ] } ] } ] } }

1.2 顶层字段速查

字段说明
nameentry模块名称,HAP 包名的一部分
typeentry模块类型:entry/feature/har/hsp
deviceTypes["tablet","phone","wearable"]支持的设备类型
deliveryWithInstalltrue是否随应用安装下发
installationFreefalse是否支持免安装
pages$profile:main_pages页面路由配置引用

二、module.type 模块类型

2.1 四种模块类型

类型说明典型场景
entry应用主模块,一个应用只能有一个猫猫大作战的主 HAP
feature应用的特性模块,可有多个排行榜独立模块、设置模块
har静态共享库公共 UI 组件库
hsp动态共享库按需下载的功能包

2.2 猫猫大作战的多模块设想

[ { "module": { "name": "entry", "type": "entry" } // 主游戏模块 }, { "module": { "name": "ranking_feature", "type": "feature", "deviceTypes": ["tablet", "phone"], "abilities": [ { "name": "RankingAbility", "srcEntry": "./ets/rankingability/RankingAbility.ets" } ] } // 排行榜独立 feature 模块 } ]

三、abilities 注册详解

3.1 Ability 配置字段

字段必填说明
nameAbility 名称,系统通过此名称识别
srcEntryAbility 源码路径(相对 entry/src/main/)
description描述,引用$string资源
icon图标,引用$media资源
label标签/名称,引用$string资源
startWindowIcon启动窗口图标
startWindowBackground启动窗口背景色
exported是否允许其他应用启动
skills意图过滤器,标记 Ability 能响应的操作
launchType启动模式:singleton/standard/multiton

3.2 exported 的作用

{ "abilities": [ { "name": "EntryAbility", "exported": true, // 允许 Launcher 启动 "skills": [ { "actions": ["action.system.home"] } ] } ] }
exported外部能否启动使用场景
true✅ 可以入口 Ability、分享目标、DeepLink
false❌ 不可以内部页面、仅应用内部跳转

3.3 skills 意图过滤

{ "skills": [ { "actions": ["action.system.home"], // 桌面图标入口 "entities": ["entity.system.home"], "uris": [] // 可处理的 URI } ] }
skills 字段说明值示例
actionsAbility 能响应的操作action.system.home(桌面启动)
entities意图类别entity.system.home(主屏幕)
uris能处理的 URI 模式[{ "scheme": "catscheme", "host": "ranking" }]

多 skills 示例

{ "abilities": [ { "name": "EntryAbility", "exported": true, "skills": [ { // 桌面图标启动 "actions": ["action.system.home"], "entities": ["entity.system.home"] }, { // DeepLink 深度链接启动 "actions": ["action.system.view"], "uris": [ { "scheme": "catscheme", "host": "ranking", "pathPrefix": "/player" } ] } ] } ] }

四、deviceTypes 多设备适配

4.1 猫猫大作战支持的设备

{ "deviceTypes": [ "tablet", "phone", "wearable" ] }

4.2 设备类型枚举

设备类型说明适配要点
phone手机默认竖屏、触摸操作
tablet平板分栏布局、更宽可视区
wearable手表极小屏、简化交互
tv电视遥控器操作、远距离
car车机驾驶安全限制、语音优先
2in1二合一设备键鼠+触摸双模式

4.3 多设备配置示例

{ "deviceTypes": ["phone", "tablet"], "abilities": [ { "name": "EntryAbility", "srcEntry": "./ets/entryability/EntryAbility.ets" } ] }

当应用在平板上安装时,如果deviceTypes没有包含tablet,应用将无法在平板上搜索或安装。

五、pages 页面路由配置

{ "pages": "$profile:main_pages" }

$profile:main_pages指向resources/base/profile/main_pages.json

{ "src": [ "pages/Index" ] }
配置含义
$profile:main_pages引用resources/base/profile/main_pages.json
"pages/Index"页面路径,相对于ets/目录
多个页面["pages/Index", "pages/Detail", "pages/Settings"]

注意:pages字段也可以直接写成"pages": ["pages/Index"],但不推荐——使用$profile引用更方便管理和扩展。

六、常见踩坑

6.1 坑一:srcEntry 路径错误

// 🚫 错误:srcEntry 路径不对 { "srcEntry": "entryability/EntryAbility.ets" // ❌ 缺少 ./ets/ } // ✅ 正确 { "srcEntry": "./ets/entryability/EntryAbility.ets" }

srcEntry路径src/main/开始计算,所以./ets/entryability/EntryAbility.ets对应实际目录src/main/ets/entryability/EntryAbility.ets

6.2 坑二:忘记配置 skills

// 🚫 缺少 skills → Launcher 找不到入口 { "abilities": [ { "name": "EntryAbility", "exported": true // ❌ 没有 skills,桌面没有图标 } ] }

表现:应用安装成功,但桌面上找不到图标。

解决:必须添加skills并设置action.system.home

"skills": [ { "actions": ["action.system.home"], "entities": ["entity.system.home"] } ]

6.3 坑三:module.json5 位置错误

// ✅ 正确位置 entry/src/main/module.json5 // 🚫 错误位置 entry/module.json5 AppScope/module.json5

七、module.json5 与 app.json5 的协作

7.1 职责分离

文件位置作用域主要配置
app.json5AppScope/整个应用bundleName、versionCode、全局图标/标签
module.json5entry/src/main/单个模块模块类型、Ability 注册、设备类型

7.2 app.json5 配置

{ "app": { "bundleName": "com.maomaodazuozhan.game", "vendor": "maomaodazuozhan", "versionCode": 1000000, "versionName": "1.0.0", "icon": "$media:app_icon", "label": "$string:app_name", "description": "$string:app_desc" } }
字段说明
bundleNamecom.maomaodazuozhan.game应用的唯一标识
vendormaomaodazuozhan开发者/组织名称
versionCode1000000版本号(仅比较大小)
versionName1.0.0展示给用户的版本

7.3 $引用资源规则

// $string:xxx → 引用 resources/base/element/string.json 中的字符串 // $media:xxx → 引用 resources/base/media/ 中的媒体文件 // $color:xxx → 引用 resources/base/element/color.json 中的颜色值 // $profile:xxx → 引用 resources/base/profile/ 中的 JSON 文件

八、module.json5 配置检查清单

  • name与模块目录名一致
  • type正确(entry/feature/har/hsp)
  • deviceTypes包含目标设备
  • abilities[].srcEntry路径正确(./ets/...
  • abilities[].exported按需设置
  • entry 模块的 EntryAbility 配置了skills+action.system.home
  • pages引用正确的 profile 文件
  • $string/$media/$color资源都已在相应目录存在

九、总结

module.json5是 HarmonyOS 模块的“身份证“,定义了模块是什么类型、在哪些设备上运行、包含哪些 Ability、如何响应系统意图。理解其配置规则是正确构建和发布应用的基础。

核心要点

  • type: entry是主模块,feature是特性模块,一个应用只有一个 entry
  • deviceTypes限制了应用安装的目标设备
  • abilities[]注册所有 Ability,exported控制能否被外部启动
  • skills中的action.system.home是桌面图标入口的必须配置
  • srcEntry路径相对于src/main/,需加上./ets/前缀
  • $profile:main_pages引用路由配置,$string/$media引用资源

下一篇预告:第 77 篇将深入app.json5全局配置——bundleName、版本管理、图标标签与签名配置。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • module.json5 配置文档
  • Ability 配置与启动
  • 多设备类型开发指南
  • 应用包结构与配置
  • skills 意图过滤器
  • 开源鸿蒙跨平台社区
  • 第 75 篇:onForeground/onBackground
  • 第 77 篇:app.json5 全局配置
http://www.jsqmd.com/news/1277303/

相关文章:

  • 教你几招:2026年预订酒店最省钱的实用教程 - 工具软件使用方法推荐
  • 英雄联盟玩家的终极效率工具:League-Toolkit完全使用指南
  • 广东聚醚醚酮棒厂商选型参考及优质供应渠道全解析 - 热点品牌推荐
  • 广西市场环氧砂浆地坪漆直销工厂 本地高性价比采购指南 - 热点品牌推荐
  • 卫星信标机厂家选择标准 实用选型全攻略 - 热点品牌推荐
  • 免费在线网站实测:把视频转成动图会不会降低画质 - 软件工具教程方法
  • (2026最新)佛山本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • 045-学哲学概念澄清是一切哲学思考的基础
  • HarmonyOS应用开发实战:猫猫大作战-NavDestination 的结构组成、自定义标题栏、菜单栏和工具栏以及生命周期管理
  • 豆包代码生成突然失效?紧急排查手册:定位IDE插件冲突、上下文截断、Token溢出三大致命陷阱
  • DeepSeek LeetCode 3753. 范围内总波动值 II Python3实现
  • 从“今日头条”商标案看品牌保护:大厂的商标布局有多重要?
  • 调压变压器源头厂家哪家靠谱?采购实战指南 - 热点品牌推荐
  • Anki Cloze填空进阶指南:掌握嵌套标记与图像遮挡的深度应用
  • 想找靠谱液压工具源头工厂怎么联系 实用对接操作指南 - 热点品牌推荐
  • 【2026-07-27】待领养宠物信息汇总(发布于微信小程序:易领宠)
  • 港科大EMBA全球排第几?民营企业家择校选择指南
  • 2026年轿厢式别墅梯生产商业内推荐实用选型指南 - 热点品牌推荐
  • 清花1990|杏花村核心产区纯粮口粮酒,自饮送礼双适配 - 优企甄选
  • 选购不锈钢电缆桥架厂家需关注技术实力与行业经验 - 热点品牌推荐
  • HarmonyOS应用开发实战:猫猫大作战-NavPathStack 的完整 API 方法、生命周期关联、参数传递技巧,以及基于 NavPathStack
  • 2026年广东本色PEI板批发厂家采购实用测评参考 - 热点品牌推荐
  • 洛阳正规的二手选矿设备回收 贴心解决旧矿山设备处置难题 - 热点品牌推荐
  • DeepSeek LeetCode 3753. 范围内总波动值 II JavaScript实现
  • HarmonyOS应用开发实战:猫猫大作战-Tabs 的声明式用法、自定义 TabBar 样式、事件监听和性能优化
  • 人脸修复耗时超8分钟?优化GPU显存占用与推理加速的7个硬核技巧(附TensorRT部署实测数据)
  • 教你几招:京东外卖优惠券手机免费领的秘诀 - 工具软件使用方法推荐
  • RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!
  • 多无人机协同路径规划:基于多段Dubins路径的Matlab实现
  • 旅行准备必读:2026年酒店预订省钱攻略大全 - 工具软件使用方法推荐