news 2026/7/19 15:33:11

HarmonyOs应用《重要日》开发第30篇 - HarmonyOS 应用配置详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOs应用《重要日》开发第30篇 - HarmonyOS 应用配置详解

本文解析 ImportantDays 项目中的两个核心配置文件app.json5module.json5,包括应用级配置(包名、版本、图标)、模块级配置(Ability 声明、设备类型、权限申请)、以及这些配置与代码运行时的关联关系。

一、配置文件体系

HarmonyOS 应用的配置文件采用 JSON5 格式(支持注释和尾逗号),分为两个层级:

AppScope/ └── app.json5 ← 应用级配置(全局) entry/ └── src/main/ └── module.json5 ← 模块级配置(entry 模块)

配置层级

app.json5 (应用级) ├── bundleName ← 应用唯一标识 ├── versionCode/Name ← 版本信息 ├── icon/label ← 应用图标和名称 └── modules ← 包含的模块 module.json5 (模块级) ├── name/type ← 模块名称和类型 ├── mainElement ← 入口 Ability ├── deviceTypes ← 支持设备 ├── abilities ← Ability 列表 └── requestPermissions ← 权限申请

二、app.json5 详解

完整内容

{"app":{"bundleName":"com.importantdays.app","vendor":"importantdays","versionCode":1000000,"versionName":"1.0.0","icon":"$media:app_icon","label":"$string:app_name"}}

字段解析

bundleName
"bundleName":"com.importantdays.app"

应用的唯一包名,全局唯一。

用途

  • 应用在系统中的唯一标识
  • WantAgent 中使用:bundleName: 'com.importantdays.app'
  • 安装和卸载的标识

