From a9916d7be8844e9b52b620249a2a6c99fa52b484 Mon Sep 17 00:00:00 2001 From: wangzhen Date: Tue, 15 Sep 2020 12:11:56 +0800 Subject: [PATCH] Description: update application fwk readme Bug: fix Test: NA --- docs-en/readme/application-framework.md | 157 ++++++++++-------- .../figures/en-us_image_0000001054941316.png | Bin 0 -> 21913 bytes .../figures/en-us_image_0000001055267336.png | Bin 0 -> 5510 bytes .../figures/zh-cn_image_0000001055267336.png | Bin 0 -> 5510 bytes ...\255\220\347\263\273\347\273\237README.md" | 151 +++++++++-------- 5 files changed, 169 insertions(+), 139 deletions(-) create mode 100644 docs-en/readme/figures/en-us_image_0000001054941316.png create mode 100644 docs-en/readme/figures/en-us_image_0000001055267336.png create mode 100644 readme/figures/zh-cn_image_0000001055267336.png diff --git a/docs-en/readme/application-framework.md b/docs-en/readme/application-framework.md index 13bcf46ac3..4be9275975 100755 --- a/docs-en/readme/application-framework.md +++ b/docs-en/readme/application-framework.md @@ -7,9 +7,9 @@ The application framework of OpenHarmony consists of two modules: **ability man **1. Ability management framework**: This framework is provided by OpenHarmony for you to develop OpenHarmony applications. The following figure shows the modules in the ability management framework. **Figure 1** Architecture of the Ability management framework -![](figures/architecture-of-the-ability-management-framework.png "architecture-of-the-ability-management-framework") +![](figures/en-us_image_0000001054941316.png) -- **AbilityKit** is a development kit provided by the ability management framework. You can use this kit to develop applications based on the **Ability** component. There are two types of applications developed based on the **Ability** component: **JS Ability** developed using the JavaScript language and **Native Ability** developed using the C/C++ language. The **ACE** framework encapsulates JavaScript UI components on the basis of the AbilityKit and is used to help you quickly develop JS Ability-based applications. +- **AbilityKit** is a development kit provided by the ability management framework. You can use this kit to develop applications based on the **Ability** component. There are two types of applications developed based on the **Ability** component: **JS Ability** developed using the JavaScript language and **Native Ability** developed using the C/C++ language. The **JS application development framework** encapsulates JavaScript UI components on the basis of the AbilityKit and is used to help you quickly develop JS Ability-based applications. - **Ability** is the minimum unit for the system to schedule applications. It is a component that can implement an independent functionality. An application can contain one or more **Ability** instances. There are two types of templates that you can use to create an **Ability** instance: Page and Service. - An **Ability using the Page template** \(Page ability for short\) provides a UI for interacting with users. - An **Ability using the Service template** does not have a UI and is used for running background tasks. @@ -80,7 +80,7 @@ The following table describes the source code directory structure of the applica

foundation/aafwk/frameworks/ability_lite

-

Core code of the ability management framework

+

Core code for AbilityKit

foundation/aafwk/frameworks/abilitymgr_lite

@@ -95,12 +95,12 @@ The following table describes the source code directory structure of the applica

foundation/aafwk/interfaces/kits/abilitykit_lite

-

External APIs of the ability management framework

+

APIs provided by AbilityKit for developers

foundation/aafwk/interfaces/innerkits/abilitymgr_lite

-

APIs provided by the Ability Manager Service to other subsystems

+

APIs provided by the Ability Manager Service for other subsystems

foundation/aafwk/interfaces/kits/want_lite

@@ -115,12 +115,12 @@ The following table describes the source code directory structure of the applica

foundation/appexecfwk/interfaces/kits/bundle_lite

-

External bundle management APIs provided by the bundle management framework

+

APIs provided by BundleKit for developers

foundation/appexecfwk/interfaces/innerkits/bundlemgr_lite

-

APIs provided by the Bundle Manager Service to other subsystems

+

Core code for AbilityKit and APIs provided by the Bundle Manager Service for other subsystems

foundation/appexecfwk/frameworks/bundle_lite

