IT评测·应用市场-qidao123.com

标题: 鸿蒙HarmonyOS学习手册_入门篇 [打印本页]

作者: 农民    时间: 2024-12-18 12:36
标题: 鸿蒙HarmonyOS学习手册_入门篇
鸿蒙HarmonyOS学习手册_入门篇


  
入门

快速入门

开辟准备

本文档实用于HarmonyOS应用开辟的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,认识HarmonyOS应用开辟流程。

在开始之前,您需要了解有关HarmonyOS应用的一些基本概念:UI框架的简单说明、应用模子的基本概念。
基本概念

UI框架

HarmonyOS提供了一套UI开辟框架,即方舟开辟框架(ArkUI框架)。方舟开辟框架可为开辟者提供应用UI开辟所必需的能力,好比多种组件、结构盘算、动画能力、UI交互、绘制等。
方舟开辟框架针对不同目的和技术背景的开辟者提供了两种开辟范式,分别是基于ArkTS的声明式开辟范式(简称“声明式开辟范式”)和兼容JS的类Web开辟范式(简称“类Web开辟范式”)。以下是两种开辟范式的简单对比。
    开辟范式名称   语言生态   UI更新方式   实用场景   实用人群         声明式开辟范式   ArkTS语言   数据驱动更新   复杂度较大、团队合作度较高的程序   移动体系应用开辟人员、体系应用开辟人员       类Web开辟范式   JS语言   数据驱动更新   界面较为简单的程序应用和卡片   Web前端开辟人员   更多UI框架的开辟内容及指导,详见UI开辟。
应用模子

应用模子是HarmonyOS为开辟者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模子,开辟者可以基于一套统一的模子举行应用开辟,使应用开辟更简单、高效。请见应用模子的构成要素。
随着体系的演进发展,HarmonyOS先后提供了两种应用模子:

FA模子和Stage模子的整体架构和计划思想等更多区别,请见应用模子解读。
快速入门提供了一个含有两个页面的开辟实例,并利用了不同的开辟语言或不同的应用模子举行开辟,以便开辟者明白以上基本概念及应用开辟流程。
工具准备

完成上述利用及基本概念的明白后,可参照构建第一个ArkTS应用(Stage模子)、构建第一个ArkTS应用(FA模子)、构建第一个JS应用(FA模子)中的任一章节举行下一步体验和学习。
构建第一个ArkTS应用(Stage模子)-快速入门-入门

说明
为确保运行效果,本文以利用DevEco Studio 3.1 Release版本为例,点击此处获取下载链接。
创建ArkTS工程

ArkTS工程目录结构(Stage模子)



构建第一个页面

构建第二个页面

实现页面间的跳转

页面间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目的页面,从而实现跳转。利用页面路由请导入router模块。
利用真机运行应用

运行HarmonyOS应用可以利用远程模拟器和物理真机设备,区别在于利用远程模拟器运行应用不需要对应用举行署名。接下来将以物理真机设备为例,介绍HarmonyOS应用的运行方法,关于模拟器的利用请参考利用Remote Emulator运行应用/服务。
恭喜您已经利用ArkTS语言开辟(Stage模子)完成了第一个HarmonyOS应用,快来探索更多的HarmonyOS功能吧。
构建第一个ArkTS应用(FA模子)

创建ArkTS工程

ArkTS工程目录结构(FA模子)



构建第一个页面

构建第二个页面

实现页面间的跳转

页面间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目的页面,从而实现跳转。利用页面路由请导入router模块。
利用真机运行应用

运行HarmonyOS应用可以利用远程模拟器和物理真机设备,区别在于利用远程模拟器运行应用不需要对应用举行署名。接下来将以物理真机设备为例,介绍HarmonyOS应用的运行方法,关于模拟器的利用请参考利用Remote Emulator运行应用/服务。
恭喜您已经利用ArkTS语言开辟(FA模子)完成了第一个HarmonyOS应用,快来探索更多的HarmonyOS功能吧。
构建第一个JS应用(FA模子)

创建JS工程

JS工程目录结构



构建第一个页面

构建第二个页面

实现页面间的跳转

页面间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目的页面,从而实现跳转。利用页面路由请导入router模块。
利用真机运行应用

运行HarmonyOS应用可以利用远程模拟器和物理真机设备,区别在于利用远程模拟器运行应用不需要对应用举行署名。接下来将以物理真机设备为例,介绍HarmonyOS应用的运行方法,关于模拟器的利用请参考利用Remote Emulator运行应用/服务。
恭喜您已经利用JS语言开辟(FA模子)完成了第一个HarmonyOS应用,快来探索更多的HarmonyOS功能吧。
开辟基础知识

