用户程序框架子系统

    元能力子系统,是OpenHarmony为开发者提供的一套开发OpenHarmony应用的开发框架。元能力子系统由如下模块组成:

    图1 元能力子系统框架图

    Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA(Feature Ability)和AA(Atomic Ability)。

    • FA:由三方基于元能力框架开发的、实现单一功能的有UI界面的程序实体,用于支持与用户交互的能力。一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。Page模板是Feature Ability唯一支持的模板。用户可以基于JavaScript语言开发FA,也可以基于C/C++语言开发FA。

      • Page模板的Ability的生命周期流转图

      图2 Ability生命周期流转图

      用户程序框架子系统 - 图1Page模板的Ability生命周期各状态解析

      • UNINITIALIZED:未初始状态,为临时状态,Ability创建后会直接调用Init初始化,进入INITIAL状态;

      • INITIAL:初始化状态,也表示停止状态,表示当前Ability未运行,调用Start后进入INACTIVE,同时回调开发者的OnSatrt生命周期回调;

      • INACTIVE:未激活状态,表示当前窗口已显示但是无焦点状态,由于Window暂未支持焦点的概念,当前状态与ACTIVE一致。调用Active后进入ACTIVE,同时回调开发者的OnActive生命周期回调;调用Background后进入BACKGROUND,同时回调开发者的OnBackground生命周期回调;

      • ACTIVE:前台激活状态,表示当前窗口已显示,并获取焦点。调用Inactive后进入INACTIVE;

      • BACKGROUND: 后台状态,表示当前Ability退到后台。调用Active后进入ACTIVE,同时回调开发者的OnActive生命周期回调;调用Stop后进入INITIAL,同时回调开发者的OnStop生命周期回调;

      • AbilitySlice

        一个使用Page模板的Ability由AbilitySlice构成,AbilitySlice是单个页面及其控制逻辑的总和。一个Page可以包含多个AbilitySlice,此时,这些页面提供的业务能力应当是高度相关的。Page模板的Ability与AbilitySlice的关系如下图:

        图3 Ability与AbilitySlice的关系图

    • AA:由三方基于元能力框架开发的、实现单一功能的无UI界面的支持后台任务的程序实体。AA与FA的区别是,AA无UI界面。仅对系统服务有依赖关系,AA之间不存在依赖关系 。Service模板是AA支持的模板。
    • 注册Ability

      Ability的模板通过在清单文件中注册时指定。如下所示,开发者可以配置Ability元素的type属性,其取值page、service分别代表Page模板、Service模板。

    • AbilityKit:元能力的开发框架,运行在开发者的应用程序进程中,和AbilityMs通过IPC通信,开发者基于该框架开发自己的Ability。

    • AbilityMs:元能力运行管理服务,元能力生命周期的调度统一由AbilityMs管理。

    • AppSpawn:进程孵化器,元能力进程由AppSpawn负责孵化并拉起。

    包管理子系统,是OpenHarmony为开发者提供的安装包管理框架。包管理子系统的由如下模块组成:

    图4 包管理子系统框架图

    用户程序框架子系统 - 图2

    • 包扫描器:用来解析本地预制或者安装的安装包,提取里面的各种信息,供管理子模块进行管理,持久化

    • 包安装子模块:安装,卸载,升级一个包;Installed一个单独进程的用于创建删除安装目录,具有较高的权限。

    • 包管理子模块:管理安装包相关的信息

    目录

    轻量用户程序框架子系统源代码目录结构如下图所示:

    表 1 轻量用户程序用户程序框架子系统源代码目录结构

    • 语言版本

      • C++11版本或以上
    • 框架针对不同的芯片平台和底层OS能力,规格有所区别

      • Cortex-M RAM/ROM:

        • RAM:建议大于20K
        • ROM: > 300K (包含ACE,UIKit及引擎等强相关子系统)
      • Cortex-A RAM/ROM:

        • RAM:建议大于2M
        • ROM:> 2M (包含ACE,UIKit及引擎等强相关子系统)

    编译用户程序框架子系统

    • 添加对用户程序框架子系统的编译,以hi3516dv300_liteos_a为例

      • 在build/lite/platform/hi3516dv300_liteos_a/platform.json中的subsystem_list字段下面添加appexecfwk和aafwk,代码如下:
      1. "name":"aafwk",
      2. "project":"hmf/aafwk/services/abilitymgr_lite",
      3. "path":"build/lite/config/subsystem/aafwk",
      4. "dir":"foundation/aafwk/services/abilitymgr_lite",
      5. "desc":"Ability Services Manager",
      6. "requirement":"yes",
      7. "default":"yes",
      8. "selected":"yes"
      9. },
      10. {
      11. "name":"appexecfwk",
      12. "path": "build/lite/config/subsystem/appexecfwk",
      13. "dir": "foundation/appexecfwk/services/bundlemgr_lite",
      14. "desc":"Bundle Services Manager",
      15. "requirement":"yes",
      16. "default":"yes",
      17. "selected":"yes"
      18. },
      • 在build/lite/platform/hi3516dv300_liteos_a/template/ipcamera.json的“template_subsystem_list”字段下面添加”appexecfwk”和”aafwk”,代码如下:
      1. "template_subsystem_list" : [
      2. ......
      3. "distributedschedule",
      4. "aafwk",
      5. "appexecfwk",
      6. "communication",
      7. ......
      8. ],
      • 在build/lite/config/subsystem/aafwk/BUILD.gn和/build/lite/config/subsystem/appexecfwk/BUILD.gn中添加对用户程序框架中具体组件的编译,如下:
      1. import("//build/lite/config/subsystem/lite_subsystem.gni")
      2. lite_subsystem("appexecfwk") {
      3. "//foundation/appexecfwk/kits/appkit_lite:appexecfwk_kit_lite",
      4. "//foundation/appexecfwk/services/bundlemgr_lite:appexecfwk_services_lite",
      5. ]
      6. }
      • 在foundation/aafwk和foundation/appexecfwk下面添加对业务模块的编译,各个模块都有自己的BUILD.gn文件
    • 添加完上述的配置后,执行如下命令编译整个系统:

    1. python build.py ipcamera -p hi3516dv300_liteos_a -b release
    • 用户程序框架有两个系统服务AbilityMs和BundleMs,两系统服务运行于foudation进程中。
    • AbilityMs和BundleMs注册到sa_manager中,sa_manager运行于foundation进程中,sa_manager为AbilityMs和BundleMs创建线程运行环境。具体创建AbilityMs、BundleMs服务的方式以及使用该服务的方式,可参考。
    • 在foundation/distributedschedule/services/safwk_lite/BUILD.gn中添加对abilityms和bundlems,如下:

    运行基于AbilityKit开发的Ability

    • 基于AbilityKit开发的Ability的Demo代码位于foundation/aafwk/frameworks/kits/ability_lite/test路径下,如有需要修改其中的功能,可在unittest的文件中修改代码或增加代码文件,并在BUILD.gn中做相应的修改。
    • 编译该Demo,在shell中执行如下命令,编译成功后,在out/ipcamera_hi3516dv300_liteos_a下面生成libLauncher.so文件:

      1. python build.py ipcamera -p hi3516dv300_liteos_a -T //foundation/aafwk/frameworks/kits/ability_lite/test:Launcher
    • 编写config.json,内容如下:

    1. {
    2. "app": {
    3. "bundleName": "com.huawei.launcher",
    4. "vendor": "huawei",
    5. "version": {
    6. "code": 1,
    7. "name": "1.0"
    8. }
    9. },
    10. "deviceConfig": {
    11. "default": {
    12. "reqSdk": {
    13. "target": "zsdk 1.0.1"
    14. },
    15. "keepAlive": false
    16. },
    17. },
    18. "module": {
    19. "deviceType": [
    20. "smartCamera"
    21. ],
    22. "distro": {
    23. "deliveryWithInstall": true,
    24. "moduleType": "entry"
    25. },
    26. "abilities": [{
    27. "name": "MainAbility",
    28. "icon": "res/drawable/phone.png",
    29. "label": "test app 1",
    30. "launchType": "standard",
    31. "type": "page",
    32. "visible": true
    33. },
    34. {
    35. "name": "SecondAbility",
    36. "icon": "res/drawable/phone.png",
    37. "label": "test app 2",
    38. "launchType": "standard",
    39. "type": "page",
    40. "visible": true
    41. },
    42. {
    43. "name": "ServiceAbility",
    44. "icon": "res/drawable/phone.png",
    45. "label": "test app 2",
    46. "launchType": "standard",
    47. "type": "service",
    48. "visible": true
    49. }
    50. ]
    51. }
    52. }
    • 生成hap包

      • 按照如下目录结构存放文件,res/drawable下面放置资源文件:

      • 将上述文件打包生成zip包,修改后缀为.hap,例如Launcher.hap

    • 安装hap包

      • 将上述hap包放置到指定目录下面
      • 执行安装命令,安装hap包:
    1. ./bin/aa start -p com.huawei.launcher -n MainAbility

    aafwk_frameworks_kits_ability_lite

    aafwk_interfaces_innerkits_abilitykit_lite

    aafwk_frameworks_kits_content_lite

    aafwk_interfaces_innerkits_abilitymgr_lite

    aafwk_interfaces_innerkits_intent_lite

    aafwk_interfaces_kits_ability_lite

    aafwk_services_abilitymgr_lite

    appexecfwk_frameworks_bundle_lite

    appexecfwk_interfaces_innerkits_bundlemgr_lite

    appexecfwk_interfaces_innerkits_appexecfwk_lite

    appexecfwk_services_bundlemgr_lite

    appexecfwk_kits_appkit_lite