工程目录及模板
工程目录
HarmonyOS应用的发布包被称为APP Pack(Application Package)
,它是由一个或多个HAP(Harmony Ability Package)包以及描述APP Pack
属性的pack.info
文件组成。

HAP包又分为两种类型。
Entry
:应用主模块,它既作为应用的入口,又提供了基础功能,类似于Go中main
的作用。Feature
:应用特性模块,可以根据用户需求和设备类型进行定制。
当前版本的DevEco Studio在创建工程后,其项目工程结构的Project视图
如下。

Project视图
AppScope
是DevEco Studio自动生成的,不可更改。ArkTS源码文件以
.ets
结尾,位于entry/src/main/ets
中。AppScope/resources
中存放着应用全局需要用到的资源文件,而entry/src/main/resources
或${MODULE_NAME}/src/main/resources
中则存放着某个局部Module
需要用到的资源文件(Module
指的就是Feature
)。限定词(或限定符)
指的是资源的用途,例如,Mcc&Mnc
是手机号所属的国家代码和网络代码、Locale
指的是语言与地区代码、Orientation
指的是横向布局或纵向布局、Device
指的是设备类型(Phone
、Tablet
、TV
、Car
等)、Color Mode
指的是色彩模式、Density
指的是分辨率。
创建资源文件 限定词
更像枚举类型,而资源则是它的值。所有的资源都是用JSON文件来表示的。例如,根据地区的不同,程序会自动引用
zh_CN
或en_US
中对应的资源,zh_CN
或en_US
就是一种限定词
。也就是说,虽然在resources/base/element/string
中定义了资源,但它自动去找resources/zh_CN/element/string
或resources/en_US/element/string
中对应的内容。
app.json5
:整个应用的基本信息等。每个模块(
Entry
和Feature
)中都有的配置文件。src/module.json5
:具体某个模块的配置信息。src/main/resources/base/profile/main_pages.json5
:页面配置信息,这是开发中会经常用到的配置之一。build-profile.json5
:应用级或Module
级的构建配置文件,包括应用签名、产品配置等。hvigorfile.ts
:应用级或Module
级的编译构建任务脚本,开发者可以自定义工具版本、控制构建行为。oh-package.json5
:应用或Module
用于存放依赖库的信息,包括所依赖的第三方库和共享包。obfuscation-rules.txt
:Module
级的混淆规则文件。开启后,在使用Release
模式进行编译时,会对代码进行编译、混淆及压缩处理,保护代码资产。
为了方便开发,DevEco Studio提供了切换到Ohos视图
的功能。
Ohos视图
会隐藏一些编码中不常用到的文件,并将常用到的文件进行重组展示。

Ohos视图
因为这里只使用ArkTS开发,所以C++工程
、JS工程
就省略了,更详细的可以参考官网指南。
工程模板
当创建一个新的项目时,DevEco Studio会提供下面这些模板以供选择。

Empty Ability
:基本上所有的设备都能使用的模板,附带基础的Hello World
功能。Native C++
:作用同上,但它是为C++准备的。[CloudDev]Empty Ability
:端云一体化开发通用模板,用大白话说,它类似于服务端的云原生应用。[Lite]Empty Ability
:从名称中包含Lite
就知道它是为物联网及可穿戴设备准备的。Flexible Layout Ability
:创建跨设备应用的三层工程结构模板,三层工程结构包含common(公共能力层)
、features(基础特性层)
、products(产品定制层)
。
而创建模块时,DevEco Studio又会多出两种新的模板。

模块模板除了具备Empty Ability
和Native C++
,还有这两个只用于模块的。
Static Library
:HAR(Harmony Archive)静态共享包,在多个项目间共享代码、资源和配置,编译时复用。Shared Library
:HSP(Harmony Shared Package)动态共享包,它和Static Library
的作用一样,但是是在运行时复用。
可以根据实际场景需求,选择相应类型的包进行开发。
规格 | HAP | HAR | HSP |
---|---|---|---|
支持在配置文件中声明UIAbility 组件与ExtensionAbility 组件 | √ | × | × |
支持在配置文件中声明pages 页面 | √ | × | √ |
支持包含资源文件与.so 文件 | √ | √ | √ |
支持依赖其他HAR文件 | √ | √ | √ |
支持依赖其他HSP文件 | √ | √ | √ |
支持在设备上独立安装运行 | √ | × | × |
Ability
HarmonyOS中的Ability
是一种能力的抽象,类似于Android中的Activity
。
HarmonyOS有两种类型的Ability
。
UIAbility是一种包含
UI
的组件,主要用于和用户交互,它并不是和页面一一对应的,而是可以通过多个页面来实现一个功能。ExtensionAbility是基于特定场景的应用组件,例如,
延迟任务
、输入法
等功能。
感谢支持
更多内容,请移步《超级个体》。