ohos_bundles/bundle_mgr/README.md
2020-09-10 10:22:30 +08:00

8.4 KiB
Raw Permalink Blame History

bundlemgr_README

项目介绍

简介

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

图1 轻量级包管理框架子系统框架图

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

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

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

  • 安全子模块:签名检查、权限授予、权限管理

目录

轻量级包管理框架子系统源代码目录结构如下图所示:

表 1 轻量级包管理框架子系统代码目录结构

名称

描述

foundation/appexecfwk/frameworks/bundle_lite

foundation/appexecfwk/interfaces/innerkits/bundlemgr_lite

foundation/appexecfwk/interfaces/kits/bundle_lite

foundation/appexecfwk/services/bundlemgr_lite

用户程序运行的包信息、元能力信息、异步事件处理等基本接口

用户程序包管理服务对外接口

用户程序运行的包信息、元能力信息、异步事件处理机制的实现逻辑

用户程序包管理服务实现逻辑

资源文档

开发指南

编译轻量级包管理框架子系统

  • 添加对轻量级包管理框架子系统的编译以hi3516dv300_liteos_a为例

    • 在build/lite/platform/hi3516dv300_liteos_a/platform.json中的subsystem_list字段下面添加appexecfwk代码如下

      {
           "name":"appexecfwk",
           "project": "hmf/appexecfwk/services/bundlemgr_lite",
           "path": "build/lite/config/subsystem/appexecfwk",
           "dir": "foundation/appexecfwk/services/bundlemgr_lite",
           "desc":"Bundle Services Manager",
           "requirement":"yes",
           "default":"yes",
           "selected":"yes"
      },
      
    • 在build/lite/platform/hi3516dv300_liteos_a/template/ipcamera.json的“template_subsystem_list”字段下面添加"appexecfwk"和"aafwk",代码如下:

      "template_subsystem_list" : [
           ......
           "distributedschedule",
           "appexecfwk",
           "communication",
           ......
      ],
      
    • 在build/lite/config/subsystem/aafwk/BUILD.gn和/build/lite/config/subsystem/appexecfwk/BUILD.gn中添加对用户程序框架中具体组件的编译如下

      import("//build/lite/config/subsystem/lite_subsystem.gni")
      
      lite_subsystem("appexecfwk") {
          subsystem_components = [
              "//foundation/appexecfwk/kits/appkit_lite:appexecfwk_kit_lite",
              "//foundation/appexecfwk/services/bundlemgr_lite:appexecfwk_services_lite",
          ]
      }
      
    • 在foundation/aafwk和foundation/appexecfwk下面添加对业务模块的编译各个模块都有自己的BUILD.gn文件

  • 添加完上述的配置后,执行如下命令编译整个系统:

python build.py ipcamera -p hi3516dv300_liteos_a -b release

运行轻量级包管理服务

  • 轻量级包管理服务为BundleMs服务运行于foudation进程中。
  • BundleMs注册到sa_manager中sa_manager运行于foundation进程中sa_manager为BundleMs创建线程运行环境。具体创建BundleMs服务的方式以及使用该服务的方式可参考系统服务框架子系统
  • 在foundation/distributedschedule/services/safwk_lite/BUILD.gn中添加对bundlems如下
deps = [
    "//foundation/distributedschedule/services/samgr_lite/samgr_server:server",
    "//base/dfx/lite/liteos-a/source/log:hilog_a_shared",
    "//foundation/appexecfwk/services/bundlemgr_lite:bundlems",
    "//base/security/services/iam_lite:pms_target",
    "//foundation/distributedschedule/services/dtbschedmgr_lite:dtbschedmgr",
]
  • 刷机后系统启动BundleMs会随系统启动而启动在shell中运行如下命令可以看到foudation进程中包含了libbundlems

运行基于AbilityKit开发的Ability

  • 基于AbilityKit开发的Ability的Demo代码位于foundation/aafwk/frameworks/kits/ability_lite/test路径下如有需要修改其中的功能可在unittest的文件中修改代码或增加代码文件并在BUILD.gn中做相应的修改。

  • 编译该Demo在shell中执行如下命令编译成功后在out/ipcamera_hi3516dv300_liteos_a下面生成libLauncher.so文件

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

    {
        "app": {
            "bundleName": "com.huawei.launcher",
            "vendor": "huawei",
            "version": {
                "code": 1,
                "name": "1.0"
            }
        },
        "deviceConfig": {
            "default": {
                "reqSdk": {
                    "compatible": "zsdk 1.0.0",
                    "target": "zsdk 1.0.1"
                },
                "keepAlive": false
            },
        },
        "module": {
            "deviceType": [
                "smartCamera"
            ], 
            "distro": {
                "deliveryWithInstall": true, 
                "moduleName": "Launcher", 
                "moduleType": "entry"
            },
            "abilities": [{
                "name": "MainAbility",
                "icon": "res/drawable/phone.png",
                "label": "test app 1", 
                "launchType": "standard",
                "type": "page",
                "visible": true
            },
            {
                "name": "SecondAbility",
                "icon": "res/drawable/phone.png",
                "label": "test app 2", 
                "launchType": "standard",
                "type": "page",
                "visible": true
            },
            {
                "name": "ServiceAbility",
                "icon": "res/drawable/phone.png",
                "label": "test app 2", 
                "launchType": "standard",
                "type": "service",
                "visible": true
            }
            ]
        }
    }
    
  • 生成hap包

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

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

  • 安装hap包

    • 将上述hap包放置到指定目录下面
    • 执行安装命令安装hap包
    ./bin/bm install -p /nfs/hap/Launcher.hap