HarmonyOS开发:超详细了解项目的工程结构

news2024/11/16 13:43:33

前言

系列文章目录:

HarmonyOS开发第一步,熟知开发工具DevEco Studio

当我们熟练的掌握了DevEco Studio之后,就可以创建项目进行练习了,和市场上大多数IDE一样,DevEco Studio也给我们提供了很多的实例模板,当然了,对于大多数移动端开发者而言,这些模板和我们的UI设计有着很大的出入,一般都会选择一个空的视图作为项目,方便我们从0到1进行开发。

点击下一步,就进入到了项目信息编辑页面,作为一名Android开发者,对这个页面简直不要太熟悉,无非就是项目的名字,包名,SDK版本的选择等等。

有两项是我们需要注意的,第一项,Model的选择,也就是应用模型,目前随着HarmonyOS的发展,提供了两种应用模型,一种是Stage模型,一种是FA模型,目前,官方主推的是Stage模型,我们在创建项目的时候,也是默认的这种模型,它是在,HarmonyOS 3.1 Develper Preview版本开始新增的模型,是目前主推且会长期演进的模型,在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。

关于Stage模型,官方有着很详细的介绍,这里就不多说了。

还有一项需要注意的,Enable  Super Visual选项,也就是是否要启动低代码作为模板,选择之后,你就可以在项目中拖拽实现想要的页面,类似Android Studio中的Xml中的Design选项。

以上的部分只是前言,阐述了项目创建前的一些注意事项,在讲述工程结构之前,我们需要对HarmonyOS的UI开发框架ArkUI做一个简单的了解。

今天的文章内容,大致如下:

1、ArkUI框架的简单阐述

2、Stage模型下的ArkTS工程目录结构

3、与Android项目结构对比

4、相关总结

一、ArkUI框架的简单阐述

为什么要在工程结构之前阐述ArkUI这个UI框架?主要原因只有一个,就是为以后的项目创建做好铺垫,首先我们来搞清楚前因后果。

ArkUI框架,既是方舟开发框架,它是HarmonyOS提供了一套UI开发框架,和Flutter与SwiftUI有着异曲同工的角色,你可以使用Flutter语言开发出Android、iOS等平台的应用,也可以使用SwiftUI开发出iOS端的应用,同理,HarmonyOS端的应用,如何开发呢,可以使用ArkUI。

针对不同目的和技术背景,ArkUI提供了两种开发方式,一种是基于ArkTS的声明式开发方式,这个方式和Flutter与SwiftUI很相似,也就是说,如果你之前了解过Flutter与SwiftUI,那么使用这种方式,再方便不过;还有一种是兼容JS的类Web开发方式,言外之意,这种方式允许你用前端语言,也就是经典的HML、CSS、JavaScript来开发应用。

开发方式名称

语言生态

UI更新方式

适用场景

适用人群

声明式开发范式

ArkTS语言

数据驱动更新

复杂度较大、团队合作度较高的程序

移动系统应用开发人员、系统应用开发人员

类Web开发范式

JS语言

数据驱动更新

界面较为简单的程序应用和卡片

Web前端开发人员

作为移动端应用的开发者,考虑到性能,复杂度高,开发效率和发展趋势而言,声明式开发方式,绝对是我们的首选方式,当然了,官方也是主推这种方式,官方推荐的原因如下:

开发效率:声明式开发范式更接近自然语义的编程方式,开发者可以直观地描述UI,无需关心如何实现UI绘制和渲染,开发高效简洁。

应用性能:如下图所示,两种开发范式的UI后端引擎和语言运行时是共用的,但是相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新链路更为精简,占用内存更少,应用性能更佳。

发展趋势:声明式开发范式后续会作为主推的开发范式持续演进,为开发者提供更丰富、更强大的能力。

所以在以后的项目开发中,第一,基于ArkTS的声明式开发方式,第二,采用Stage模型,原因只有一个,基于性能和未来的发展趋势,如果这个原因还不够,那就拿官方推荐作为原因,绝对好使!

至于ArkTS,后续的文章慢慢讲述吧,一步一步来,循序渐进。

二、Stage模型下的ArkTS工程目录结构

不要被一些名词给唬住了,我们默认创建的就是基于Stage模型下的ArkTS工程目录结构,创建完毕之后,窗口如下:

和AndroidStudio不能说一模一样,但也是十分有九分的雷同,具体的各个功能就不多赘述,我们直接看左侧的目录结构:

我们从上往下一一进行解析:

.hvigor:存储构建配置文件信息。

.idea:存储项目的配置信息。

AppScope:全局的共有资源存放目录。

resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。

  base>element:包括字符串、整型数、颜色、样式等资源的json文件。每个资源均由json格式进行定义
      boolean.json:布尔型
      color.json:颜色
      float.json:浮点型
      intarray.json:整型数组
      integer.json:整型
      pattern.json:样式
      plural.json:复数形式
      strarray.json:字符串数组
      string.json:字符串值

  base>media:多媒体文件,如图形、视频、音频等文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等。

  rawfile
  :用于存储任意格式的原始资源文件。rawfile不会根据设备的状态去匹配不同的资源,需要指定文件路径和文件名进行引用。

app.json5:应用的全局配置信息。

entry:HarmonyOS工程模块,编译构建生成一个HAP包。

src > main > ets:用于存放ArkTS源码。
    entryability:应用/服务的入口。
    pages:应用/服务包含的页面。


src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等,和上面的共享目录是一致的。


src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。


build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。其中targets中可配置当前运行环境,默认为HarmonyOS。


hvigorfile.ts:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。

hvigor:构建配置文件信息,是一款全新基于TS实现的前端构建任务编排工具,结合npm包管理机制,主要提供任务管理机制,任务注册编排、工程模型管理、配置管理等关键能力,更符合ArkTS/JS开发者的开发习惯。

oh_modules:用于存放三方库依赖信息。

.gitignore:git过滤配置。

build-profile.json5:应用级配置信息,包括签名、产品配置等。

hvigorfile.ts:应用级编译构建任务脚本。

hvigorw和hvigorw.bat:ohpm编译构建工具。

local.properties:存储本地属性的文件。

oh-package.json5:依赖配置,可以设置三方包依赖。

可以说,以上的目录结构介绍,全网甚至是官网,也没有这么的详细,为什么要对目录结构过多的进行阐述,目的只有一个,更好的了解项目,可以针对性且快速的进入到开发之中。

三、与Android项目结构对比

或许,第一次直接的查看这样的一个工程目录,确实需要一段时间的了解,才能知道各个文件的作用,为了更加直观明了的让一名Android开发者快速的知道每个文件对应的含义,接下来将会按照Android工程的目录结构和Stage模型下的ArkTS工程目录结构,进行一一对应,希望可以有所帮助,当然了,如果你不是一名Android开发者,这个步骤可以掠过,仔细的查看第二步的介绍即可。

整体的对照

左侧是HarmonyOS项目,右侧是Android项目,具体的对照图如下所示:

主要文件对应

Android文件

HarmonyOS文件

清单文件AndroidManifest.xml

module.json5

Activity/Fragment

entryability下的ts文件

XML布局

pages下的ets文件

res

resources

Module下的build.gradle

Module下的build-profile.json5

gradle

hvigor

根目录下的build.gradle

根目录下的build-profile.json5

colors.xml

dimens.xml

strings.xml

……

color.json:颜色

float.json:浮点型

string.json:字符串值

……

四、相关总结

通过对工程结构的了解,对于我们步入HarmonyOS的开发,有着指引的作用,能够清晰的知道各个文件及文件夹的作用,在哪里书写代码,又是在哪里添加资源,能够有一个直观的定位,特别是,不是从Android开发者转过来的同学,对于工程结构更应该及时的了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0821|C++day1 初步认识C++

一、思维导图 二、知识点回顾 【1】QT软件的使用 1)创建文件 创建文件时,文件的路径一定是全英文 2)修改编码 工具--->选项--->行为--->默认编码:system 【2】C和C的区别 C又叫C plus plus,C是对C的扩充&…

videojs 实现自定义组件(视频画质/清晰度切换) React

前言 最近使用videojs作为视频处理第三方库,用来对接m3u8视频类型。这里总结一下自定义组件遇到的问题及实现,目前看了许多文章也不全,官方文档写的也不是很详细,自己摸索了一段时间陆陆续续完成了,这是实现后的效果.…

几何对象操作(一)

几何对象是构成要素的必要条件 import numpy as npdef getgtypes():return point, linestring, polygon, multipoint, multilinestring, multipolygondef showgeoms(geoms, name"tmp", gtypeNone):# 快速显示一串几何对象,gtype 如果是默认的则根据geoms生成相应的类…

《中国综合算力指数》发布,我国算力规模居全球第二,中创积极响应东数西算政策

算力通俗地说就是计算能力,是数据中心处理数据并输出结果的能力。2023中国算力大会于近期在宁夏银川开幕。工业和信息化部负责人在会上透露,我国算力产业已初具规模。 截至目前,全国在用数据中心机架总规模超过760万标准机架,算力…

【PHP】错误处理

文章目录 错误处理错误分类错误代号错误触发 错误处理 错误处理:指的是系统(或者用户)在对某些代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员。 错误分类 1)语法错误:用户…

IDEA配置JDK8、JDK17中文文档

