3.4 ACE Java项目目录结构
本节介绍鸿蒙ACE Java应用开发的项目目录结构及其作用,以及配置文件的基础配置信息。
3.4.1 项目整体结构
通过DevEco Studio创建一个ACE Java项目后,在Project左边栏中预览项目结构如图3-16所示。
首先有一个entry目录,一个应用是由一个或多个HAP包所组成的,HAP包又可以分为entry类型和feature类型,每个HAP包由代码、资源、第三方库及应用配置文件组成。所以代码中的entry目录其实就是一个应用的HAP包,它是一个entry类型的HAP包。接着我们来看这些资源、代码等分布在entry包的位置。
图3-16 ACE Java项目目录结构
(1)在src/main/java下以包名命名的文件夹内分布着Java代码。这里的代码可以用来创建布局、动态调整布局及为交互提供支撑服务。
(2)和java文件夹同级的resources目录下分布着应用资源,该目录的base目录下,按资源用途又分为多个文件夹资源。
(3)element:表示元素资源,该文件夹下主要存放着json格式的文件,主要用来表示字符串、颜色值、布尔值等,可以在其他地方被引用。
(4)graphic:表示可绘制资源。用xml文件来表示,例如项目中设置的圆角按钮、按钮颜色等都是通过引用这里的资源统一管理的。
(5)layout:表示布局资源,用xml文件来表示,例如页面的布局资源存放在这里。
(6) media:表示媒体资源,包括图片、声频、视频等非文本格式的文件。
除了上述的几类资源,还有其他类型的资源,因为项目暂时还用不到,先不做考虑。
resources目录存储的内容如图3-17所示。
和main目录平级的test目录是测试目录,可以用于对自己写的功能进行单元测试,确保代码的正确性。
和src平级的libs目录用来存储或引用第三方包,例如jar包、so包等。
和entry目录平级的build目录则用来存放最终编译后的包,也就是HAP包,编译后该包的内容如图3-18所示。HAP包中包含了项目中用到的图片、布局、代码和各种资源。
图3-17 resources目录存储的内容截图
图3-18 HAP包
3.4.2 项目的配置文件
每个HAP包下都包含了该HAP包的配置信息,这个配置文件位于entry/src/main/目录下,由工具帮我们生成,并被命名为config.json,HarmonyOS应用配置采用json格式的形式。下面我们来看一下这个配置文件中的内容,并简要介绍配置的作用。该配置文件中,主要有3个模块,如图3-19所示。
图3-19 项目的配置文件
(1) app:表示应用的全局配置信息。同一个应用的不同HAP包的app配置必须保持一致。
(2) deviceConfig:表示应用在具体设备上的配置信息。
(3)module:表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。
配置文件采用json格式,其中的属性不分先后顺序,每个属性只允许出现一次。
下面具体看一下项目中出现的配置项都有哪些,以及它们的作用。
1.app下的属性
app的属性如图3-20所示,包含应用的包名、开发应用的厂商、版本等信息。
图3-20 app属性配置
bundleName:表示应用的包名,用于标识应用的唯一性。通常采用反转的域名。
vendor:表示开发应用的厂商。
version: code表示内部版本号,用于系统管理版本使用,对用户不可见,name表示应用的版本号,用于向用户呈现。
apiVersion:包含3个选项。
(1)compatible:表示应用运行需要的API最低版本。
(2) target:表示应用运行需要的API目标版本。
(3)releaseType:表示应用运行需要的API目标版本的类型,取值为CanaryN、BetaN或者Release,其中,N代表大于零的整数。
Canary:受限发布的版本。
Beta:公开发布的Beta版本。
Release:公开发布的正式版本。
deviceConfig:表示应用在具体设备上的配置信息,这里暂时没有用到。
2.module下的配置
3.设置Ability配置不同的主题
可以为每个Ability配置不同的主题,在abilities数组中的每个ability的配置后面可以添加一个metaData项,在value中可以设置不同的主题。例如添加下图中的主题后,页面就不会显示头部横条了,如图3-21所示。
也可以使用不同的主题,可以选择的部分主题如图3-22所示。
图3-21 为每个Ability配置不同的主题
图3-22 可以选择的部分主题
3.4.3 资源文件的使用方式
应用的资源文件(字符串、图片、声频等)统一存放于resources目录下,便于开发者使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录。
base目录下面可以创建资源组目录,包括element(元素资源)、media(媒体资源,包括图片、声频、视频等非文本格式的文件)、animation(动画资源)、layout、graphic(图形)、profile(表示其他类型文件,以原始文件形式保存)。目录中的资源文件除profile目录中的文件外会被编译成二进制文件,并赋予资源文件ID,可以用ResourceTable引用,如表3-1所示。
表3-1 element(元素资源)详细表
限定词目录需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成,包括语言、文字、国家或地区、横竖屏、设备类型和屏幕密度等6个维度,限定词之间通过下画线“_”或者中画线“-”连接。开发者在创建限定词目录时,需要掌握限定词目录的命名要求及与限定词目录与设备状态的匹配规则。
限定词目录的命名要求如表3-2所示。
表3-2 每类限定词的取值范围
(1)限定词的组合顺序:语言_文字_国家或地区-横竖屏-设备类型-屏幕密度。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称。
(2)限定词的连接方式:语言、文字、国家或地区之间采用下画线“_”连接,除此之外的其他限定词之间均采用中画线“-”连接。例如:zh_Hant_CN、zh_CN-car-ldpi。
(3)限定词的取值范围:每类限定词的取值必须符合表3-2中的条件,否则,将无法匹配目录中的资源文件。
rawfile目录支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态匹配不同的资源。目录中的资源文件会被直接打包进应用,不经过编译,不可以用ResourceTable引用。
资源文件的使用方法如下。
(1)base目录与限定词目录中的资源文件:通过指定资源类型(type)和资源名称(name)来引用。
通过Java引用资源文件:
- 普通资源引用:ResourceTable.type_name;
- 系统资源引用:ohos.global.systemres.ResourceTable.type_name;
- 引用string.json文件中类型为String、名称为app_name的资源;
- 引用color.json文件中类型为Color、名称为red的资源。
示例代码如下:
xml文件引用资源文件:
- 资源文件:$type:name;
- 系统资源:$ohos:type:name;
- 引用string.json文件中类型为String、名称为app_name的资源,示例代码如下:
(2) rawfile目录中的资源文件:通过指定文件路径和文件名称来引用。
在Java文件中,引用一个路径为resources/rawfile/、名称为example.js的资源文件,示例代码如下: