鸿蒙应用代码结构分析

36 阅读3分钟

对于一个鸿蒙应用,其代码结构即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,  // 标识当前应用自身可创建的子进程的最大个数,取值范围为05120表示不限制,当应用有多个模块时,以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)等。