一:什么是Ability
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability)。HarmonyOS支持应用以Ability为单位进行部署。
Ability分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。其中,FA支持Page Ability模板,以提供与用户交互的能力。一个Page Ability可以含有一个或多个页面(即Page),Page Ability与Page的关系如下图所示:
PA支持Service Ability 和Data Ability
Service模块:用于提供后台运行任务的能力
Data模块:用于对外部提供统一的数据访问抽象
二:目录结构
项目代码下都存在app.json5及module.json5两种配置文件
app.json5主要包含应用的全局配置信息,包含应用的包名,开发商,版本等基本信息
Module.json5主要包含以下内容:Module的基本配置信息,如名称,类型,描述,支持的设备类型等信息
应用组件信息,包含UIAbility组件和ExtensionAbility组件的描述信息
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:ability_desc",
"icon": "$media:icon",
"label": "$string:ability_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
]
}
}
entry-->src-->main-->resources下文件
1,AppScope中存放应用的全局所需的资源文件
2,entry是应用的主模块,存放HarmonyOS应用的代码,资源等
3,oh_modules是工程依赖包,存放工程依赖的源文件
4,build-proflie.json5 是工程级配置信息,包括签名,产品配置等
{
"app": {
"signingConfigs": [],
"compileSdkVersion": 9,
"compatibleSdkVersion": 9,
"products": [
{
"name": "default",
"signingConfig": "default",
}
]
},
"modules": [
{
"name": "entry",
"srcPath": "./entry",
"targets": [
{
"name": "default",
"applyToProducts": [
"default"
]
}
]
}
]
}
5,hvigorfile.ts是工程级编译构建任务脚本。hvigor是基于任务管理机制实现的一款全新的自动化构建工具,主要提供任务注册编排,工程模型管理,配置管理等核心能力
6,oh-package.json5是工程级依赖的配置文件,用于记录引入包的配置信息
{
"name": "myapplication",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
},
"devDependencies": {
"@ohos/hypium": "1.0.6"
}
}
三:entry内的目录结构
1.entry-->src目录中主要包含main文件夹,单元测试目录ohosTest,以及模块级的配置文件
2.build-proflie.json5 是模块级配置信息,包含编译构建的配置项
{
"apiType": 'stageMode',
"buildOption": {
},
"targets": [
{
"name": "default",
"runtimeOS": "HarmonyOS"
},
{
"name": "ohosTest",
}
]
}
3.hvigorfile.ts文件,是模块级构建脚本
4.oh-package.json5是模块级依赖的配置信息文件
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {}
}
四:main文件下的目录结构
1.entryability文件下,存放ability文件,用于当前的ability应用的逻辑和生命周期管理
2.pages存放UI界面相关的代码文件,初始化会生成一个index页面
3.resources文件夹下存放模块的公共的多媒体,字符串及布局文件等资源,分别存放在element,media文件夹中。
4.entry-->src-->main-->module.json5是模块的配置信息,包含当前模块的配置信息
一个模块对应一个打包后的hap包,hap包全称是HarmonyOS Ability Package,其中包含ability,第三方库,资源和配置文件。
五:module.json5文件字段名称
{
"module": {
//该标签标识当前module的名字,module打包成hap后,表示hap的名称,标签值采用字符串表示(最大长度31个字节),该名称在整个应用要唯一
"name": "entry",
//表示模块的类型,类型有三种分别是entry,feature 和har
"type": "entry",
//当前模块的描述信息
"description": "$string:module_desc",
//该标签标识hap的入口ability名称或者extension名称,只有配置mainElement的ability或者extension才允许在服务中心露出
"mainElement": "EntryAbility",
//标签标识hap可以运行在哪些设备上,标签采用字符串数组表示
"deviceTypes": [
"phone",
"tablet"
],
//标识当前module是否在用户主动按照的时候安装,标识该module对应的hap是否跟随应用一起安装,--true:主动安装是安装,--false:主动安装时候不安装
"deliveryWithInstall": true,
//标识当前module是否支持免安装特性,true标识支持免安装特性,false:表示不支持免安装特性
"installationFree": false,
//对应的main_pages.json文件,用于配置ability中用到的page信息
"pages": "$profile:main_pages",
//是一个数组,存放当前模块中所有的ability元能力的配置信息,其中可以有多个ability
"abilities": [
{
//该标签标识当前ability的逻辑名,该名称在整个应用要唯一,标签值采用字符串表示(最大长度127个字节)
"name": "EntryAbility",
//ability的入口路径
"srcEntry": "./ets/entryability/EntryAbility.ts",
//ability的描述信息
"description": "$string:ability_desc",
//ability的图标
"icon": "$media:icon",
//ability的标签名
"label": "$string:ability_label",
//启动页面的图标
"startWindowIcon": "$media:icon",
//启动页面的背景色
"startWindowBackground": "$color:start_window_background",
"exported": true,
//标识能够接收意图的action集合
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
]
}
}
总结:新事物,新思想
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。