1.获取对应的chm文件,如 JAVA_API_1.7中文.chm。 2.使用CHMDecoder工具,下载链接 https://download.cnet.com/CHM-Decoder/3000-20412_4-10390773.html 这种也有在线的,转化就行(转化后是一个文件夹) 如果是用的我说的这个工具…

I2C设备驱动挂载

一、 概述: I2C工作原理: I2C总线标准的两根传输线,SDA是数据线,Scl是时钟线,当SCL为高,SDA由高到低时,发送启动信息,发送9个脉冲,1-7是地址,8是读写控制位&a…

GEE/PIE 遥感大数据处理与典型案例

查看原文>>>【399三天】GEE/PIE遥感大数据处理与典型案例实践 随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来…

FPGA GTX全网最细讲解,aurora 8b/10b协议,OV5640摄像头视频传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX 接收接口GTX IP核调用和使用 4、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTX aurora 8b/10b数据对…

深入Java中的观察者模式

观察者模式是软件开发中常用的一种设计模式,它通过定义一对多的依赖关系,使得一个对象(主题)的状态变化可以通知多个其他对象(观察者)。 这种模式的优点是解耦和增加扩展性,用于实现对象之间的…

iptables的使用规则

环境中为了安全要限制swagger的访问,最简单的方式是通过iptables防火墙设置规则限制。 在测试服务器中设置访问swagger-ui.html显示如下,区分大小写: iptables设置限制访问9783端口的swagger字段的请求: iptables -A INPUT -p t…

Spring 容器启动耗时统计

为了了解 Spring 为什么会启动那么久,于是看了看怎么统计一下加载 Bean 的耗时。 极简版 几行代码搞定。 import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;import java.util.HashMap; imp…

【科研】-- 如何将Endnote中参考文献格式插入到Word?

文章目录 如何将Endnote中参考文献格式插入到Word? 如何将Endnote中参考文献格式插入到Word? 1、首先确保Endnote和Word安装正确,正常可以从学校官网中下载到正版软件,下载后在word栏目中会出现EndNote的标签; 2、可…

[CVPR 2023]PyramidFlow-训练并推理-附bug调试

CVPR2023-PyramidFlow-zero shot异常检测网络 代码调试记录 一.论文以及开源代码二.前期代码准备三.环境配置四.bug调试num_samples should be a positive integer value, but got num_samples0AttributeError: Cant pickle local object fix_randseed.<locals>.seed_wor…

C++信息学奥赛1136:密码翻译

#include <iostream> #include <string> using namespace std;int main() {string arr;getline(cin, arr); // 输入字符串&#xff0c;包括空格for (int i 0; i < arr.length(); i) {char a arr[i] 1; // 字符加1if (arr[i] z) {a a; // 如果当前字符是…

springboot 基于JAVA的动漫周边商城的设计与实现64n21

动漫周边商城分为二个模块&#xff0c;分别是管理员功能模块和用户功能模块。管理员功能模块包括&#xff1a;文章资讯、文章类型、动漫活动、动漫商品功能&#xff0c;用户功能模块包括&#xff1a;文章资讯、动漫活动、动漫商品、购物车&#xff0c;传统的管理方式对时间、地…

PyTorch深度学习实战(13)——可视化神经网络中间层输出

PyTorch深度学习实战&#xff08;13&#xff09;——可视化神经网络中间层输出 0. 前言1. 可视化特征学习的结果2. 可视化第一个卷积层的输出3. 可视化不同网络层的特征图小结系列链接 0. 前言 随着深度学习的快速发展&#xff0c;神经网络已成为解决各种复杂任务的重要工具。…

day 38 | ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

518. 零钱兑换 II 这道题就是完全背包问题&#xff0c;因为可以选择的数量是无限的。所以第二层的遍历顺序就是从前往后。 因为是次数问题&#xff0c;递推公式是 的&#xff0c;初值应该设定为dp【0】 1&#xff0c;否则无法进行累加。 func change(amount int, coins []i…

Python编程基础-基本语法II

循环语句 for()语句 可以遍历任何序列的项目&#xff0c;如一个列表、元组或者一个字符串 格式&#xff1a; for 循环索引值 in 序列 循环体 #for循环把字符串中字符遍历出来 for letter in Python:print ( 当前字母 :, letter )#通过索引循环 fruits [banana, apple, m…

百度地图:设置复杂的自定义覆盖物,添加自定义覆盖物ComplexCustomOverlay

// 设置复杂的自定义覆盖物 setComplexCustomOverlay({coordinate,icon 1,label,contentHTML, }) {var mp this.map;let _BMAP this.data.type 3 ? BMapGL : BMap;// 自定义覆盖物----------------------------------------function ComplexCustomOverlay({point,icon,lab…