鸿蒙应用的那些基础知识与基本结构

举报
宇宙之一粟 发表于 2022/02/18 22:42:50 2022/02/18
【摘要】 什么是鸿蒙应用用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”,简称APP。在 HarmonyOS 上运行的应用,有两种形态:传统方式的需要安装的应用。提供特定功能,免安装的应用(即原子化服务)。 鸿蒙应用的形式鸿蒙应用软件包以 APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability ...

什么是鸿蒙应用

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”,简称APP。

在 HarmonyOS 上运行的应用,有两种形态:

  • 传统方式的需要安装的应用。
  • 提供特定功能,免安装的应用(即原子化服务)。

鸿蒙应用的形式

鸿蒙应用软件包以 APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability Package)以及描述每个 HAP 属性的 pack.info 组成。HAP 是 [Ability]的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。

类似于常见的 Web 应用,HAP 也由代码、资源、第三方库以及应用配置文件组成。

HAP 又可以分为 entry 和 feature 两种模块类型:

  • entry:应用的主模块。一个 APP 中,对于同一设备类型必须有且只有一个 entry 类型的 HAP,可独立安装运行。
  • feature:应用的动态特性模块。一个 APP 可以包含一个或多个 feature 类型的 HAP,也可以不含。只有包含 Ability 的 HAP 才能够独立运行。

image.png

Ability

Ability(能力,可以是界面能力,也可以是服务能力),是应用软件的基础单位。应用所具备的能力的抽象,一个应用可以具备多种能力,即可以包含多个 Ability,鸿蒙HarmonyOS支持应用以Ability为单位进行部署。

库文件

库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。

资源文件

资源文件很好理解:字符串、图片、图标、音频等。位置存放于resources目录下。

resources
|---base  // 默认存在的目录
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建   
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---rawfile  // 默认存在的目录

详情看资源文件的分类与使用

配置文件

其他开发中,配置文件格式可以是 XML 或 JSON 格式,鸿蒙应用也是采用 JSON 格式,配置文件为 config.json 。 配置文件是应用的 Ability 信息,用于声明应用的 Ability ,以及应用所需权限等信息。

应用的每个 HAP 的根目录下都存在一个“config.json”配置文件,主要涵盖以下三个方面:

  • 应用的全局配置信息,包含应用的包名、生产厂商、版本号等基本信息。
  • 应用在具体设备上的配置信息。
  • HAP 包的配置信息,包含每个 Ability 必须定义的基本属性(如包名、类名、类型以及 Ability 提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。

这是上一篇文章中 HelloWorld 程序中的 config.json 文件:

{
  "app": {
    "bundleName": "com.example.helloworld",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    }
  },
  "deviceConfig": {},
  "module": {
    "package": "com.example.helloworld",
    "name": ".MyApplication",
    "mainAbility": "com.example.helloworld.MainAbility",
    "deviceType": [
      "phone"
    ],
    "distro": {
      "deliveryWithInstall": true,
      "moduleName": "entry",
      "moduleType": "entry",
      "installationFree": false
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.helloworld.MainAbility",
        "icon": "$media:icon",
        "description": "$string:mainability_description",
        "label": "$string:entry_MainAbility",
        "type": "page",
        "launchType": "standard"
      }
    ]
  }
}

配置文件的解释建议看:配置文件的元素

pack.info

描述应用软件包中每个 HAP 的属性,由 IDE 编译生成,应用市场根据该文件进行拆包和 HAP 的分类存储。HAP 的具体属性包括:

  • delivery-with-install: 表示该 HAP 是否支持随应用安装。“true” 表示支持随应用安装;“false” 表示不支持随应用安装。
  • name:HAP 文件名。
  • module-type:模块类型,entry 或 feature 。
  • device-type:表示支持该 HA P运行的设备类型。

HAR

HAR(HarmonyOS Ability Resources)可以提供构建应用所需的所有内容,包括源代码、资源文件和 config.json 文件。HAR 不同于 HAP ,HAR 不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

HelloWorld 项目整体结构

  1. 打开 HelloWorld 项目后,在 Project 左边栏中预览项目结构如图:

微信截图_20220214174926.png

我们能看到 entry 目录,这个目录其实就是一个应用的 HAP 包,类型为 entry 类型。

  1. 接着我们在 src/main/java 下能看到以包名命名的文件夹:这里存放的就是我们的 Java 代码。此处的代码可以用来创建布局、动态调整布局以及为交互提供支撑服务。
  2. 和 java 文件夹同级别的 resources 目录下分布着应用资源,该目录的 base 目录下,按资源分类又有着多个文件夹资源。
  3. element: 表示元素资源,放着 json 格式的文件,主要用来表示字符串、颜色值、布尔值,可以被其他地方引用。
  4. graphic:可绘制资源,用 xml 文件来表示,例如项目中的圆角按钮、按钮颜色。
  5. layout:布局资源,例如页面的布局资源
  6. media:媒体资源,包括图片、音视频等非文本格式的文件
  7. config.json:配置文件

微信截图_20220214175509.png

与 main 目录平级的 test 目录是测试目录,可以用于对自己写的功能进行单元测试,确保代码的正确性。

与 src 平级的 libs 目录用来存储或引用第三方包,例如 jar 包、so 包等。

和 entry 目录平级的 build 目录则用来存放最终编译后的包,也就是 HAP 包。

总结

本文通过上文的 HelloWorld 应用简单解释了一个鸿蒙应用包含的文件、项目结构、以及各个模块的功能,这里只是简单列出部分知识,更多内容读者建议参考官方文档学习和了解。

只有对一个项目结构熟悉了,才能知道作为开发者代码该写在哪个位置,不是吗?

赶紧学起来吧。下一篇文章见!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。