鸿蒙开发基本概念

1、开发准备

1.1、UI框架

HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。
方舟开发框架针对不同目的和技术背景提供两种开发方式:

  • 基于ArkTS的声明式开发范式(简称“声明式开发范式”)
  • 兼容JS的类Web开发范式(简称“类Web开发范式”)
开发范式名称 语言生态 UI更新方式 适用场景 适用人群
声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员
类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端开发人员

1.2、应用模型

应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。
HarmonyOS先后提供了两种应用模型:

  • FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推。FA模型开发可见FA模型开发概述。
  • Stage模型: HarmonyOS API 9开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。Stage模型开发可见Stage模型开发概述。

2、创建项目

  1. 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。
  2. 选择Application应用开发(本文以应用开发为例,Atomic Service对应为元服务开发),选择模板“Empty Ability”,点击Next进行下一步配置。
    在这里插入图片描述
  3. 进入配置工程界面,Compile SDK选择“3.1.0(API 9)”,Model 选择“Stage”,其他参数保持默认设置即可。
    在这里插入图片描述

支持使用ArkTS低代码开发方式。
低代码开发方式具有丰富的UI界面编辑功能,通过可视化界面开发方式快速构建布局,可有效降低开发者的上手成本并提升开发者构建UI界面的效率。
如需使用低代码开发方式,请打开上图中的Enable Super Visual开关。

  1. 点击Finish,工具会自动生成示例代码和相关资源,等待工程创建完成。

3、ArkTS工程目录结构(Stage模型)

在这里插入图片描述

  • AppScope > app.json5:应用的全局配置信息。
  • entry:HarmonyOS工程模块,编译构建生成一个HAP包。
    • src > main > ets:用于存放ArkTS源码。
    • src > main > ets > entryability:应用/服务的入口。
    • src > main > ets > pages:应用/服务包含的页面。
    • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。关于资源文件等。
    • src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。
    • build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。其中targets中可配置当前运行环境,默认为HarmonyOS。
    • hvigorfile.ts:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。
  • oh_modules:用于存放三方库依赖信息。关于原npm工程适配ohpm操作。
  • build-profile.json5:应用级配置信息,包括签名、产品配置等。
  • hvigorfile.ts:应用级编译构建任务脚本。

4、构建页面

工程同步完成后,在“Project”窗口,点击“entry > src > main > ets > pages”,打开“Index.ets”文件,可以看到页面由Text组件组成。“Index.ets”文件的示例如下:

@Entry
@Component
struct Index {
   
  @State message: string = 'Hello World'

