1.5 HarmonyOS项目分析
1.5.1 项目逻辑视图
首先整体了解一下一个HarmonyOS应用软件的整体项目逻辑视图及模块组成,如图1.38所示。
图1.38 项目逻辑视图
HarmonyOS的应用软件,以App(App Pack)的形式发布,每个App由一个或多个HAP(HarmonyOS Ability Package)及pack.info组成。其中,pack.info用于描述每个HAP的属性,主要包括该HAP是否随应用安装(delivery-with-install)、HAP文件名(name)、HAP模块包类型(module-type)、支持该HAP运行的设备类型(device-type)等。
其中,每个HAP模块包由Ability(Ability是应用具备的能力,HarmonyOS应用代码围绕Ability组件展开,第3章会详细讲解)、第三方库(libs)、资源文件(Resources)及应用配置文件(config.json)组成。HAP模块包分为entry和feature两种类型。
(1)entry:应用的主模块。在一个App中,同一设备类型必须有且仅能有一个entry类型的HAP包,可独立安装运行。
(2)feature:应用的动态类型模块。在一个App中,可以包含一个或多个feature类型的HAP包,也可以不包含,但只有包含Ability的HAP包才能独立运行。
1.5.2 项目结构与文件
现在来看一下之前创建的Hello World项目,项目结构如图1.39所示。这里逐一介绍每个文件的内容。
图1.39 项目结构
1).gradle和idea
这两个文件是由DevEco Studio自动生成的配置文件,一般情况下不需要进行修改。
2)build
build文件夹中包含了一些在编译时自动生成的文件,一般也不需要进行修改。
3)entry
entry是默认启动模块,是项目中的主模块,随后开发中的源码文件和资源文件均在entry中。
4)gradle
目录下包含了gradle wrapper的配置文件。
5).gitignore
该文件用来将指定的目录或文件排除在版本控制之外。
6)build.gradle
项目全局的gradle构建脚本。
7)gradle.properties
项目全局的gradle配置文件,其中配置的属性会影响项目中所有的gradle编译脚本。
8)gradlew和gradlew.bat
这两个文件用来在命令行界面中执行gradle命令,其中,gradlew用于Linux或Mac系统,gradlew.bat用于Windows系统。
9)local.properties
文件用于指定本机中的SDK路径,通常自动生成而无须修改。若更改了本机中的SDK路径,则应对该文件中的路径进行修改。
10)MyApplication.iml
.iml文件是由DevEco Studio自动生成的文件,用来标识这是一个DevEco Studio项目,无须进行修改。
11)settings.gradle
该文件用来表示项目中所有引入的模块。通常在项目中新建一个模块之后,settings.gradle会自动引入该模块。
以上是整个项目的外层目录结构,其中绝大多数为自动生成的文件。entry目录为整个项目的重点,在这里进行主要的应用开发。下面展开entry进行进一步分析。
这里先介绍Java工程下的entry目录结构,如图1.40所示。
图1.40 Java工程下的entry目录结构
1)build
与外层的build文件相似,包含一些在编译时自动生成的文件,一般不需要修改。
2)libs
存放entry模块下的第三方依赖文件。
3)src→main→java
开发者用于编写Java源码文件的存放目录。
4)src→main→resources
开发者用于存放开发资源文件的目录,包括图片、音视频等资源文件。
5)src→main→config.json
应用配置文件。用于声明应用的Ability信息,以及应用所需的权限等信息。
6)src→test
开发者用于编写测试文件的目录。
7).gitignore
用于将entry模块内的指定目录或文件排除在版本控制之外,其作用和外层的.gitignore文件基本一致。
8)build.gradle
entry模块的gradle构建脚本,指定与项目构建相关的配置信息。
9)entry.iml
DevEco Studio自动生成的文件,无须进行修改。
这是Java项目的目录结构,这里也可以创建JS项目,以此来学习JS项目的目录结构。如选择TV设备下的Empty Feature Ability(JS),创建完成后,在项目的目录结构中,除了包括Java项目文件外,还多了JS文件夹及相应文件,如图1.41所示。
图1.41 JS项目目录结构
1)js→default→i18n
i18n是英文单词internationalization的缩写,是“国际化”的简称。i18n文件夹用于存放配置不同语言场景的资源,例如应用文本词条、图片路径等资源。
2)js→default→pages
pages文件夹用于存放多个页面的开发文件,例如图中一个index表示一个页面,每个页面由HML、CSS和JS文件组成。
(1)index.hml: HML模板文件,用来描述当前页面的布局结构,类似于网页中的HTML文件。
(2)index.css: CSS样式文件,用于描述页面样式。
(3)index.js: JS文件,用于处理页面和用户的交互。