> 文档中心 > 『HarmonyOS』探索HarmonyOS应用

『HarmonyOS』探索HarmonyOS应用


👨‍🎓作者简介:一位喜欢写作,计科专业大二菜鸟

🏡个人主页:starry陆离

🕒首发日期:2022年7月15日星期五

🌌上期文章:『HarmonyOS』工程的创建与虚拟机的使用

🍀温馨提示:全文3560词,阅读大约需要9分钟
📚订阅专栏:『HarmonyOS』
🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)
『HarmonyOS』探索HarmonyOS应用
如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

在这里插入图片描述

『HarmonyOS』探索HarmonyOS应用

  • 1.应用基础知识
    • 1.1鸿蒙应用程序包结构
    • 1.2HarmonyOS工程介绍
      • 工程目录结构
      • 代码层次的应用
    • 1.3库文件
    • 1.4pack.info
  • 2.应用配置文件
    • 2.1配置文件组成
    • 2.2配置文件元素
      • 2.2.1app对象的内部结构
      • 2.2.2deviceConfig对象的内部结构
      • 2.2.3module对象的内部结构
  • 3.资源文件

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界面。

『HarmonyOS』探索HarmonyOS应用

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

『HarmonyOS』探索HarmonyOS应用

1.2HarmonyOS工程介绍

工程目录结构

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

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

『HarmonyOS』探索HarmonyOS应用『HarmonyOS』探索HarmonyOS应用

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

代码层次的应用

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

『HarmonyOS』探索HarmonyOS应用

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

1.3库文件

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

『HarmonyOS』探索HarmonyOS应用

1.4pack.info

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

  • delivery-with-install: 表示该HAP是否支持随应用安装。“true”表示支持随应用安装;“false”表示不支持随应用安装。

  • name:HAP文件名。

  • module-type:模块类型,entry或feature。

  • device-type:表示支持该HAP运行的设备类型。

『HarmonyOS』探索HarmonyOS应用

2.应用配置文件

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

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

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

『HarmonyOS』探索HarmonyOS应用

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包生效。数据类型对象,不可缺省。

『HarmonyOS』探索HarmonyOS应用『HarmonyOS』探索HarmonyOS应用

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都是限定词目录。
  4. 二级子目录为资源目录,用于存放字符串、颜色、布尔值等基础元素以及媒体、动画、布局等资源文件。

    • base>element:包括字符串、整型数、颜色、样式等资源的json文件。每个资源均由json格式进行定义。
    • base>graphic:xml类型的可绘制资源,如SVG(Scalable Vector Graphics)可缩放矢量图形文件、Shape基本的几何图形(如矩形、圆形、线等)等。
    • base>layoutxml格式的界面布局文件
    • base>media:多媒体文件,如图形、视频、音频等文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等。
    • base>profile:用于存储任意格式的原始资源文件。区别在于rawfile不会根据设备的状态去匹配不同的资源,需要指定文件路径和文件名进行引用。
  5. 编译方式

  6. 目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。

  7. 引用方式

    通过指定资源类型(type)和资源名称(name)来引用,

rawfile目录

  1. 组织形式

  2. 支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。

  3. 编译方式

  4. 目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。

  5. 引用方式

    通过指定文件路径和文件名来引用。

资源类型(type)和资源名称(name)来引用,

rawfile目录

  1. 组织形式

  2. 支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。

  3. 编译方式

  4. 目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。

  5. 引用方式

    通过指定文件路径和文件名来引用。

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)
『HarmonyOS』探索HarmonyOS应用