应用程序包基础知识

应用程序包概述

用户应用程序泛指运行在设备的利用体系之上,为用户提供特定服务的程序,简称“应用”。一个应用所对应的软件包文件,称为“应用程序包”。
HarmonyOS提供了应用程序包开辟、安装、查询、更新、卸载的管理机制,方便开辟者开辟和管理HarmonyOS应用,具体如下:

应用程序包结构

Stage模子应用程序包结构

基于Stage模子开辟的应用,经编译打包后,其应用程序包结构如下图**应用程序包结构(Stage模子)**所示。开辟者需要认识应用程序包结构相关的基本概念。

FA模子应用程序包结构

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

图1 应用程序包结构(FA模子)
[外链图片转存中…(img-tu5I5CA2-1704894464550)]
应用程序包多HAP机制

多HAP机制计划目的


多HAP构建视图

IDE支持在一个应用工程中举行多个HAP的开辟与构建,如下图所示。
图1 多HAP构建视图
[外链图片转存中…(img-TVwtH37d-1704894464550)]
多HAP的开辟调试与发布部署流程

多HAP的开辟调试与发布部署流程如下图所示。
图1 多HAP的开辟调试与发布部署流程
[外链图片转存中…(img-0S6vEwMt-1704894464552)]
开辟
开辟者通过DevEco Studio工具按照业务的需要创建多个Module,在相应的Module中完成自身业务的开辟。
调试
通过DevEco Studio编译打包,天生单个或者多个HAP,即可基于HAP举行调试。如需根据不同的部署环境、目的人群、运行环境等,将同一个HAP定制编译为不同版本,请参见定制编译指导。
在调试前,需要先安装或更新HAP,以下介绍具体做法。

发布
当开辟的程序包满足发布要求时,可以在工具中打包编译天生App包。将该App包上架到应用市场云端,应用市场会对上架的App包校验署名,校验署名通过后会将App包中的HAP拆分出来,同时对拆分出的HAP重新添加署名,然后对HAP举行分发。
部署
用户在设备上的应用市场客户端能够看到各种各样的应用,这些应用均由云端分发而来,有些是多HAP应用,有些是单HAP应用。用户选择某个应用后,应用市场将下载应用所包含的全部deliveryWithInstall设置为“true”的HAP。
应用在终端设备上的安装

下载完成后,应用市场客户端再调用体系中包管理服务的安装接口安装下载的HAP,包管理服务以应用为单位将此中所有HAP部署到指定目录下,以完成应用的安装。
多HAP利用规则


多HAP运行机制及数据通讯方式

多HAP机制主要是为方便开辟者举行模块化管理。HAP和应用运行时的历程并不是逐一对应的,具体运行机制如下:

基于上述机制,多HAP数据通讯方式如下:

应用程序包安装和卸载流程

开辟者

开辟者可以通过调试命令举行应用的安装和卸载,可参考多HAP的调试流程。
图1 应用程序包安装和卸载流程(开辟者)
[外链图片转存中…(img-ZG3yaXP9-1704894464554)]
终端设备用户

开辟者将应用上架应用市场后,终端设备用户可以在终端设备上利用应用市场举行应用的安装和卸载。
图2 应用程序包安装和卸载流程(终端设备用户)
[外链图片转存中…(img-9mTCnEVz-1704894464555)]
应用程序包更新流程

HarmonyOS包管理服务提供了应用程序包更新能力,更新方式如下。
共享包

共享包概述

OpenHarmony提供了两种共享包,HAR(Harmony Archive)静态共享包,和HSP(Harmony Shared Package)动态共享包。
HAR与HSP都是为了实当代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随利用方编译,假如有多个利用方,它们的编译产物中会存在多份雷同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个历程中代码也只会存在一份。
图1 HAR和HSP在APP包中的形态示意图
[外链图片转存中…(img-XIUl1ljK-1704894464556)]
HSP旨在办理HAR存在的几个问题:

HSP的一些束缚:

HSP按照利用场景可以分为应用内HSP和应用间HSP,应用间HSP暂不支持。
HAR

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依靠项被引用。
创建HAR模块
HAR对应DevEco Studio工程中的“Library”类型的Module,可以通过DevEco Studio创建一个HAR模块。HAR模块默认不开启混淆能力,开启混淆能力,需要把HAR模块的build-profile.json5文件中的artifactType字段设置为obfuscation,配置如下所示:
  1. {
  2.   "apiType": "stageMode",
  3.   "buildOption": {
  4.       "artifactType": "obfuscation"
  5.   }
  6. }