命名规范:反向域名格式(com.公司名.应用名

vendor
"vendor":"importantdays"

应用供应商名称。

versionCode
"versionCode":1000000

版本号(数字),用于版本比较。

规则

  • 必须是整数
  • 新版本必须大于旧版本
  • 1000000= 1.0.0 的编码(1 × 1000000)
versionName
"versionName":"1.0.0"

版本名称(字符串),显示给用户。

格式主版本.次版本.修订号

icon
"icon":"$media:app_icon"

应用图标资源引用。

语法$media:资源名→ 引用resources/base/media/目录下的资源。

label
"label":"$string:app_name"

应用名称资源引用。

语法$string:资源名→ 引用resources/base/element/string.json中的字符串。

string.json 内容

{"string":[{"name":"app_name","value":"重要日"}]}

应用名称为"重要日",显示在桌面图标下方和设置中。

三、module.json5 详解

完整内容

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

模块级字段

name
"name":"entry"

模块名称。entry是主模块(入口模块)。

type
"type":"entry"

模块类型:

  • entry:应用入口模块
  • feature:功能模块
  • shared:共享库模块
mainElement
"mainElement":"EntryAbility"

模块的入口 Ability 名称。应用启动时首先加载此 Ability。

deviceTypes
"deviceTypes":["phone","tablet"]

支持的设备类型:

  • phone:手机
  • tablet:平板
  • tv:电视
  • wearable:穿戴设备
  • car:车机

ImportantDays 支持手机和平板。

deliveryWithInstall
"deliveryWithInstall":true

是否随应用安装时一起下载。true= 安装时即下载此模块。

installationFree
"installationFree":false

是否支持免安装。false= 需要安装才能使用。

pages
"pages":"$profile:main_pages"

页面路由配置文件引用。

语法$profile:文件名→ 引用resources/base/profile/目录下的 JSON 文件。

main_pages.json 内容

{"src":["pages/MainEntry"]}

定义了页面路由列表,MainEntry对应MainEntry.ets文件。

abilities 字段

"abilities":[{"name":"EntryAbility","srcEntry":"./ets/entryability/EntryAbility.ets","description":"$string:entry_ability_desc","icon":"$media:app_icon","label":"$string:entry_ability_label","startWindowIcon":"$media:app_icon","startWindowBackground":"$color:start_window_background","exported":true,"skills":[{"entities":["entity.system.home"],"actions":["action.system.home"]}]}]

Ability 字段解析

name
"name":"EntryAbility"

Ability 名称,必须与代码中的类名对应。

关联

// EntryAbility.etsexportdefaultclassEntryAbilityextendsUIAbility{...}
srcEntry
"srcEntry":"./ets/entryability/EntryAbility.ets"

Ability 源文件路径。

icon / label
"icon":"$media:app_icon","label":"$string:entry_ability_label"

Ability 的图标和名称(可以与应用级不同)。

startWindowIcon
"startWindowIcon":"$media:app_icon"

启动窗口图标(应用启动时显示的图标)。

startWindowBackground
"startWindowBackground":"$color:start_window_background"

启动窗口背景色。

语法$color:资源名→ 引用resources/base/element/color.json中的颜色。

exported
"exported":true

是否可以被其他应用调用。true= 允许外部调用。

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

声明 Ability 能响应的意图(Intent)。

entity.system.home+action.system.home:表示此 Ability 可以从桌面启动。这是应用入口 Ability 的标准配置。

requestPermissions

"requestPermissions":[]

需要申请的权限列表。ImportantDays 当前为空数组。

注意:通知权限不需要在此声明,通过notificationManager.requestEnableNotification()动态请求即可。

如果需要其他权限(如位置、相机等),需要在此声明:

// 示例(项目中未使用)"requestPermissions":[{"name":"ohos.permission.LOCATION","reason":"$string:location_reason","usedScene":{"abilities":["EntryAbility"],"when":"always"}}]

四、配置与代码的关联

启动流程

1. 系统读取 app.json5 → bundleName: "com.importantdays.app" → 确定应用身份 2. 系统读取 module.json5 → mainElement: "EntryAbility" → 确定入口 Ability 3. 系统加载 EntryAbility → srcEntry: "./ets/entryability/EntryAbility.ets" → 执行 EntryAbility 类 4. EntryAbility.onCreate() → 初始化数据 5. EntryAbility.onWindowStageCreate() → loadContent('pages/MainEntry') → 加载 MainEntry 页面 6. MainEntry 渲染 → Tabs 显示三个页面

WantAgent 与配置的对应

// NotificationUtil 中的 WantAgent{bundleName:'com.importantdays.app',// ← app.json5 的 bundleNameabilityName:'EntryAbility',// ← module.json5 的 abilities[0].nameaction:'action.system.home'// ← module.json5 的 skills[0].actions[0]}

三者必须完全一致,否则通知点击无法跳转。

资源引用体系

$media:app_name → resources/base/media/app_icon.png $string:app_name → resources/base/element/string.json → {"name": "app_name", "value": "重要日"} $color:start_window → resources/base/element/color.json → {"name": "start_window_background", "value": "#FFFFFF"} $profile:main_pages → resources/base/profile/main_pages.json

资源引用语法

前缀资源类型示例
$media:图片$media:app_icon
$string:字符串$string:app_name
$color:颜色$color:start_window_background
$profile:配置文件$profile:main_pages

五、版本管理

versionCode 与 versionName

"versionCode":1000000,"versionName":"1.0.0"

版本号规则

versionName: 1.0.0 │ │ │ │ │ └── 修订号(bug修复) │ └──── 次版本号(新功能) └────── 主版本号(重大变更) versionCode: 1000000 │ │ │ │ │ └── 修订号 × 1 │ └──── 次版本号 × 1000 └────── 主版本号 × 1000000

版本升级示例

versionNameversionCode说明
1.0.01000000初始版本
1.0.11000001修复 bug
1.1.01001000新增功能
2.0.02000000重大更新

六、设备适配

deviceTypes 配置

"deviceTypes":["phone","tablet"]

ImportantDays 支持手机和平板两种设备。

响应式设计考量

虽然配置支持平板,但项目的 UI 主要针对手机设计:

  • 使用固定宽度(如 56vp 色条)
  • 固定高度(如 52vp 日期格)
  • 未使用断点适配

在平板上应用可以正常运行,但可能无法充分利用大屏幕。未来可以通过 ArkUI 的断点机制实现响应式布局。

七、构建配置

build-profile.json5

{"app":{"signingConfigs":[],"products":[{"name":"default","signingConfig":"default","compatibleSdkVersion":"5.0.3(15)","runtimeOS":"HarmonyOS"}]}}
配置说明
compatibleSdkVersion兼容的 SDK 版本
runtimeOS运行时操作系统

oh-package.json5

{"dependencies":{"dayjs":"^1.11.x"}}

声明项目依赖的第三方库。

八、配置检查清单

开发 ImportantDays 时需要确保以下配置一致:

检查项位置
bundleNameapp.json5com.importantdays.app
bundleNameWantAgentcom.importantdays.app
abilityNamemodule.json5EntryAbility
abilityNameWantAgentEntryAbility
srcEntrymodule.json5./ets/entryability/EntryAbility.ets
实际文件文件系统ets/entryability/EntryAbility.ets
mainElementmodule.json5EntryAbility
loadContentEntryAbility.etspages/MainEntry
pagesmain_pages.jsonpages/MainEntry
实际文件文件系统ets/pages/MainEntry.ets

九、总结

HarmonyOS 应用配置文件体现了以下设计:

  1. 分层配置:app.json5(全局)+ module.json5(模块级)
  2. 资源引用$前缀语法引用资源
  3. 声明式:Ability、权限、设备都通过配置声明
  4. 一致性:配置与代码必须严格对应
  5. 版本管理:versionCode + versionName 双重版本控制
  6. 设备适配:通过 deviceTypes 声明支持设备

配置文件是应用与系统之间的"契约",理解配置文件是开发鸿蒙应用的基础。

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

Claude Code 会话恢复,长任务真正好用的断点续跑能力

今天讨论的不是 Claude Code 又多会写几行代码,而是一个更贴近日常开发的细节,工作做到一半停下来,过几个小时、隔一天,甚至换一个问题分支继续追,Claude Code 怎么把上一段上下文接回来。 很多人刚用 Claude Code 时,习惯把它当成一个更聪明的命令行问答窗口。打开终端…

作者头像 李华
网站建设 2026/7/19 15:31:56

鸿蒙应用开发:AppStorage 全局状态存储用法教程

文章目录一、引言二、基本用法2.1 初始化与设置2.2 绑定到组件2.3 外部修改三、示例:管理用户登录状态3.1 在应用入口初始化全局状态3.2 登录页面组件3.3 个人中心页面组件四、进阶用法与注意事项4.1 删除状态4.2 清空与获取所有键4.3 注意事项五、总结这是一个使用…

作者头像 李华
网站建设 2026/7/19 15:30:56

深入解析TMS320F28003x CPU定时器与系统控制寄存器实战

1. 项目概述:深入TMS320F28003x的定时器与系统控制核心在工业控制、电机驱动和数字电源这些对实时性要求严苛的领域,微控制器(MCU)的“心跳”和“神经中枢”至关重要。这个“心跳”就是CPU定时器,它提供了精准的时间基…

作者头像 李华
网站建设 2026/7/19 15:29:48

如何快速掌握Python RCWA:开源光学仿真工具完整指南

如何快速掌握Python RCWA:开源光学仿真工具完整指南 【免费下载链接】Rigorous-Coupled-Wave-Analysis modules for semi-analytic fourier series solutions for Maxwells equations. Includes transfer-matrix-method, plane-wave-expansion-method, and rigorous…

作者头像 李华
网站建设 2026/7/19 15:28:32

HarmonyOS ArkTS 实战重构:从单文件 到模块化拆分的完整过程

引子:代码写完能跑就行?没那么简单 星空运势应用第一版写完的时候,所有代码塞在一个 Index.ets 里,500 多行,三个页面、数据定义、状态管理全搅在一起。功能没问题,预览效果也挺好,但每次想改点…

作者头像 李华
网站建设 2026/7/19 15:28:26

RT-DETR终极指南:如何构建实时端到端目标检测系统

RT-DETR终极指南:如何构建实时端到端目标检测系统 【免费下载链接】RT-DETR [CVPR 2024] Official RT-DETR (RTDETR paddle pytorch), Real-Time DEtection TRansformer, DETRs Beat YOLOs on Real-time Object Detection. 🔥 🔥 &#x1f52…

作者头像 李华