2.2.4 工程管理
1.工程结构介绍
(1)HarmonyOS App工程结构
在进行HarmonyOS应用开发前,你应该掌握HarmonyOS应用的逻辑结构(见图2-42)。
图2-42 HarmonyOS App工程结构
HarmonyOS应用以App Pack的形式发布,它是由一个或多个HAP以及描述App Pack属性的pack.info文件组成。
一个HAP在工程目录中对应一个Module,它由代码、资源、第三方库及应用配置文件组成,可以分为Entry和Feature两种类型。
HAP是Ability的部署包。HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(元程序)和PA(元服务)。
(2)工程目录结构
Java工程目录结构如图2-43所示。
图2-43 Java工程目录结构
以下是该目录结构中部分目录和文件的说明:
□.gradle:Gradle配置文件,由系统自动生成,一般情况下不需要进行修改。
□entry:默认启动模块(主模块),开发者用于编写源码文件以及开发资源文件的目录。
□entry>libs:用于存放entry模块的依赖文件。
□entry>src>main>Java:用于存放Java源码。
□entry>src>main>resources:用于存放应用所用到的资源文件,如图形、多媒体、字符串、布局文件等(见图2-44)。关于资源文件的详细说明,请参考资源文件的分类(见2.2.3节)。
图2-44 资源文件说明
□entry>src>main>config.json:HAP清单文件,详细说明请参考config.json配置文件的介绍。
□entry>src>test:编写代码单元测试代码的目录,运行在本地Java虚拟机(JVM)上。
□entry>.gitignore:标识Git版本管理需要忽略的文件。
□entry>build.gradle:entry模块的编译配置文件。
JS工程目录结构如图2-45所示。
图2-45 JS工程目录结构
以下是该目录结构中部分目录和文件的说明:
□common:可选,用于存放公共资源文件,如媒体资源、自定义组件和JS文档等。
□i18n:可选,用于存放多语言的json文件,可以在该目录下定义应用在不同语言系统下显示的内容,如应用文本词条、图片路径等。
□pages:pages文件夹下可以包含1个或多个页面,每个页面都需要创建一个文件夹(如图2-45中的index)。页面文件夹下主要包含3种文件类型,即css、js和hml文件。
□pages>index>index.hml文件:hml文件定义了页面的布局结构、使用到的组件,以及这些组件的层级关系。
□pages>index>index.css文件:css文件定义了页面的样式与布局,包含样式选择器和各种样式属性等。
□pages>index>index.js文件:js文件描述了页面的行为逻辑,此文件里定义了页面里所用到的所有逻辑关系,比如数据、事件等。
□resources:可选,用于存放资源配置文件,比如全局样式、多分辨率加载等配置文件。
□app.js:全局的JavaScript逻辑文件和应用的生命周期管理。
2.适配历史工程
由于最新版本的HarmonyOS SDK对应的API版本发生了跃迁,原有的API Version 3变成了API Version 4,原有的API Version 4变成了当前的API Version 5。因此,使用最新版本的DevEco Studio打开历史工程,需要对历史工程进行适配;如果历史工程未做适配,则会导致工程出现运行错误。
在打开历史工程前,建议先点击Help>Check for Updates,检查并升级DevEco Studio至最新版本;点击Tools>SDK Manager,检查并升级SDK及工具链版本至最新版本。
使用DevEco Studio打开历史工程,会提示将历史工程进行升级适配。点击Update,工具会自动修改工程中的配置信息,包括:
□升级config.json和build.gradle中的API Version。
□升级编译构建插件版本为2.4.2.4。
□升级config.json中的releaseType字段的值为Beta1。
□在build.gradle中添加OHOS测试框架的依赖。
工程升级前后的config.json关键字段对比如图2-46所示。
图2-46 工程升级前后的config.json关键字段对比
3.在工程中管理模块
模块(Module)是HarmonyOS应用的基本功能单元,包含了源代码、资源文件、第三方库及应用配置文件,每一个模块都可以独立编译和运行。一个HarmonyOS应用通常会包含一个或多个模块,因此,可以在工程中创建多个模块,每个模块分为Ability和Library(HarmonyOS Library和Java Library)两种类型。
从前面关于HarmonyOS工程的介绍可知,在一个App中,对于同一类型设备有且只有一个Entry模块,其余模块的类型均为Feature。因此,在创建一个类型为Ability的模块时,遵循如下原则:
□若新增模块的设备类型为“已有设备”,则模块的类型将自动设置为Feature。
□若新增模块的设备类型为“当前还没有创建模块”,则模块的类型将自动设置为Entry。
(1)新增模块
通过如下两种方法,在工程中添加新的模块。
方法1:鼠标移到工程目录顶部,点击鼠标右键,选择New>Module,开始创建新的模块。
方法2:在菜单栏选择File>New>Module,开始创建新的模块。
在New Project Module界面中,选择模块对应的设备类型和模板(见图2-47)。
图2-47 在工程中添加新的模块(1)
点击Next,在模块配置页面设置新增模块的基本信息(见图2-48)。
模块类型为Ability或者HarmonyOS Library时,请根据如下内容进行设置,然后点击Next(见图2-48)。
□Application/Library name:新增模块所属的类名称。
□Module Name:新增模块的名称。
□Module Type:仅模块类型为Ability时存在,工具自动根据设备类型下的模块进行设置,设置规则请参考Ability的模块类型设置原则。
□Package Name:软件包名称,可以点击Edit修改默认包名称,须全局唯一。
□Compatible SDK:兼容的SDK版本。
图2-48 在工程中添加新的模块(2)
模块类型为Java Library时,请根据如下内容进行设置,然后点击Finish完成创建(见图2-49)。
图2-49 在工程中添加新的模块(3)
□Library name:Java Library类名称。
□Java package name:软件包名称,可以点击Edit修改默认包名称,须全局唯一。
□Java class name:Java类文件名称。
□Create .gitignore file:是否自动创建.gitignore文件,勾选表示创建。
设置新增Ability的Page Name。若该模块的类型为Ability,则还需要设置Visible参数,表示该Ability是否可以被其他应用所调用。
□勾选(true):可以被其他应用调用。
□不勾选(false):不能被其他应用调用。
点击Finish,等待创建完成后,可以在工程目录中查看和编辑新增的模块。
(2)删除模块
为防止开发者在删除模块的过程中,误将其他模块删除,DevEco Studio提供统一的模块管理功能,需要先在模块管理中移除对应的模块后,才允许删除。
在菜单栏中选择File>Project Structure>Modules,选择需要删除的模块,点击减号按钮,然后在弹出的对话框中点击Yes,如图2-50所示。
图2-50 删除模块
然后,在工程目录中选中该模块,点击鼠标右键,选中Delete,并在弹出的对话框中点击Delete。