@@ -147,13 +147,13 @@ The following table describes the source code directory structure of the applica - C++11 or later - The specifications of the application framework vary depending on the System-on-a-Chip \(SoC\) and underlying OS capabilities. - - Cortex-M RAM and ROM: + - Cortex-M RAM and ROM - RAM: greater than 20 KB \(recommended\) - - ROM: greater than 300 KB \(for the ACE framework and related subsystems, such as UIKit and engine\) + - ROM: greater than 300 KB \(for the JS application development framework and related subsystems, such as UIKit and engine\) - Cortex-A RAM and ROM - RAM: greater than 2 MB \(recommended\) - - ROM: greater than 2 MB \(for the ACE framework and related subsystems, such as UIKit and engine\) + - ROM: greater than 2 MB \(for the JS application development framework and related subsystems, such as UIKit and engine\) @@ -231,7 +231,7 @@ The following table describes the source code directory structure of the applica - After the preceding configurations are complete, run the following command to compile the entire system: ``` -python build.py ipcamera -p hi3516dv300_liteos_a -b debug +python build.py ipcamera_hi3516dv300 -b debug ``` ## Running the Two Services in the Application Framework @@ -253,78 +253,93 @@ deps = [ ## Running an Ability Developed Based on AbilityKit -- The demo code of the ability developed based on AbilityKit is stored in the **foundation/aafwk/frameworks/kits/ability\_lite/test** directory. If you need to modify the functionality, modify the code in the **unittest** file or add a code file, and update the configuration in **BUILD.gn** accordingly. -- Run the following command in the shell to compile the demo. After the compilation is successful, the **libLauncher.so** file is generated in **out/ipcamera\_hi3516dv300\_liteos\_a**. +- The demo code of the ability developed based on AbilityKit is stored in the **foundation/aafwk/frameworks/ability\_lite/example** directory. If you need to modify the functionality, modify the code in the **entry/src/main/cpp** files or add a new code file, and update the configuration in **BUILD.gn** accordingly. +- Add the configuration for the ability demo for compilation in the **build/lite/config/subsystem/aafwk/BUILD.gn** file. ``` - python build.py ipcamera -p hi3516dv300_liteos_a -T //foundation/aafwk/frameworks/kits/ability_lite/test:Launcher + import("//build/lite/config/subsystem/lite_subsystem.gni") + + lite_subsystem("aafwk") { + subsystem_components = [ + "......", + "//foundation/aafwk/frameworks/ability_lite/example:hiability", + "......", + ] + } ``` -- Modify the **config.json** file. The example content is as follows: +- Run the following command in the shell to compile the demo. After the compilation is successful, the **libhiability.so** file is generated in **out/ipcamera\_hi3516dv300\_liteos\_a/dev\_tools/example**. -``` -{ - "app": { - "bundleName": "com.huawei.launcher", - "vendor": "huawei", - "version": { - "code": 1, - "name": "1.0" - }, - "apiVersion": { - "compatible": 3, - "target": 3 - } - }, - "deviceConfig": { - "default": { - "keepAlive": false - }, - }, - "module": { - "deviceType": [ - "smartVision" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "Launcher", - "moduleType": "entry" - }, - "abilities": [{ - "name": "MainAbility", - "icon": "assets/entry/resources/base/media/icon.png", - "label": "test app 1", - "launchType": "standard", - "type": "page", - "visible": true + ``` + python build.py ipcamera_hi3516dv300 -b debug + ``` + +- Compile the **config.json** file. For details, see the **config.json** file in the **foundation/aafwk/frameworks/ability\_lite/example** directory. The file content is as follows: + + ``` + { + "app": { + "bundleName": "com.huawei.hiability", + "vendor": "huawei", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 3, + "target": 3 + } }, - { - "name": "SecondAbility", - "icon": "assets/entry/resources/base/media/icon.png", - "label": "test app 2", - "launchType": "standard", - "type": "page", - "visible": true + "deviceConfig": { + "default": { + "keepAlive": false + }, }, - { - "name": "ServiceAbility", - "icon": "", - "label": "test app 2", - "launchType": "standard", - "type": "service", - "visible": true + "module": { + "deviceType": [ + "smartVision" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "hiability", + "moduleType": "entry" + }, + "abilities": [{ + "name": "MainAbility", + "icon": "assets/entry/resources/base/media/icon.png", + "label": "test app 1", + "launchType": "standard", + "type": "page", + "visible": true + }, + { + "name": "SecondAbility", + "icon": "", + "label": "test app 2", + "launchType": "standard", + "type": "page", + "visible": true + }, + { + "name": "ServiceAbility", + "icon": "", + "label": "test app 2", + "launchType": "standard", + "type": "service", + "visible": true + } + ] } - ] } -} -``` + ``` + - Generate a HAP. - Add resource files to the **assets/entry/resources/base/media** directory based on the following directory structure. - ![](figures/en-us_image_0000001055712348.png) + ![](figures/en-us_image_0000001055267336.png) - - Compress the preceding files into a ZIP package and change the file name extension to **.hap**, for example, **Launcher.hap**. + - Compress the preceding files into a ZIP package and change the file name extension to **.hap**, for example, **hiability.hap**. - Install the HAP. @@ -332,13 +347,13 @@ deps = [ - Run the following command to install the HAP: ``` - ./bin/bm install -p /nfs/hap/Launcher.hap + ./bin/bm install -p /nfs/hap/hiability.hap ``` - After the installation is complete, run the following command to run the demo: ``` -./bin/aa start -p com.huawei.launcher -n MainAbility +./bin/aa start -p com.huawei.hiability -n MainAbility ``` ## Repositories Involved diff --git a/docs-en/readme/figures/en-us_image_0000001054941316.png b/docs-en/readme/figures/en-us_image_0000001054941316.png new file mode 100644 index 0000000000000000000000000000000000000000..5c36589713f0264b5d3f87e3af9b63b05dda17d7 GIT binary patch literal 21913 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 literal 0 HcmV?d00001 diff --git a/readme/figures/zh-cn_image_0000001055267336.png b/readme/figures/zh-cn_image_0000001055267336.png new file mode 100644 index 0000000000000000000000000000000000000000..c329d1d02d83435acfa6dbf1629f5649541f3b42 GIT binary patch literal 5510 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 literal 0 HcmV?d00001 diff --git "a/readme/\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237README.md" "b/readme/\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237README.md" index 68d4940745..f0df35c2c0 100644 --- "a/readme/\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237README.md" +++ "b/readme/\347\224\250\346\210\267\347\250\213\345\272\217\346\241\206\346\236\266\345\255\220\347\263\273\347\273\237README.md" @@ -13,7 +13,7 @@ - **AbilityKit**是Ability框架提供给开发者的开发包,开发者基于该开发包可以开发出基于Ability组件的应用。基于Ability组件开发的应用有两种类型:基于Javascript语言开发的Ability(**JS Ability**)和基于C/C++语言开发的Ability(**Native Ability**)。**JS应用开发框架**是开发者开发JS Ability所用到框架,是在AbilityKit基础封装的包含js UI组件的一套方便开发者能够迅速开发Ability应用的框架。 - **Ability**是系统调度应用的最小单元,是能够完成一个独立功能的组件,一个应用可以包含一个或多个Ability。Ability分为两种类型:Page类型的Ability和Service类型的Ability - - **Page类型的Ability**:带有界面,为用户提供人机交互的能力。 + - **Page类型的Ability:**带有界面,为用户提供人机交互的能力。 - **Service类型的Ability**:不带界面,为用户提供后台任务机制。 - **AbilitySlice**是单个页面及其控制逻辑的总和,是Page类型Ability特有的组件,一个Page类型的Ability可以包含多个AbilitySlice,此时,这些页面提供的业务能力应当是高度相关的。Page类型的Ability和AbilitySlice的关系如下图2所示: @@ -31,7 +31,7 @@ - **UNINITIALIZED**:未初始状态,为临时状态,Ability被创建后会由UNINITIALIZED状态进入INITIAL状态; - - **INITIAL**:初始化状态,也表示停止状态,表示当前Ability未运行,调用Start后进入INACTIVE,同时回调开发者的OnSatrt生命周期回调; + - **INITIAL**:初始化状态,也表示停止状态,表示当前Ability未运行,调用Start后进入INACTIVE,同时回调开发者的OnStart生命周期回调; - **INACTIVE**:未激活状态,表示当前窗口已显示但是无焦点状态,由于Window暂未支持焦点的概念,当前状态与ACTIVE一致。 @@ -42,16 +42,16 @@ - **AbilityLoader**负责注册和加载开发者Ability的模块。开发者开发的Ability先要调用AbilityLoader的注册接口注册到框架中,接着Ability启动时会被实例化。 - **AbilityManager**负责AbilityKit和Ability管理服务进行IPC的通信。 -- **EvenHandler**是AbilityKit提供给开发者的用于在Ability中实现线程间通信的一个模块。 +- **EventHandler**是AbilityKit提供给开发者的用于在Ability中实现线程间通信的一个模块。 - **Ability运行管理服务**是用于协调各Ability运行关系、及生命周期进行调度的系统服务。其中,**服务启动**模块负责Ability管理服务的启动、注册等。**服务接口管理模块**负责Ability管理服务对外能力的管理。**进程管理模块**负责Ability应用所在进程的启动和销毁、及其进程信息维护等功能。**Ability栈管理模块**负责维护各个Ability之间跳转的先后关系。**生命周期调度模块**是Ability管理服务根据系统当前的操作调度Ability进入相应的状态的模块**。连接管理模块**是Ability管理服务对Service类型Ability连接管理的模块。 - **AppSpawn**是负责创建Ability应用所在进程的系统服务,该服务有较高的权限,为Ability应用设置相应的权限,并预加载一些通用的模块,加速应用的启动。 -**2. 包管理子系统**,是HarmonyOS为开发者提供的安装包管理框架。包管理子系统的由如下图4模块组成: +**2. 包管理子系统**,是OpenHarmony为开发者提供的安装包管理框架。包管理子系统的由如下图4模块组成: **图 4** 包管理子系统框架图 ![](figures/包管理子系统框架图.png "包管理子系统框架图") -- **BundleKit**:是包管理服务对外提供的接口,有安装/卸载接口、包信息查询接口、包状态变化监听接口。 +- **BundleKit:**是包管理服务对外提供的接口,有安装/卸载接口、包信息查询接口、包状态变化监听接口。 - **包扫描器**:用来解析本地预制或者安装的安装包,提取里面的各种信息,供管理子模块进行管理,持久化。 - **包安装子模块**:安装,卸载,升级一个包;**包安装服务**一个单独进程的用于创建删除安装目录,具有较高的权限。 @@ -115,7 +115,7 @@

