『HarmonyOS』探索HarmonyOS应用

本文涉及的产品
.cn 域名,1个 12个月
简介: App就是应用,指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。在HarmonyOS上运行的应用,有两种形态:• 传统方式的需要安装的应用。• 提供特定功能,免安装的应用(即原子化服务)。 原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。例如:某传统方式的需要安装的购物应用A,在按照原子化服务理念调整设计后,成为由“商品浏览”“购物车”“支付”等多个便捷服务组成的、可以免安装的购物原子化服务A*


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

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

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

原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。

例如:某传统方式的需要安装的购物应用A,在按照原子化服务理念调整设计后,成为由“商品浏览”“购物车”“支付”等多个便捷服务组成的、可以免安装的购物原子化服务A*。

1.应用基础知识

1.1鸿蒙应用程序包结构

Android应用以APK(Android Application package)形式发布,当我们需要在Android手机上安装一个App时,首先需要找到这个App对应的APK安装包,执行该APK安装包就能安装App了。

HarmonyOS应用/服务发布形态为APP Pack(Application Package,简称APP),它是由一个或多个HAP(HarmonyOS Ability Package)包以及描述APP Pack属性的pack.info文件组成。

一个HAP在工程目录中对应一个Module,它是由代码、资源、第三方库及应用/服务配置文件组成,可以分为Entry和Feature两种类型,具体如下:

  • entry:应用/服务的主模块,可独立安装运行。一个APP中,对于同一类型的设备,可以包含一个或多个entry类型的HAP,如果同一设备类型包含多个entry模块,需要配置distroFilter分发规则。
  • feature:应用/服务的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。

可以认为entry是主模块,而feature是配置模块

HAP是Ability的部署包,HarmonyOS应用/服务代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)PA(Particle Ability,中文名称:元服务)。FA/PA是应用/服务的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。

网络异常,图片无法展示
|

我们在应用的build目录下可以找到名为entry-debug-rich-unsigned.hapentry-debug-rich-signed.hap的文件,如下图所示,这些.hap文件就是HarmonyOS的应用软件包。

网络异常,图片无法展示
|

1.2HarmonyOS工程介绍

工程目录结构

DevEco Studio工程目录结构提供工程视图HarmonyOS视图。工程创建或打开,默认显示工程视图,如果要切换到HarmonyOS视图,在左上角点击Project > Ohos进行切换。

左边是工程视图,右边是HarmonyOS视图

网络异常,图片无法展示
|
网络异常,图片无法展示
|

  • .gradle:Gradle配置文件,由系统自动生成,一般情况下不需要进行修改。
  • entry:默认启动模块(主模块),开发者用于编写源码文件以及开发资源文件的目录。
  • entry>libs:用于存放entry模块的依赖文件。
  • entry>src>main>Java:用于存放Java源码
  • entry>src>main>resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。

代码层次的应用

在代码层次,我们可以看到下图所示的MyApplication,这是整个应用的入口。

网络异常,图片无法展示
|

从代码可以看到,MyApplication继承自AbilityPackage,而AbilityPackage用来初始化每个HAP的基类

1.3库文件

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

网络异常,图片无法展示
|

1.4pack.info

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

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

网络异常,图片无法展示
|

2.应用配置文件

HarmonyOS应用的每个HAP的根目录下都存在一个“config.json”配置文件,如下图所示:

config.json文件内容主要涵盖以下三个方面:

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

网络异常,图片无法展示
|

2.1配置文件组成

JSON

1.JSON是什么?

  • JSON(JavaScript Object Notation, JS对象表示)是一种轻量级的数据交换格式
  • JSON类似于XML,但比XML更小、更快、更易解析
  • JSON使用Javascript语法来描述数据对象,但是JSON仍然独立于语言和平台:JSON解析器和JSON库支持许多不同的编程语言,目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • JSON具有自我描述性,更易理解

2.JSON语法