复制代码
artifactType字段有以下两种取值,默认缺省为original。

需要对代码资产举行保护时,发起开启混淆能力,混淆能力开启后,DevEco Studio在构建HAR时,会对代码举行编译、混淆及压缩处理,保护代码资产。
注意:artifactType字段设置为obfuscation时,apiType字段必须设置为stageMode,因为Stage模子才支持混淆。
HAR开辟注意事项

导出HAR的ArkUI组件、接口、资源
index.ets文件是HAR导出声明文件的入口,HAR需要导出的接口,统一在index.ets文件中导出。index.ets文件是DevEco Studio默认自动天生的,用户也可以自定义,在模块的oh-package.json5文件中的main字段配置入口声明文件,配置如下所示:
  1. {
  2.   "main": "index.ets"
  3. }
复制代码
导出ArkUI组件
ArkUI组件的导出方式与ts的导出方式一致,通过export导出ArkUI组件,示比方下:
  1. // library/src/main/ets/components/MainPage/MainPage.ets
  2. @Component
  3. export struct MainPage {
  4.   @State message: string = 'Hello World'
  5.   build() {
  6.     Row() {
  7.       Column() {
  8.         Text(this.message)
  9.           .fontSize(50)
  10.           .fontWeight(FontWeight.Bold)
  11.       }
  12.       .width('100%')
  13.     }
  14.     .height('100%')
  15.   }
  16. }
复制代码
HAR对外袒露的接口,在index.ets导出文件中声明如下所示:
  1. // library/index.ets
  2. export { MainPage } from './src/main/ets/components/MainPage/MainPage'
复制代码
导出ts类和方法
通过export导出ts类和方法,支持导出多个ts类和方法,示比方下所示:
  1. // library/src/main/ts/test.ets
  2. export class Log {
  3.     static info(msg) {
  4.         console.info(msg);
  5.     }
  6. }
  7. export function func() {
  8.   return "har func";
  9. }
  10. export function func2() {
  11.   return "har func2";
  12. }
复制代码
HAR对外袒露的接口,在index.ets导出文件中声明如下所示:
  1. // library/index.ets
  2. export { Log } from './src/main/ts/test'
  3. export { func } from './src/main/ts/test'
  4. export { func2 } from './src/main/ts/test'
复制代码
资源
HAR模块编译打包时会把资源打包到HAR中。在编译构建HAP时,DevEco Studio会从HAP模块及依靠的模块中收集资源文件,假如不同模块下的资源文件出现重名辩论时,DevEco Studio会按照以下优先级举行覆盖(优先级由高到低):

引用HAR的ArkUI组件、接口、资源
引用HAR前,需要先配置对HAR的依靠,配置方式可参考。
引用HAR的ArkUI组件
HAR的依靠配置乐成后,可以引用HAR的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过import引入HAR导出的ArkUI组件,示比方下所示:
  1. // entry/src/main/ets/pages/index.ets
  2. import { MainPage } from "@ohos/library"
  3. @Entry
  4. @Component
  5. struct Index {
  6.   @State message: string = 'Hello World'
  7.   build() {
  8.     Row() {
  9.       // 引用HAR的ArkUI组件
  10.       MainPage()
  11.       Column() {
  12.         Text(this.message)
  13.           .fontSize(50)
  14.           .fontWeight(FontWeight.Bold)
  15.       }
  16.       .width('100%')
  17.     }
  18.     .height('100%')
  19.   }
  20. }
复制代码
引用HAR的类和方法
通过import引用HAR导出的ts类和方法,示比方下所示:
  1. // entry/src/main/ets/pages/index.ets
  2. import { Log } from "@ohos/library"
  3. import { func } from "@ohos/library"
  4. @Entry
  5. @Component
  6. struct Index {
  7.   build() {
  8.     Row() {
  9.       Column() {
  10.         Button('Button')
  11.           .onClick(()=>{
  12.             // 引用HAR的类和方法
  13.             Log.info("har msg");
  14.             func();
  15.         })
  16.       }
  17.       .width('100%')
  18.     }
  19.     .height('100%')
  20.   }
  21. }
复制代码
引用HAR的资源
通过$r引用HAR中的资源,比方在HAR模块的src/main/resources里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示比方下所示:
  1. // entry/src/main/ets/pages/index.ets
  2. @Entry
  3. @Component
  4. struct Index {
  5.   build() {
  6.     Row() {
  7.       Column() {
  8.         // 引用HAR的字符串资源
  9.         Text($r("app.string.hello_har"))
  10.           .fontSize(50)
  11.           .fontWeight(FontWeight.Bold)
  12.         // 引用HAR的图片资源
  13.         Image($r("app.media.icon_har"))
  14.       }
  15.       .width('100%')
  16.     }
  17.     .height('100%')
  18.   }
  19. }
