HarmonyOS应用的目录结构 原创
- 应用中的几种常见类型的文件:
1)Ability
Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。
2)库文件
库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。
3)资源文件
应用的资源文件(字符串、图片、音频等)存放于resources目录下,便于开发者使用和维护,详见资源文件的分类。
4)配置文件
配置文件 (config.json) 是应用的Ability信息,用于声明应用的Ability,以及应用所需权限等信息,详见应用配置文件。
5)pack.info
描述应用软件包中每个HAP的属性,由IDE编译生成,应用市场根据该文件进行拆包和HAP的分类存储。HAP的具体属性包括:delivery-with-install: 表示该HAP是否支持随应用安装。“true”表示支持随应用安装;“false”表示不支持随应用安装。
name:HAP文件名。
module-type:模块类型,entry或feature。
device-type:表示支持该HAP运行的设备类型。
6)HAR
HAR(HarmonyOS Ability Resources)可以提供构建应用所需的所有内容,包括源代码、资源文件和config.json文件。HAR不同于HAP,HAR不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
- HarmonyOS应用的目录结构
HarmonyOS应用发布形态为APP Pack(Application Package,简称APP),它是由一个或多个HAP(HarmonyOS Ability Package)包以及描述每个HAP(Ability的部署包)属性的pack.info文件组成。Hap包又可以分为entry类型和feature类型,每个Hap包由:代码、资源、第三方库及应用配置文件组成。所以我们代码中的entry目录其实就是一个应用的Hap包,它是entry类型的Hap包。接下来我们来了解下这些资源。
entry:应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。
feature:应用的动态特性模块。一个APP可以包含0个、一个或多个feature类型的HAP。只有包含Ability的HAP才能够独立运行。
HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开,它是由一个或多个Ability组成。HarmonyOS应用的逻辑结构如图1所示。
图1 HarmonyOS应用逻辑结构图
一个典型的HarmonyOS应用的具体目录结构如图2所示,主要包括entry、gradle目录等,其中的build目录是应用编译构建成功后自动生成的目录。
setting.gradle文件用于指定应用包含哪些entry或feature模块。
build.gradle文件是应用的环境配置文件,如指定编译应用程序使用的sdk版本,依赖外部maven库等。
gradle目录是gradle的配置文件,由系统自动生成,一般情况下不需要进行修改。其中gradle>wrapper> gradle-wrapper.properties文件一般用于指定应用使用的gradle版本。
build目录是在编译构建过程中生成的,该目录中主要包含该entry编译生成的hap包及其对应的描述文件pack.info,以及用于索引所有资源文件的ResourceTable文件(如图3所示)。特别注意的是:所有资源如包括控件名称、字符串常量、动画资源、长度资源、布局资源、图片、音视频资源等都将在ResourceTable文件中生成唯一的静态整型索引常量。通过这个索引可以访问到具体的资源,如Java代码中得到名称为ability_main.xml布局文件的方法:ResourceTable.Layout_ability_main。
entry是该应用的主模块,其目录下包含build、libs、src目录和一个主要的build.gradle文件。entry中各目录及文件含义如下:
1)entry>libs目录下用于存放第三方的jar包,是该entry模块对第三方类库的存放目录。
2)entry>src目录是该entry模块的所有源程序目录,我们重点关注该目录中的main目录和config.json文件。
main目录下包含java和resources目录。
entry>src>main>java包括应用中所有的java文件,以包的形式进行组织。一个可视化的Ability(FA)的呈现包含的3个文件,其中的Slice和Ability都在main目录下。该目录下还可以添加其他业务逻辑处理的java类文件,如实现网络操作、数据库操作等业务类,用户自定义的工具类等。需要注意的是,实现一个可视化的Ability,Slice并不是必须的。
entry>src>main>resources目录是所有资源文件所在的目录。resources目录包括两大类目录,一类是base目录与限定词目录,目录中的资源文件会被编译成二进制文件,并赋予资源文件ID(能被ResourceTable索引,通过指定资源类型(type)和资源名称(name)来引用)。另一类是rawfile目录,目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID(不能被ResourceTable索引,通过指定文件路径和文件名来引用)。
其中最重要的是base目录(如图5所示),其目录内容如下:
resources>base>element:表示字符串、整型数、颜色、样式等常量资源,采用相应的JSON文件来表示,可以在其他地方被引用。默认只包含一个string.json文件,程序员可根据自己的需要添加其他类型的文件(如图6所示),但文件名称建议和如下文件名称一致:
strings.json:字符串值资源(默认包含)
boolean.json:布尔型资源
color.json:颜色资源
float.json:浮点型资源
intarray.json:整型数组资源
integer.json:整型资源
pattern.json:样式资源
plural.json:复数形式资源
strarray.json:字符串数组资源
resources>base>graphic:表示可绘制资源,如SVG(Scalable Vector Graphics)可缩放矢量图形文件、Shape基本的几何图形(如矩形、圆形、线等)等。用xml文件来表示,比如我们项目中设置的圆角按钮、按钮颜色等都是通过引用这里的资源来统一管理的;
base>graphic:xml类型的可绘制资源,
resources>base>layout:表示布局资源,用xml文件来表示;
resources>base>media:表示媒体资源,包括图片、音频、视频等非文本格式的文件,支持的文件格式包括:.png、.gif、.mp3、.mp4等;
图2 HarmonyOS应用目录结构图
图3
图4 entry模块图
图5
图6
resources>限定词目录:en_…,如en_element、zh_element、en_GB-vertical-car-mdpi等。限定词目录需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成,可以包含移动国家码和移动网络码、语言、文字、横竖屏、设备类型、颜色模式等限定词。对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参与“en_US”设备的资源匹配。
resources>rawfile/profile目录:用于存储任意格式的原始资源文件。允许程序员创建多层子目录,目录名称可以自定义,目录下也可以自由放置各类资源文件。该目录的文件不会根据设备状态去匹配不同的资源。
entry>src>main>config.json文件是entry(或feature)的配置文件,由“app”、“deviceConfig”和“module”三个部分组成,缺一不可。其中“app” 表示应用的全局配置信息,同一个应用的不同HAP包的“app”配置必须保持一致;“deviceConfig”表示应用在具体设备上的配置信息;“module”表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。
3)entry>build.gradle:entry模块的编译配置文件,包括entry使用的SDK版本、所依赖的资源(如maven库、Jar类库等)。
4)entry>src>test:编写代码单元测试代码的目录,运行在本地Java虚拟机(JVM)上。
5)entry>.gitignore:标识git版本管理需要忽略的文件。
很细致