JSON语法是JavaScript对象表示语法的子集:数据在名称/值对、数据由逗号分隔、大括号 {} 保存对象、中括号[]保存数组,数组可以包含多个对象。具体来说就是:

  • JSON数据的书写格式是:key : value,比如:"name" : "starry陆离"
  • JSON名都是字符串,用""包围;而JSON值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在中括号中)、对象(在大括号中)、null。
  • JSON数字可以是整型或者浮点型,比如:"age":20
  • JSON对象在大括号{}中书写,比如:{"name":"starry陆离", "gender":"男", age:20 }
  • JSON数组在中括号[]中书写,数组可包含多个对象,比如:"students":[ {"name":"zhangsan"},  {"name":"lisi"}]
  • JSON 布尔值可以是true或者false,比如:"married":true
  • JSON 可以设置null值,比如:{ "runoob":null }

2.2配置文件元素

DevEco Studio提供了两种编辑“config.json”文件的方式。在“config.json”的编辑窗口中,可在右上角切换代码编辑视图可视化编辑视图

配置文件的内部结构

config.json由app、deviceConfig和module三个部分组成,缺一不可。具体如下所示:

  • app:表示应用的全局配置信息。同一个应用的不同HAP包的app配置必须保持一致。数据类型为对象,不可缺省。
  • deviceConfig:表示应用在具体设备上的配置信息。数据类型为对象,不可缺省。
  • module:表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。数据类型对象,不可缺省。

网络异常,图片无法展示
|
网络异常,图片无法展示
|

2.2.1app对象的内部结构

app对象包含应用的全局配置信息,内部结构说明如下:

  • bundleName:表示应用的包名,用于标识应用的唯一性。包名是由字母、数字、下划线(_)和点号(.)组成的字符串,必须以字母开头。支持的字符串长度为7~127字节。包名通常采用反域名形式表示(例如,“com.example.myapplication”)。建议第一级为域名后缀“com”,第二级为厂商/个人名,第三级为应用名,也可以采用多级。
  • vendor:表示对应用开发厂商的描述。字符串长度不超过255字节。该值可缺省,缺省值为空。
  • version:表示应用的版本信息
  • name:表示应用的版本号,用于向应用的终端用户呈现。
  • code:表示应用的版本号,仅用于HarmonyOS管理该应用,不对应用的终端用户呈现。
  • minCompatibleVersionCode:表示应用可兼容的最低版本号,用于在跨设备场景下,判断其他设备上该应用的版本是否兼容。格式与version.code字段的格式要求相同。
  • smartWindowSize:该标签用于在悬浮窗场景下表示应用的模拟窗口的尺寸。配置格式为“正整数*正整数”,单位为vp。正整数取值范围为[200,2000]。
  • smartWindowDeviceType:表示应用可在哪些设备上使用模拟窗口打开。取值为:智能手机phone、平板tablet、智慧屏tv
  • targetBundleList:表示允许以免安装方式拉起的其他HarmonyOS应用,列表取值为每个HarmonyOS应用的bundleName,多个   bundleName之间用英文“,”区分,最多配置5个bundleName。如果被拉起的应用不支持免安装方式,则拉起失败。

2.2.2deviceConfig对象的内部结构

deviceConfig包含在具体设备上的应用配置信息,可以包含default、phone、tablet、tv、car、wearable、liteWearable和smartVision等属性。default标签内的配置是适用于所有设备通用,其他设备类型如果有特殊的需求,则需要在该设备类型的标签下进行配置。

  • default:表示所有设备通用的应用配置信息,不可缺省。
  • phone:表示手机类设备的应用信息配置。
  • tablet:表示平板的应用配置信息。
  • tv:表示智慧屏特有的应用配置信息。
  • car:表示车机特有的应用配置信息。
  • wearable:表示智能穿戴特有的应用配置信息。
  • liteWearable:表示轻量级智能穿戴特有的应用配置信息。
  • smartVision:表示智能摄像头特有的应用配置信息。

2.2.3module对象的内部结构

