本章内容

  • 方舟框架介绍

  • 初识Ability

  • FA模型和Stage模型

  • eTS文件基本组成

  • 资源管理

    • 访问应用资源

    • 访问系统资源

  • 像素单位

  • 国际化

本章目标

  • ArkUI框架简介
  • 资源管理
  • 像素单位
  • 国际化

创建工程信息详解

上一章运行了一个Hello World程序,在工程配置阶段并没有进行详细说明。

工程信息详解


Project name:工程的名称
可以自定义,由大小写字母、数据和下划线组成。
Project type:工程的类型
标识该工程是一个传统方式的需要安装的应用(Application)或原子化服务(Atomic service),默认类型为Application。
Bundle name:软件包名称
默认情况下,应用ID也会使用该名称,应用发布时,应用ID需要唯一。如果“Project type”选择了Atomic service,则Bundle name的后缀名必须是.hmservice。
Save location:工程文件本地存储路径
由大小写字母、数字和下划线等组成,不能包含中文字符。
Compile SDK:编译的SDK版本。
Model:选择FA模型或Stage模型(Stage模型仅Compile API为9及以上支持)。
Enable Super Visual:选择开发模式,部分模板支持低代码开发,可选择打开该开关。
Language:开发语言。
Compatible SDK:兼容的SDK最低版本。
Device type:该工程模板支持的设备类型

Default 代表了一个功能比较全面的OpenHarmony设备,具有全部的系统能力,开发者可以不用判断即可使用OpenHarmony的全部API。
Show in service center:是否在服务中心展示。(服务卡片)

工程目录结构

FA模型和Stage模型的工程目录结构存在差异,API version8只支持FA模型,API version9则两者都支持。

eTS工程目录结构(FA模型)

  • entry:OpenHarmony工程模块,编译构建生成一个Hap包。

    • src > main > ets:用于存放ets源码。 src > main > ets > MainAbility:应用/服务的入口。
    • src > main > ets > MainAbility > app.ets:承载Ability生命周期。
    • src > main > ets > pages:MainAbility包含的页面。
    • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。
      • base>element:包括字符串、整型数、颜色、样式等资源的json文件。
      • base>media:多媒体文件,如图形、视频、音频等文件,支持的文件格式包 括:.png、.gif、.mp3、.mp4等。
    • src > main >config.json:模块配置文件,主要包含HAP包的配置信息、应用在具体设备上的配置信息以及应用的全局配置信息。
    • build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。
    • hvigorfile.js:模块级编译构建任务脚本。
    • build-profile.json5:应用级配置信息,包括签名、产品配置等。
  • hvigorfile.js:应用级编译构建任务脚本。

eTS工程目录结构(Stage模型)

  • AppScope > app.json5:应用的全局配置信息。
  • entry:OpenHarmony工程模块,编译构建生成一个Hap包。
    • src > main > ets:用于存放ets源码。
    • src > main > ets > Application > AbilityStage.ts:实现AbilityStage接口。
    • src > main > ets > MainAbility:应用/服务的入口。
    • src > main > ets > MainAbility > MainAbility.ts:承载Ability生命周期。
    • src > main > ets > pages:MainAbility包含的页面。
    • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布 局文件等。
      • base>element:包括字符串、整型数、颜色、样式等资源的json文件。
      • base>media:多媒体文件,如图形、视频、音频等文件,支持的文件格式包 括:.png、.gif、.mp3、.mp4等。
    • base>profile:用于存储任意格式的原始资源文件。
    • src > main > module.json5:模块配置文件,主要包含HAP包的配置信息、应用在具体设备上的配置信息以及应用的全局配置信息。
    • build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。
    • hvigorfile.js:模块级编译构建任务脚本。
  • build-profile.json5:应用级配置信息,包括签名、产品配置等。
  • hvigorfile.js:应用级编译构建任务脚本。

对于初学者,两者区别主要讲目录区别,和思想区别,生命周期等熟练使用后在讲解。初学者更需要一个直观的了解。

初识Ability

什么是Ability?

Ability译为能力,一个OpenHarmony应用包含N个能力(Ability),它们是系统调用应用的最小单元。应用程序开发其实本质上就是开发Ability。


自己试试对应用进行拆分,你会发现它们具备很多小能力。把这些小能力组合起来就变成了一个应用。

开发模型

OpenHarmony又对这些能力(Ability)进行了划分:

第一种按照特征(可见与不可见)划分为FA(Feature Ability)和PA(Particle Ability)。简称FA模型开发。
FA支持Page Ability,PA支持Service Ability、Data Ability、以及FormAbility。
PageAbility是具备ArkUI实现的Ability,是用户具体可见并可以交互的Ability实例。
ServiceAbility也是Ability一种,但是没有UI,提供其他Ability调用自定义的服务,在后台运行。
DataAbility也是没有UI的Ability,提供其他Ability进行数据的增删查服务,在后台运行。
FormAbility是卡片Ability,是一种界面展示形式。

第二种按照发展(一个基础能力当参照物)划分为Ability和ExtensionAbility。简称Stage模型开发
其中ExtensionAbility又被扩展为ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等一系列ExtensionAbility。

API 8及其更早版本的应用程序只能使用FA模型进行开发,从API9开始支持Stage模型并且只能用eTS语言。

因为对Ability的划分存在两种方式,所以就划分成了2中开发模式。当然这里介绍的2种模式不是那么的精准,主要让学生有一种直观的感受,后面随着知识的积累在细说技术上面的区别。

方舟开发框架

框架介绍

方舟开发框架(简称:ArkUI),是一套UI开发框架,提供开发者进行应用UI开发时所必需的能力。方舟开发框架针对不同目的和技术背景的开发者提供了两种开发范式,分别是基于TS扩展的声明式开发范式(简称“声明式开发范式”)和基于JS扩展的类Web开发范式(简称“类Web开发范式”)。


从上图可以看出,类Web开发范式与声明式开发范式的UI后端引擎和语言运行时是共用的,其中,UI后端引擎实现了方舟开发框架的六种基本能力。声明式开发范式无需JS Framework进行页面DOM管理,渲染更新链路更为精简,占用内存更少,因此更推荐开发者选用声明式开发范式来搭建应用UI界面

初始eTS语言

eTS(extended TypeScript)是OpenHarmony优选的主力应用开发语言。eTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。eTS继承了TS的所有特性。

eTS的基本组成


装饰器:用来装饰类、结构体、方法以及变量,赋予其特殊的含义,如上述示例中 @Entry 、 @Component 、 @State 都是装饰器。 @Component 表示这是个自定义组件; @Entry 则表示这是个页面入口组件,也就是根组件; @State 表示组件中的状态变量,这个状态变化会引起UI变更。
自定义组件:可复用的UI单元,可组合其它组件,如上述被 @Component 装饰的 struct Index 。
UI描述:声明式的方式来描述UI的结构,如上述 build() 方法内部的代码块。
内置组件:框架中默认内置的基础组件,可直接被开发者调用,比如示例中的Stack、Text、Button。
事件方法:用于添加组件对事件的响应逻辑,统一通过事件方法进行设置,如跟随在Button后面的onClick()方法。
属性方法:用于组件属性的配置,统一通过属性方法进行设置,如fontSize()、width()、height()、size()等,可通过链式调用的方式设置多项属性。

了解了eTS组成后我们来动手操作一下

添加一个按钮

@Entry
@Component
struct Test {@State message: string = 'Hello World'build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//添加一个按钮Button("按钮")}.width('100%')}.height('100%')}
}


可以看到eTS语法非常简洁。

为按钮添加点击事件

@Entry
@Component
struct Test {@State message: string = 'Hello World'@State count:number=0build() {Row() {Column() {Text(this.count.toString()).fontSize(50).fontWeight(FontWeight.Bold)Button("按钮").onClick(()=>{this.count++})}.width('100%')}.height('100%')}
}

我们点击了加号按钮,触发按钮的 onClick 事件回调,由于在回调里执行了 count++ 操作导致了 count 的值发生了改变,又因为 count 被 @State 修饰符修饰,所以ArkUI开发框架就会重新调用 build() 方法更新各组件的属性值, Text 组件会更新 count 的值,然后页面刷新,计数器的功能就实现了。

页面构建流程

页面初次显示过程

①、index.ets 源代码通过编译工具链编译为带有类型标志的目标文件,同时也包含了如何创建UI结构信息的指令流。
②、通过跨语言调用并生成了 C++ 层面的 Component 树(UI描述层)。
③、通过 Component 树进一步生成 Element 树。 Element 是 Component 的实例,表示一个具体的组件节点,它形成的 Element 树负责维持界面在整个运行时的树形结构,方便计算更新时的局部更新算法等。
④、对于每个可显示的 Element 都会为其创建对应的 RenderNode 。 RenderNode 负责一个节点的显示信息,它形成的 Render 树维护着整个界面渲染需要用到的信息,包括位置、大小、绘制命令等。后续的布局、绘制都是在 Render 树上进行的。
⑤、实现真正的渲染并显示绘制结果。

点击按钮显示过程

⑥、点击屏幕,事件传递到组件上,组件的 onClick 事件方法被触发执行。
⑦、由于 onClick 事件方法中 @State 修饰的变量值改变了,相应的 getter / setting 函数会被触发。
⑧、状态管理模块定位出与之关联的UI组件。
⑨、状态管理模块更新相应的 Element 树的信息。
⑩、状态管理模块更新相应的 RenderNode 树的渲染信息。
⑪、刷新界面并显示绘制结果。

ArkUI框架简介

过一个案例回过头在介绍方舟开发框架

ArkUI开发框架是方舟开发框架的简称,它是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架,它使用极简的UI信息语法、丰富的UI组件以及实时界面语言工具,帮助开发者提升应用界面开发效率 30%,开发者只需要使用一套 TS / JS API,就能在多个 HarmonyOS / OpenHarmony 设备上提供既丰富又流畅的用户界面体验。

声明式UI前端
提供了UI开发范式的基础语言规范,并提供内置的UI组件、布局和动画,提供了多种状态管理机制,为应用开发者提供一系列接口支持。
语言运行时
选用方舟语言运行时,提供了针对UI范式语法的解析能力、跨语言调用支持的能力和TS语言高性能运行环境。
声明式UI后端引擎
后端引擎提供了兼容不同开发范式的UI渲染管线,提供多种基础组件、布局计算、动效、交互事件,提供了状态管理和绘制能力。
渲染引擎
提供了高效的绘制能力,将渲染管线收集的渲染指令,绘制到屏幕能力。
平台适配层
提供了对系统平台的抽象接口,具备接入不同系统的能力,如系统渲染管线、生命周期调度等。

声明式UI开发范式的基本组成说明

上述示例中,用 @State 装饰的变量 count ,包含了一个基础的状态管理机制,即 count 的值的变化,会引起相应的UI变更(Text组件),ArkUI开发框架还提供多维度的状态管理机制,和UI相关联的数据,不仅仅在组件内使用,还可以在不同组件层级间传递,比如父子组件之间,爷孙组件之间,也可以是全局范围内的传递,还可以是跨设备传递;另外,从数据的传递形式来看,可以分为只读的单向传递和可变更的双向传递

OpenHarmony 资源管理详解

移动端应用开发常用到的资源比如图片,音视频,字符串等都有固定的存放目录,OpenHarmony 把这些应用的资源文件统一放在 resources 目录下的各子目录中便于开发者使用和维护, resoures 目录包括两大类,一类为 base 目录与限定词目录,另一类为 rawfile 目录


资源访问

OpenHarmony 应用资源目录分为三类,一类是应用资源目录,另一类是系统资源目录,还有就是自己创建的目录。

访问应用资源目录

base 目录下的资源文件会被编译成二进制文件并且给这些资源赋予唯一的 ID ,使用相应资源的时候通过资源访问符 $(‘app.type.name’) 的形式,app 代表是应用内 resources 目录中定义的资源;type 表示资源类型,可取值有 color、float、string 、string 、 media 等;name 表示资源的文件名字。例如 media 中新加 name 为 test.jpeg 的图片,则访问该字符串资源为 $r(‘app.media.Car’)。

在 base 目录下新建 string.json 、float.json、color.json 文件,分别存放字符串、字体、颜色。资源内容如下图所示:

通过 $r(‘app.type.name’) 访问资源的简单样例如下所示:

访问系统资源

系统资源包含 颜色 、 圆角 、 字体 、 间距 、 字符串 及 图片 等,通过使用系统资源,不同的开发者可以开发出具有相同视觉风格的应用,开发者可以通过 $r(‘sys.type.name’) 的形式引用系统资源,和访问应用资源不同的是使用 sys 代表系统资源,其它和访问应用资源规则一致。

访问系统资源简单样例如下所示

OpenHarmony 像素单位

ArkUI开发框架提供了 4 种像素单位供开发者使用,分别是:
px:屏幕物理像素单位。
vp:屏幕密度相关像素单位,根据屏幕像素密度转换为屏幕物理像素
fp:字体像素,与vp类似适用于屏幕密度变化,随系统字体大小设置变化
lpx:视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(在 config.json 中配置的 designWidth )的比值,如配置 designWdith 为 720 时,在实际宽度为 1440 物理像素的屏幕上, 1px 为 2px

国际化

如今越来的越多的应用都走向了海外,应用走向海外需要支持不同国家的语言,这就意味着应用资源文件需要支持不同语言环境下的显示。
如何让应用支持多语言。
ArkUI开发框架对多语言的支持比较友好,只需要在 resources 目录下创建对应国家的文件夹,名称对国家简码,例如中国为 zh ,则在 resources 下创建 zh 文件夹,然后在 zh 文件下创建对应的类别文件,以文本资源支持多语言为例。

1.先在Resources目录下新建>zh目录。拷贝base目录下的element目录到zh目录下。

2.在base>element>string.json添加一个键值。之后再zh>element>string.json目录下也新增一个name为msg的键值数据。

//base>element>string.json
{"string": [{"name":"msg","value": "hello"},{"name": "entry_desc","value": "description"},{"name": "MainAbility_desc","value": "description"},{"name": "MainAbility_label","value": "label"}]
}
//zh>element>string.json
{"string": [{"name":"msg","value": "你好"}]
}

3.界面中使用访问用资源的方式拿到定义的值。

@Entry @Component struct Test {build() {Row() {Text($r('app.string.msg')).fontSize(40)}.justifyContent(FlexAlign.Center).size({width:'100%',height:'100%'})}
}

4.预览器窗口点击()找到语言设置选项,切换语言查看效果.

8.本章练习

1.什么是Web开发范式?
2.什么是声明式开发范式?
3.Web开发范式和声明式开发范式那个运行效率高为什么?
4.声明式开发范式页面有哪些内容构成?
5.如何实现不同国家打开应用显示不同文字?
6.OpenHarmony有哪些像素单位?他们有什么区别?
7.什么是Ability?
从那个版本开始OpenHarmony支持Stage开发模式?