复制代码
HSP

应用内HSP开辟指导
应用内HSP指的是专门为某一应用开辟的HSP,只能被该应用内部其他HAP/HSP利用,用于应用内部代码、资源的共享。
应用内HSP跟随其宿主应用的APP包一起发布,与该宿主应用具有雷同的包名和生命周期。
开辟应用内HSP
HSP模块可以在DevEco Studio中由指定模板创建,我们以创建一个名为library的HSP模块为例。基本的工程目录结构大致如下:
  1. library
  2. ├── src
  3. │   └── main
  4. │       ├── ets
  5. │       │   ├── pages
  6. │       │   └── index.ets
  7. │       ├── resources
  8. │       └── module.json5
  9. └── oh-package.json5
复制代码
模块module.json5中的"type"标识模块类型,HSP的"type"是"shared"。
  1. {
  2.     "type": "shared"
  3. }
复制代码
HSP通过在入口文件中导出接口,对外提供能力。入口文件在模块oh-package.json5的"main"中配置。比方:
  1. {
  2.     "main": "./src/main/ets/index.ets"
  3. }
复制代码
导出ts类和方法
通过export导出ts类和方法,比方:
  1. // library/src/main/ets/utils/test.ts
  2. export class Log {
  3.     static info(msg) {
  4.         console.info(msg);
  5.     }
  6. }
  7. export function add(a: number, b: number) {
  8.   return a + b;
  9. }
  10. export function minus(a: number, b: number) {
  11.   return a - b;
  12. }
复制代码
对外袒露的接口,需要在入口文件index.ets中声明:
  1. // library/src/main/ets/index.ets
  2. export { Log, add, minus } from './utils/test'
复制代码
导出ArkUI组件
ArkUI组件也可以通过export导出,比方:
  1. // library/src/main/ets/components/MyTitleBar.ets
  2. @Component
  3. export struct MyTitleBar {
  4.   build() {
  5.     Row() {
  6.       Text($r('app.string.library_title'))
  7.         .fontColor($r('app.color.white'))
  8.         .fontSize(25)
  9.         .margin({left:15})
  10.     }
  11.     .width('100%')
  12.     .height(50)
  13.     .padding({left:15})
  14.     .backgroundColor('#0D9FFB')
  15.   }
  16. }
复制代码
对外袒露的接口,需要在入口文件index.ets中声明:
  1. // library/src/main/ets/index.ets
  2. export { MyTitleBar } from './components/MyTitleBar'
复制代码
HSP中资源利用说明
注意,在HSP中,通过 r / r/ r/rawfile可以利用本模块resources目录下的资源。
假如利用相对路径的方式,比方:
在HSP模块中利用Image(“common/example.png”),实际上该Image组件访问的是HSP调用方(如entry)下的资源entry/src/main/ets/common/example.png。
导出native方法
在HSP中也可以包含C++编写的so。对于so中的native方法,HSP通过间接的方式导出,以导出libnative.so的乘法接口multi为例:
  1. // ibrary/src/main/ets/utils/nativeTest.ts
  2. import native from "libnative.so"
  3. export function nativeMulti(a: number, b: number) {
  4.     return native.multi(a, b);
  5. }
复制代码
对外袒露的接口,需要在入口文件index.ets中声明:
  1. // library/src/main/ets/index.ets
  2. export { nativeMulti } from './utils/nativeTest'
复制代码
利用应用内HSP
要利用HSP中的接口,首先需要在利用方的oh-package.json5中配置对它的依靠。假如应用内HSP和利用方在同一工程下,可以直接本地引用,比方:
  1. // entry/oh-package.json5
  2. "dependencies": {
  3.     "library": "file:../library"
  4. }
复制代码
然后就可以像利用HAR一样调用HSP的对外接口了。
比方,上面的library已经导出了下面这些接口:
  1. // library/src/main/ets/index.ets
  2. export { Log, add, minus } from './utils/test'
  3. export { MyTitleBar } from './components/MyTitleBar'export { nativeMulti } from './utils/nativeTest'
复制代码
在利用方的代码中,可以如许利用:
  1. // entry/src/main/ets/pages/index.ets
  2. import { Log, add, MyTitleBar, nativeMulti } from "library"
  3. @Entry
  4. @Component
  5. struct Index {
  6.   @State message: string = 'Hello World'
  7.   build() {
  8.     Row() {
  9.       Column() {
  10.         MyTitleBar()
  11.         Text(this.messag
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4