  build() {
   
    Row() {
   
      Column() {
   
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

在默认页面基础上,我们添加一个Button组件,作为按钮响应用户点击,从而实现跳转到另一个页面。“Index.ets”文件的示例如下:

@Entry
@Component
struct Index {
   
  @State message: string = 'Hello World'
  @State count:number = 0;
  build() {
   
    Row() {
   
      Column() {
   
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        // 添加按钮,以响应用户点击
        Button(){
   
          // 按钮中添加文本信息
          Text("我是一个按钮"+this.count)
            // 设置文本的样式
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
            .width(300)
            .fontColor('#fff')
            .textAlign(TextAlign.Center)
            .padding(10)
        }
        // 给按钮添加点击事件
        .onClick(()=>{
   
          this.count++;
          // 在按钮被点击之后,将信息打印在控制台
          console.log("按钮被点击了"+this.count);
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

5、调试页面

简单调试,可以使用IDE自带的预览功能,进行界面效果的预览操作。当然也可以采用前面介绍的模拟器进行调试。
在这里插入图片描述

6、应用程序包概述

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。一个应用所对应的软件包文件,称为“应用程序包”。

HarmonyOS提供了应用程序包开发、安装、查询、更新、卸载的管理机制,方便开发者开发和管理HarmonyOS应用,具体如下:

  • 应用软件所涉及的文件多种多样,开发者可通过HarmonyOS提供的集成开发工具将其开发的可执行代码、资源、三方库等文件整合到一起制作成HarmonyOS应用程序包,便于开发者对应用程序的部署。

  • 应用软件所涉及的设备类型多种多样,开发者可通过HarmonyOS提供的应用程序包配置文件指定其应用程序包的分发设备类型,便于应用市场对应用程序包的分发管理。

  • 应用软件所包含的功能多种多样,将不同的功能特性按模块来划分和管理是一种良好的设计方式。HarmonyOS提供了同一应用程序的多包管理的机制,开发者可以将不同的功能特性聚合到不同的包中,方便后续的维护与扩展。

  • 应用软件涉及的芯片平台多种多样,有x86、ARM等,还有32位、64位之分,HarmonyOS为应用程序包屏蔽了芯片平台的差异,使应用程序包在不同的芯片平台都能够安装运行。

  • 应用软件涉及的软件信息多种多样,有应用版本、应用名称、组件、申请权限等的信息,HarmonyOS包管理为开发者提供了这些信息的查询接口,方便开发者在程序中查询所需要的包信息。

  • 应用软件涉及的资源多种多样,有媒体资源、原生资源、字符资源以及国际化的资源等,HarmonyOS包管理将不同的资源归档到不同的目录中,并集成资源索引文件,方便应用对资源的查找和使用。

7、应用程序包结构

7.1、Stage模型应用程序包结构

基于Stage模型开发的应用,经编译打包后,其应用程序包结构如下图应用程序包结构(Stage模型)所示。开发者需要熟悉应用程序包结构相关的基本概念。
在开发态,一个应用包含一个或者多个Module,可以在DevEco Studio工程中创建一个或者多个Module。Module是HarmonyOS应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于HAR(Harmony Archive),或者HSP(Harmony Shared Package)。
在这里插入图片描述
全文中介绍到的Module默认指的是“Ability”类型的Module。

  • 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件,即HAP。HAP是HarmonyOS应用安装的基本单位,包含了编译后的代码、资源、三方库及配置文件。HAP可分为Entry和Feature两种类型。
    • Entry类型的HAP:是应用的主模块,在module.json5配置文件中的type标签配置为“entry”类型。在同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。
    • Feature类型的HAP:是应用的动态特性模块,在module.json5配置文件中的type标签配置为“feature”类型。一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含;Feature类型的HAP通常用于实现应用的特性功能,可以配置成按需下载安装,也可以配置成随Entry类型的HAP一起下载安装(请参见module对象内部结构中的“deliveryWithInstall”)。
  • 每个HarmonyOS应用可以包含多个.hap文件,一个应用中的.hap文件合在一起称为一个Bundle,而bundleName就是应用的唯一标识(请参见app.json5配置文件中的bundleName标签)。需要特别说明的是:在应用上架到应用市场时,需要把应用包含的所有.hap文件(即Bundle)打包为一个.app后缀的文件用于上架,这个.app文件称为App Pack(Application Package),其中同时包含了描述App Pack属性的pack.info文件;在云端(服务器)分发和终端设备安装时,都是以HAP为单位进行分发和安装的。
  • 打包后的HAP包结构包括ets、libs、resources等文件夹和resources.index、module.json、pack.info等文件。
    • ets目录用于存放应用代码编译后的字节码文件。
    • libs目录用于存放库文件。库文件是HarmonyOS应用依赖的第三方代码(.so二进制文件)。
    • resources目录用于存放应用的资源文件(字符串、图片等),便于开发者使用和维护。
    • resources.index是资源索引表,由IDE编译工程时生成。
    • module.json是HAP的配置文件,内容由工程配置中的module.json5和app.json5组成,该文件是HAP中必不可少的文件。IDE会自动生成一部分默认配置,开发者按需修改其中的配置。
    • pack.info是Bundle中用于描述每个HAP属性的文件,例如app中的bundleName和versionCode信息、module中的name、type和abilities等信息,由IDE工具生成Bundle包时自动生成。
      在这里插入图片描述

总结:

  • 鸿蒙应用基本单元为Module
  • 一个应用软件由一个或多个Module组成
  • Module分为AbilityLibrary 两种类型
  • Ability 类型Module编译后为HAP(鸿蒙应用安装的基本单位,包含编译后的代码、资源、三方库及配置文件)
  • Library 类型Module编译后为HAR或HSP
  • 一个Module可以包含一个或多个UIAbility
  • HAP可分为EntryFeature两种类型
  • Entry类型的HAP:是应用的主模块,同一个应用中只能有一个,用于实现应用的入口界面、入口图标、主特性功能等,在module.json5配置文件中的type标签配置为“entry”类型
  • Feature类型的HAP:是应用的动态特性模块,一个应用中可以包含一个或者多个,在module.json5配置文件中的type标签配置为“feature”类型

7.2、FA模型应用程序包结构

基于FA模型开发的应用,其应用程序包结构如下图应用程序包结构(FA模型)所示。开发者需要熟悉应用程序包结构相关的基本概念。
FA模型与Stage模型不同之处在于HAP内部文件存放位置不同,FA模型将所有的资源文件、库文件和代码文件都放在assets文件夹中,在文件夹内部进一步区分。

  • config.json是应用配置文件,IDE会自动生成一部分模块代码,开发者按需修改其中的配置。详细字段请参见应用配置文件。
  • assets是HAP所有的资源文件、库文件和代码文件的集合,内部可以分为entry和js文件夹。entry文件夹中存放的是resources目录和resources.index文件。
  • resources目录用于存放应用的资源文件(字符串、图片等),便于开发者使用和维护
  • resources.index是资源索引表,由IDE调用SDK工具生成。
  • js文件夹中存放的是编译后的代码文件。
  • pack.info是Bundle中用于描述每个HAP属性的文件,例如app中的bundleName和versionCode信息、module中的name、type和abilities等信息,由IDE工具生成Bundle包时自动生成。
    在这里插入图片描述
    其他的一些细节可以查阅鸿蒙官网

8、应用配置文件概述

每个应用项目必须在项目的代码目录下加入配置文件,这些配置文件会向编译工具、操作系统和应用市场提供应用的基本信息。
在基于Stage模型开发的应用项目代码下,都存在一个app.json5及一个或多个module.json5这两种配置文件。

app.json5主要包含以下内容:

  • 应用的全局配置信息,包含应用的包名、开发厂商、版本号等基本信息。
  • 特定设备类型的配置信息。
    app.json5配置文件详解

module.json5主要包含以下内容:

  • Module的基本配置信息,例如Module名称、类型、描述、支持的设备类型等基本信息。
  • 应用组件信息,包含UIAbility组件和ExtensionAbility组件的描述信息。
  • 应用运行过程中所需的权限信息。
    module.json5配置文件详解

9、资源分类与访问

应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。

  • 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表现。
  • 系统资源:开发者直接使用系统预置的资源定义(即分层参数,同一资源ID在设备类型、深浅色等不同配置下有不同的取值)。
    详细资源访问参考

相关推荐

  1. Web开发基础概念

    2023-12-22 23:56:01       10 阅读
  2. 鸿蒙开发 TypeScript 基础语法

    2023-12-22 23:56:01       17 阅读
  3. 鸿蒙应用开发系列 篇一:鸿蒙系统概述

    2023-12-22 23:56:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-22 23:56:01       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-22 23:56:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-22 23:56:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-22 23:56:01       18 阅读

热门阅读

  1. Unity-时间

    2023-12-22 23:56:01       39 阅读
  2. etcd是什么

    2023-12-22 23:56:01       35 阅读
  3. NLP中的嵌入层

    2023-12-22 23:56:01       38 阅读
  4. 控制中存在的一些问题(注意事项)

    2023-12-22 23:56:01       29 阅读
  5. 基于改进的粒子群算法的双机器人路径规划

    2023-12-22 23:56:01       43 阅读
  6. Android 13 - Media框架(25)- OMXNodeInstance(二)

    2023-12-22 23:56:01       36 阅读
  7. 基于YALMIP求解含SOP+阶锥的配电网重构附Matlab代码

    2023-12-22 23:56:01       42 阅读
  8. 单元测试优化实践总结

    2023-12-22 23:56:01       33 阅读
  9. 使用MATLAB中的`xlswrite`函数将数据写入Excel文件

    2023-12-22 23:56:01       46 阅读
  10. 傅里叶变换全息图 Matlab

    2023-12-22 23:56:01       46 阅读
  11. Python---案例-多任务版TCP服务端程序开发

    2023-12-22 23:56:01       34 阅读
  12. LeetCode刷题(文章链接汇总)

    2023-12-22 23:56:01       47 阅读
  13. linux RCU 使用实例

    2023-12-22 23:56:01       31 阅读
  14. 卸载anaconda报错Error: Unable to move .anaconda

    2023-12-22 23:56:01       41 阅读
  15. Halcon DL-Model相关算子

    2023-12-22 23:56:01       33 阅读