foundation/appexecfwk/interfaces/innerkits/bundlemgr_lite

-

AbilityKit实现的核心代码,及包管理服务为其它子系统提供的接口

+

BundleKit实现的核心代码,及包管理服务为其它子系统提供的接口

foundation/appexecfwk/frameworks/bundle_lite

@@ -226,12 +226,12 @@ - 添加完上述的配置后,执行如下命令编译整个系统: ``` -python build.py ipcamera -p hi3516dv300_liteos_a -b debug +python build.py ipcamera_hi3516dv300 -b debug ``` ## 运行用户程序框架子系统的两个服务 -- 用户程序框架有两个系统服务ability管理服务(abilityms)和(bundlems),两系统服务运行于foudation进程中。 +- 用户程序框架有两个系统服务ability管理服务(abilityms)和(bundlems),两系统服务运行于foundation进程中。 - abilityms和bundlems注册到sa\_manager中,sa\_manager运行于foundation进程中,sa\_manager为abilityms和bundlems创建线程运行环境。具体创建abilityms、bundlems服务的方式以及使用该服务的方式,可参考[系统服务框架子系统](zh-cn_topic_0000001051589563.md)。 - 在foundation/distributedschedule/services/safwk\_lite/BUILD.gn中添加对abilityms和bundlems,如下: @@ -248,78 +248,93 @@ deps = [ ## 运行基于AbilityKit开发的Ability -- 基于AbilityKit开发的Ability的Demo代码位于foundation/aafwk/frameworks/kits/ability\_lite/test路径下,如有需要修改其中的功能,可在unittest的文件中修改代码或增加代码文件,并在BUILD.gn中做相应的修改。 -- 编译该Demo,在shell中执行如下命令,编译成功后,在out/ipcamera\_hi3516dv300\_liteos\_a下面生成libLauncher.so文件: +- 基于AbilityKit开发的Ability的Demo代码位于foundation/aafwk/frameworks/ability\_lite/example路径下,如有需要修改其中的功能,可在entry/src/main/cpp的文件中修改代码或增加代码文件,并在BUILD.gn中做相应的修改。 +- 在build/lite/config/subsystem/aafwk/BUILD.gn中添加对ability Demo编译配置: ``` - python build.py ipcamera -p hi3516dv300_liteos_a -T //foundation/aafwk/frameworks/kits/ability_lite/test:Launcher + import("//build/lite/config/subsystem/lite_subsystem.gni") + + lite_subsystem("aafwk") { + subsystem_components = [ + "......", + "//foundation/aafwk/frameworks/ability_lite/example:hiability", + "......", + ] + } ``` -- 编写config.json,内容如下: +- 编译该Demo,在shell中执行如下命令,编译成功后,在out/ipcamera\_hi3516dv300\_liteos\_a/dev\_tools/example下面生成libhiability.so文件: -``` -{ - "app": { - "bundleName": "com.huawei.launcher", - "vendor": "huawei", - "version": { - "code": 1, - "name": "1.0" - }, - "apiVersion": { - "compatible": 3, - "target": 3 - } - }, - "deviceConfig": { - "default": { - "keepAlive": false - }, - }, - "module": { - "deviceType": [ - "smartVision" - ], - "distro": { - "deliveryWithInstall": true, - "moduleName": "Launcher", - "moduleType": "entry" - }, - "abilities": [{ - "name": "MainAbility", - "icon": "assets/entry/resources/base/media/icon.png", - "label": "test app 1", - "launchType": "standard", - "type": "page", - "visible": true + ``` + python build.py ipcamera_hi3516dv300 -b debug + ``` + +- 编写config.json,参见foundation/aafwk/frameworks/ability\_lite/example路径下的config.josn,内容如下: + + ``` + { + "app": { + "bundleName": "com.huawei.hiability", + "vendor": "huawei", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 3, + "target": 3 + } }, - { - "name": "SecondAbility", - "icon": "assets/entry/resources/base/media/icon.png", - "label": "test app 2", - "launchType": "standard", - "type": "page", - "visible": true + "deviceConfig": { + "default": { + "keepAlive": false + }, }, - { - "name": "ServiceAbility", - "icon": "", - "label": "test app 2", - "launchType": "standard", - "type": "service", - "visible": true + "module": { + "deviceType": [ + "smartVision" + ], + "distro": { + "deliveryWithInstall": true, + "moduleName": "hiability", + "moduleType": "entry" + }, + "abilities": [{ + "name": "MainAbility", + "icon": "assets/entry/resources/base/media/icon.png", + "label": "test app 1", + "launchType": "standard", + "type": "page", + "visible": true + }, + { + "name": "SecondAbility", + "icon": "", + "label": "test app 2", + "launchType": "standard", + "type": "page", + "visible": true + }, + { + "name": "ServiceAbility", + "icon": "", + "label": "test app 2", + "launchType": "standard", + "type": "service", + "visible": true + } + ] } - ] } -} -``` + ``` + - 生成hap包 - 按照如下目录结构存放文件,assets/entry/resources/base/media下面放置资源文件: - ![](figures/zh-cn_image_0000001055712348.png) + ![](figures/zh-cn_image_0000001055267336.png) - - 将上述文件打包生成zip包,修改后缀为.hap,例如Launcher.hap + - 将上述文件打包生成zip包,修改后缀为.hap,例如hiability.hap - 安装hap包 @@ -327,13 +342,13 @@ deps = [ - 执行安装命令,安装hap包: ``` - ./bin/bm install -p /nfs/hap/Launcher.hap + ./bin/bm install -p /nfs/hap/hiability.hap ``` - 安装完成后,通过如下命令,运行Demo ``` -./bin/aa start -p com.huawei.launcher -n MainAbility +./bin/aa start -p com.huawei.hiability -n MainAbility ``` ## 涉及仓 -- Gitee