module对象包含HAP包的配置信息,内部结构说明如下:

  • mainAbility:表示HAP包的入口ability名称。该标签的值应配置为“module > abilities”中存在的Page类型ability的名称。该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。
  • package:表示HAP的包结构名称,在应用内应保证唯一性。采用反向域名格式(建议与HAP的工程目录保持一致)。字符串长度不超过127字节。该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。
  • name:表示HAP的类名。采用反向域名方式表示,前缀需要与同级的package标签指定的包名一致,也可采用“.”开头的命名方式。字符串长度不超过255字节。该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。
  • ...
  • distroFilter:表示应用的分发规则。该标签用于定义HAP包对应的细分设备规格的分发策略,以便在应用市场进行云端分发应用包时做精准匹配。该标签可配置的分发策略维度包括API Version、屏幕形状、屏幕分辨率。在进行分发时,通过deviceType与这三个属性的匹配关系,唯一确定一个用于分发到对应设备的HAP。

3.资源文件

resources目录包括两大类目录,一类为base目录限定词目录,另一类为rawfile目录

base目录与限定词目录

  1. 组织形式
  2. 按照两级目录形式来组织,目录命名必须符合规范,以便根据设备状态去匹配相应目录下的资源文件。
  3. 一级子目录为base目录和限定词目录
  • base目录(resources.base)是默认存在的,当应用的resources资源目录中没有与设备状态匹配的限定词目录时,会自动引用该目录中的资源文件。
  • 限定词目录需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成。上图中的resources.en、resources.zh、resources.en_GB-vertical-car-mdpi都是限定词目录。
  1. 二级子目录为资源目录,用于存放字符串、颜色、布尔值等基础元素以及媒体、动画、布局等资源文件。
  • base>element:包括字符串、整型数、颜色、样式等资源的json文件。每个资源均由json格式进行定义。
  • base>graphic:xml类型的可绘制资源,如SVG(Scalable Vector Graphics)可缩放矢量图形文件、Shape基本的几何图形(如矩形、圆形、线等)等。
  • base>layoutxml格式的界面布局文件
  • base>media:多媒体文件,如图形、视频、音频等文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等。
  • base>profile:用于存储任意格式的原始资源文件。区别在于rawfile不会根据设备的状态去匹配不同的资源,需要指定文件路径和文件名进行引用。
  1. 编译方式
  2. 目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。
  3. 引用方式
    通过指定资源类型(type)和资源名称(name)来引用,

rawfile目录

  1. 组织形式
  2. 支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。
  3. 编译方式
  4. 目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。
  5. 引用方式
    通过指定文件路径和文件名来引用。


相关文章
|
2月前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
本篇将带你实现一个虚拟音乐控制台。用户可以通过界面控制音乐的播放、暂停、切换歌曲,并查看当前播放的歌曲信息。页面还支持调整音量和动态显示播放进度,是音乐播放器界面开发的基础功能示例。
200 80
|
29天前
「Mac畅玩鸿蒙与硬件51」UI互动应用篇28 - 模拟记账应用
本篇教程将介绍如何创建一个模拟记账应用,通过账单输入、动态列表展示和实时统计功能,学习接口定义和组件间的数据交互。
158 68
|
2月前
|
流计算 UED
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。
129 69
|
2月前
|
数据管理 API 调度
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
HarmonyOS Next 是华为新一代操作系统,专注于分布式技术的深度应用与生态融合。本文通过技术特点、应用场景及实战案例,全面解析其核心技术架构与开发流程。重点介绍分布式软总线2.0、数据管理、任务调度等升级特性,并提供基于 ArkTS 的原生开发支持。通过开发跨设备协同音乐播放应用,展示分布式能力的实际应用,涵盖项目配置、主界面设计、分布式服务实现及部署调试步骤。此外,深入分析分布式数据同步原理、任务调度优化及常见问题解决方案,帮助开发者掌握 HarmonyOS Next 的核心技术和实战技巧。
219 76
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
|
2月前
|
数据处理
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
本篇将带你实现一个评分统计工具,用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果,并统计平均分。这一功能适合用于问卷调查或评分统计的场景。
162 65
|
2月前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
155 38
|
2月前
|
前端开发
「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。
68 20
|
28天前
|
UED
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。
59 13
|
27天前
「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。
60 10
|
2月前
|
前端开发 UED
「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏
本篇教程将带你实现一个水果掉落小游戏,掌握基本的动态交互逻辑和鸿蒙组件的使用,进一步了解事件处理与状态管理。
51 14