『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. 引用方式
    通过指定文件路径和文件名来引用。


相关文章
|
12天前
|
存储 JavaScript 开发者
探索鸿蒙新世界:ArkUI框架实战指南,解锁HarmonyOS应用UI设计的无限可能!
【10月更文挑战第19天】ArkUI框架是华为鸿蒙系统中用于开发用户界面的核心工具,支持ArkTS和eTS两种开发语言。本文介绍了ArkUI的基本概念、组件使用、布局管理和状态管理,通过示例代码帮助开发者轻松构建美观、高效的跨设备UI。
43 3
|
3天前
|
开发工具 开发者 git
「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
本篇将通过一个简单的计数器应用,带你体验鸿蒙开发环境的实际操作流程。本项目主要练习组件的使用、事件响应和状态管理,帮助开发者熟悉基本的应用构建流程。
34 3
「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
|
3天前
|
编解码 缓存 自然语言处理
「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理
本篇将介绍如何在 HarmonyOS 项目中高效管理资源文件和依赖,以确保代码结构清晰并提升应用性能。资源管理涉及图片、字符串、多语言文件等,通过优化文件加载和依赖管理,可以显著提升项目的加载速度和运行效率。
23 1
「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理
|
22天前
|
开发者
手把手带你实现 鸿蒙应用 键盘音乐
手把手带你实现 鸿蒙应用 键盘音乐
33 3
手把手带你实现 鸿蒙应用 键盘音乐
|
4天前
|
Cloud Native 安全 开发工具
阿里云 EMAS携手开发者,共建更优质的HarmonyOS NEXT应用生态
阿里云移动研发平台 EMAS(Enterprise Mobile Application Studio,简称EMAS)是国内领先的云原生应用开发平台, 基于广泛的云原生技术致力于为企业、开发者提供一站式的应用研发管理服务,涵盖开发、测试、运营等应用全生命周期。
|
12天前
|
JavaScript Java C++
ArkTS揭秘:如何在无‘类’的世界里,用组件与对象构建HarmonyOS应用的奇妙桥梁?
【10月更文挑战第19天】在鸿蒙系统的ArkTS开发中,类和对象的概念类似于传统OOP语言,但融入了声明式UI的特性。本文通过对比Java中的类和对象,详细介绍了如何在ArkTS中定义组件和实例化组件,并展示了实际开发中的应用示例。通过示例代码,读者可以清晰地理解ArkTS中类和对象的模拟方式及其灵活性。
22 1
|
12天前
|
JavaScript API 开发者
掌握ArkTS,打造HarmonyOS应用新视界:从“Hello World”到状态管理,揭秘鸿蒙UI开发的高效秘诀
【10月更文挑战第19天】ArkTS(ArkUI TypeScript)是华为鸿蒙系统中用于开发用户界面的声明式编程语言,结合了TypeScript和HarmonyOS的UI框架。本文介绍ArkTS的基本语法,包括组件结构、模板和脚本部分,并通过“Hello World”和计数器示例展示其使用方法。
29 1
|
26天前
|
安全 物联网 大数据
基于开元鸿蒙(OpenHarmony)的【智能药房与药品管理综合应用系统
基于开元鸿蒙(OpenHarmony)的【智能药房与药品管理综合应用系统
63 8
|
26天前
|
传感器 监控 算法
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
73 6
|
26天前
|
传感器 人工智能 监控
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
78 6

热门文章

最新文章