对于一个鸿蒙应用,其代码结构即ArkTS工程目录结构(Stage模型)如下所示。
MyApplication
├─ .hvigor
├─ AppScope
│ ├─ resources
│ └─ app.json5
├─ entry
│ ├─ src
│ │ ├─ main
│ │ │ ├─ ets
│ │ │ │ ├─ entryability
│ │ │ │ ├─ entrybackupability
│ │ │ │ └─ pages
│ │ │ ├─ resources
│ │ │ └─ module.json5
│ │ ├─ mock
│ │ ├─ ohosTest
│ │ └─ test
│ ├─ .gitignore
│ ├─ build-profile.json5
│ ├─ hvigorfile.ts
│ ├─ obfuscation-rules.txt
│ └─ oh-package.json5
├─ hvigor
├─ oh_modules
├─ .gitignore
├─ build-profile.json5
├─ code-linter.json5
├─ hvigorfile.ts
├─ local.properties
├─ oh-package.json5
└─ oh-package-lock.json5
对上面的代码结构分析如下:
1, AppScope > app.json5:应用的全局配置信息。 app.json5配置文件整体概貌如下:
{
"app": {
"bundleName": "com.application.myapplication", // 标识应用的Bundle名称,用于标识应用的唯一性。
"vendor": "example",
"versionCode": 1000000,
"versionName": "1.0.0",
"icon": "$media:layered_image",
"label": "$string:app_name",
"description": "$string:description_application",
"minAPIVersion": 9,
"targetAPIVersion": 9,
"debug": false,
"car": {
"minAPIVersion": 8
},
"targetBundleName": "com.application.test", // 标识当前包所指定的目标应用, 标签值的取值规则和范围与bundleName标签一致。配置该标签的应用为具有overlay特征的应用。
"targetPriority": 50,
"appEnvironments": [
{
"name":"name1",
"value": "value1"
}
],
"maxChildProcess": 5, // 标识当前应用自身可创建的子进程的最大个数,取值范围为0到512,0表示不限制,当应用有多个模块时,以entry模块的配置为准。
"multiAppMode": {
"multiAppModeType": "multiInstance",
"maxCount": 5
},
"hwasanEnabled": false, // 标识应用程序是否开启HWAsan检测。HWAsan(HardWare-assisted AddressSanitizer)是利用Top-Byte-Ignore特性实现的增强版Asan,与Asan相比HWAsan的内存开销更低,检测到的内存错误范围更大。
"ubsanEnabled": false, // 标识应用程序是否开启UBsan检测。UBsan(Undefined Behavior Sanitizer)是一个用于运行时检测程序中未定义行为的工具,旨在帮助开发人员发现代码中潜在的错误和漏洞。
"cloudFileSyncEnabled": false, // 标识当前应用是否启用端云文件同步能力。
"cloudStructuredDataSyncEnabled": false, // 标识当前应用是否启用端云结构化数据同步能力。
"configuration": "$profile:configuration", // 标识当前应用字体大小跟随系统配置的能力。该标签是一个profile文件资源,用于指定描述应用字体大小跟随系统变更的配置文件。在开发视图的AppScope/resources/base/profile下面定义配置文件configuration.json,其中文件名"configuration"可自定义,需要和configuration标签指定的文件资源对应。
/* configuration标签示例:
{
"configuration": {
"fontSizeScale": "followSystem", // 缺省值为nonFollowSystem。
"fontSizeMaxScale": "3.2" // fontSizeScale为nonFollowSystem时,该项不生效。
}
}*/
"assetAccessGroups": [
"com.ohos.photos",
"com.ohos.screenshot",
"com.ohos.note"
],
"startMode": "mainTask" // 配置应用的启动模式,支持的取值如下:- mainTask:主任务模式,表示图标启动后打开主UIAbility。- recentTask:最近任务模式,表示图标启动后打开最近使用的UIAbility。仅在launchType为单实例模式时生效。
}
}
2, entry:HarmonyOS工程模块,编译构建生成一个HAP包。
HAP:Harmony Ability Package,一个HAP文件包含应用的所有内容,由代码、资源、三方库及应用配置文件组成,其文件后缀名为.hap。
HAR:Harmony Archive,静态共享包,编译态复用。可以包含代码、C++库、资源和配置文件,其文件后缀名为.har,用于实现代码和资源的共享。
HSP:Harmony Shared Package,动态共享包,运行时复用。可以包含代码、C++库、资源和配置文件,其文件后缀名为.hsp,用于实现代码和资源的共享。
3, src > main > ets:用于存放ArkTS源码。
src > main > ets > entryability:应用/服务的入口。
src > main > ets > entrybackupability:应用提供扩展的备份恢复能力。
src > main > ets > pages:应用/服务包含的页面。
src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。关于资源文件,详见资源分类与访问。
src > main > module.json5:模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。
4, build-profile.json5:当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。
5, hvigorfile.ts:模块级编译构建任务脚本。
6, obfuscation-rules.txt:混淆规则文件。混淆开启后,在使用Release模式进行编译时,会对代码进行编译、混淆及压缩处理,保护代码资产。
7, oh-package.json5:用来描述包名、版本、入口文件(类型声明文件)和依赖项等信息。
8, oh_modules:用于存放三方库依赖信息。
9, build-profile.json5:工程级配置信息,包括签名signingConfigs、产品配置products等。其中products中可配置当前运行环境,默认为HarmonyOS。
10, hvigorfile.ts:工程级编译构建任务脚本。
11, oh-package.json5:主要用来描述全局配置,如:依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置(parameterFile)等。