HarmonyOS ——应用 / 组件级配置|我边看文档边理解的那版

93 阅读3分钟

HarmonyOS ——应用 / 组件级配置|我边看文档边理解的那版

这篇是我啃 HarmonyOS 文档里「应用/组件级配置」时记的笔记, 主要搞清楚:一个 App 想“被系统认识”,到底要在哪些地方“写名片”。


1. 应用包名:bundleName 就是你在系统里的“身份证”

  • 配置位置:AppScope/app.json5
  • 字段:bundleName
  • 作用:标识应用 唯一性,就跟身份证号一样。

官方推荐命名规则:反域名形式

 com.example.demo
 ↑    ↑      ↑
 域名 应用所属组织/个人  应用名

通常建议:

  • 第一级:com 这种域名后缀;
  • 第二级:厂商 / 个人名;
  • 第三级:应用名(可以再多级细分)。

这一项一定要想清楚再定,后面生态里都是拿这个识别你。


2. 应用图标 & 名称:icon + label 的来源和优先级

图标和名称是在两个地方配置的:

  • app.json5:应用级
  • module.json5:模块级(每个 HAP 一个)

从 DevEco Studio 5.0.3.800 版本开始:

  • module.json5 里的 icon / label不再强制要求
  • app.json5 里的 icon / label仍然是必选参数

简单理解优先级:

  • 一般情况下,应用级的 icon / label 是主入口
  • 模块级可以单独覆盖(比如某个模块需要展示不同名称或图标);
  • 如果模块级没配,就用 app.json5 里的默认配置。

要发应用时,最起码保证:app.json5 里的 iconlabel 配全。


3. 应用版本声明:versionCode + versionName

配置位置:AppScope/app.json5

3.1 versionCode:用来“比大小”的纯数字

  • 字段:versionCode
  • 类型:32 位非负整数
  • 用途:只用来判断 哪个版本更新 数值越大 → 版本越新。

比如:

 "versionCode": 10001

不要求和字面版本字符串对应,但习惯上会有自己的规则,比如:

  • 前两位:大版本;
  • 中间两位:小版本;
  • 最后几位:内部构建号。

3.2 versionName:给人看的版本号字符串

  • 字段:versionName
  • 类型:字符串
  • 用途:展示给用户看的版本描述,例如:
 "versionName": "1.0.1"

可以记成: Code 让系统比较,Name 让用户看得懂。


4. Module 支持的设备类型:deviceTypes

配置位置:module.json5

字段:deviceTypes

作用:声明这个 Module 支持在哪些设备上运行

比如:

 "deviceTypes": [
   "phone",
   "tablet",
   "2in1"
 ]
  • 如果某个设备类型没加进去 → 系统默认这个 Module 不支持在该设备上跑

适合的用法:

  • 比如卡片模块只想在手机上使用,就限制 deviceTypes;
  • 某个专为 PC / 2in1 设计的模块,可以只写 ["2in1"]

5. Module 权限:requestPermissions

配置位置:module.json5

字段:requestPermissions

作用:声明 访问系统 / 其他应用受保护能力 所需的权限,包括:

  • 申请的权限名;
  • 申请理由(为什么用);
  • 使用场景(在哪些功能中会用到)。

示意:

 "requestPermissions": [
   {
     "name": "ohos.permission.READ_CONTACTS",
     "reason": "$string:perm_read_contacts_desc",
     "usedScene": {
       "abilities": [ "EntryAbility" ],
       "when": "inuse"
     }
   }
 ]

这一块既影响用户弹框体验,也关系到应用上架合规性,文案要写清楚。


6. 应用启动模式:startMode(多 UIAbility 时才有意义)

API version 20 开始,支持通过 startMode 字段,控制 点击应用图标时的启动行为

配置位置:app.json5app 字段下。

前提条件:

  • launchType 必须是 单实例模式
  • 应用里存在 多个 UIAbility,否则就没必要切换模式。

6.1 可选值与含义

  • 默认值:"mainTask"

    • 表现:点击图标总是打开应用主 UIAbility 就算之前你在子页面 / 另一个 UIAbility 中停留,点击图标也会回到主 UIAbility。
  • 可选值:"recentTask"

    • 表现:点击图标打开最近使用的 UIAbility 哪个 UIAbility 最后在前台,点击图标就回到那个。

示例:

 {
   "app": {
     "bundleName": "com.example.demo",
     "versionCode": 10001,
     "versionName": "1.0.1",
     "icon": "$media:app_icon",
     "label": "$string:app_name",
     "startMode": "mainTask" // 或 "recentTask"
   }
 }

小结:我现在脑子里对“配置”的整体图是这样

  • app.json5(应用级)

    • bundleName:应用唯一标识;
    • icon / label:应用图标、名称(必填);
    • versionCode / versionName:版本声明;
    • startMode:多 UIAbility 下,点击图标的启动模式。
  • module.json5(模块级 / HAP 级)

    • deviceTypes:这个模块支持哪些设备运行;
    • requestPermissions:模块需要申请的权限;
    • (可选)icon / label:如需覆盖模块级图标和名称,可以写。