第二章 OpenHarmony工程介绍相关推荐

  1. STM32学习笔记 第二章 STM32资源介绍

    第二章 STM32资源介绍 2.1 芯片选型 STM32-F1系列(如图2-1): 基础型,主频为72M(内核为cortex-M3),CPU位数=32. 我们所用的芯片是STM32F103vet6 S ...

  2. 数据库系统概念总结:第二章 关系模型介绍

    周末无事水文章,期末备考的总结资料 第二章 关系模型介绍 2.1 关系数据的结构 关系数据库由表(table)组成,每个表有唯一的名字.一般来说,表中一行代表了一组值之间的一种联系 表中一行代表了一组 ...

  3. 《Getting Started with WebRTC》第二章 WebRTC技术介绍

    <Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念:   .  怎样建立P2P的通信   .  有效的信 ...

  4. 《吕鑫:VC++6.0就业培训宝典之MFC视频教程》学习笔记 -- 第二章 MFC原理介绍

    第二章 MFC原理介绍 2.1 第一个Win32软件 2.2 Win32对话框程序开发 2.3 程序资源管理和Windows数据类型 2.4 Win32环境下的多对话框管理 2.5 初步学习MFC软件 ...

  5. 微型计算机原理第二章作图题,工程制图第二章习题答案解析.doc

    WORD文档可编辑 技术资料 专业分享 第二章 点.直线.平面的投影----点的投影 班级 学号 姓名 2-1.求各点的第三投影,并填上各点到投影面的距离. A点距V面( 5 ).距H面( 6 ).距 ...

  6. 第二章 关键技术介绍

    本项目主要用到的技术有os.requests.lxml.pandas等,数据库使用的是SQL. 2.1   os模块介绍 Python的标准库中的os模块包含普遍的操作系统功能.即它允许一个程序在编写 ...

  7. SpringCloud实战与原理分析--第二章:SpringCloud介绍

    我准备向他提出一个他不可能拒绝的条件.--<教父> 1.引言 首先,我们来看看一般的微服务架构需要的功能或使用场景: (1)我们把整个系统根据业务拆分成几个子系统. (2)每个子系统可以部 ...

  8. 【ZYNQ Ultrascale+ MPSOC FPGA教程】第二章 硬件原理图介绍

    原创声明: 本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处. 简介 AXU2CGA/B的特点是体积小并扩展了丰富的外设.主芯片采用Xilinx ...

  9. linux VCS+verdi运行UVM实战(第二章)中的例子

    目录 前言 介绍 建立工程 运行代码 查看波形 总结 前言 用VCS+verdi运行了下UVM实战中的例子(第二章). 介绍 在某宝上花了几十块,买了个虚拟机(已经安装好VCS+verdi).直接用U ...

  10. GNU make 中文手册 第一二章 概述与介绍

    一.第一章:概述 准备知识 在开始我们关于 make 的讨论之前,首先需要明确一些基本概念: 编译:把高级语言书写的代码,转换为机器可识别的机器指令.编译高级语言后生成的指令虽然可被机器识别,但是还不 ...

最新文章

  1. lvs+keepalived 集群
  2. 【组合数学】递推方程 ( 通解定义 | 无重根下递推方程通解结构定理 )
  3. 微软亚洲研究院开源图数据库GraphView
  4. 关于C# Span的一些实践
  5. Elasticsearch的用例:灵活的查询缓存
  6. 某听书网站系统漏洞,利用抓包拼接方式获取网站资源
  7. Java 故障安全异常处理
  8. 多网卡配置同一网段IP情况解析
  9. 惠普打印机墨盒更换教程_惠普打印机安装步骤 打印机墨盒加墨方法
  10. cor软件免费下载_CDRX4软件免费版
  11. 2020-09-16 multisim14仿真电路数字八路抢答控制器仿真
  12. bt linux wifi,RK3288 添加WiFiBT模块AP6212
  13. 证明N={1,2,...,n,...}有最大元 黄小宁
  14. 深信服 华为路由器 ipsce对接
  15. (下篇)校园小程序前端部署教程-优雅草老八写
  16. 如何引流更精准?如何精准定位客户群体?成功引流方案
  17. 41.Django快速上手
  18. 语音识别数据集及性能评测指标WER
  19. 反射内存网搭建参考文献
  20. 笔记本电脑购买指南与建议-知识点介绍

热门文章

  1. 插值拟合模型 之 Hermite插值、三次样条插值
  2. [JS]回调函数例子
  3. 【keil/MDK5】编译生成bin文件和汇编文件
  4. Spring JDK动态代理详解
  5. 灌浆料的弹性模量计算_防城港市(灌浆料)月度
  6. 【文本识别】CRNN
  7. 计算语言学之拼写纠错
  8. SpringMVC 访问html页面乱码
  9. h5 游戏 游戏框架 Phaser
  10. python应用广泛吗_入门迅速、应用广泛、月薪两万,马哥Python前景为什么这么好?...