专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
51好读  ›  专栏  ›  51CTO技术栈

图解HarmonyOS架构!

51CTO技术栈  · 公众号  · 程序员  · 2020-12-30 18:05

正文

本文将会给大家梳理 HarmonyOS 源码目录结构,介绍重要目录包含的内容与作用,便于大家在学习开发过程中有全局观,有针对性的研读开发。


HarmonyOS 源码文件之多,想要短时间内研读完成是比较困难的。对于我们刚刚学习此操作系统的开发来说,如果一个个目录去研读代码,需要花费大量的时间。


本文从框架上简单解析 HarmonyOS 的目录结构,让开发者有针对性的研究它。


下图将 HarmonyOS 源码的一级目录通过软件层进行了简单区分,可以结合 HarmonyOS 架构图一起从整体要认识 HarmonyOS 目录结构。

HarmonyOS 架构图中表述的应用框架层和系统服务层,都可以理解为 Farmwork 层,是 Harmony 最重要,也是最核心的部分。


接着谈谈我们对每个目录的简单认识:


01

Applications


从字面上解读,主要存放用户的应用程序,或是是 HarmonyOS 预置的系统应用程序。
applications
   |
   |——sample                  //提供Hi3516/Hi3518/Hi3861基础应用,这些应用应用预置设备中
       |
       |——camera              // 主要说明Hi35xx AI Camera的基础应用
       |   |
       |   |——app             // 此目录为用户自己开发的目录,可以通过该目录下的BUILD.gn文件适配是否要预置到系统中
       |   |——communication   // 通话模块(hostapd wpa_cli wpa_supplicant)
       |   |——example         // 示例模块
       |   |——hap             // 预置的app,HarmonyOS 中的hap对应Android中的app
       |   |——media           // 视频模块实例
       |——wifi-iot
           |
            ——app             // 此目录为用户自己开发的目录,可以通过该目录下的BUILD.gn文件适配是否
                                 要预置到系统中(建议IoT开发预置led_example,便于开箱检查产品)


对应的代码仓包含有:
applications/sample/camera: https://gitee.com/openharmony/applications_sample_camera

applications/sample/wifi-iot:https://gitee.com/openharmony/applications_sample_wifi_iot/


02

Base


HarmonyOS Framework 基础能力集合,定位于大多数设备开发都需要能力模块,目前提供了全球化、DFX、安全、系统启动等模块:
base
  |
  |——global                   // 全球化模块,作为设备的基础能力模块,当然也可裁剪掉
   |   |
   |   |——frameworks          // 全球化资源调度模块
   |   |——interfaces          // 全球化资源调度系统间开放APIs
   |——hiviewdfx                // DFX模块
   |   |
   |   |——frameworks
   |   |   |
   |   |   |——ddrdump_lite    // 轻量级设备 Dump信息存储模块,目前暂时没有内容
   |   |   |——hievent_lite    // 轻量级设备DFX-MCU/CPU事件记录模块
   |   |   |——hilog_lite      // 轻量级设备DFX-MCU/CPU日志模块
   |   |——interfaces
   |   |   |
   |   |   |——innerkits       // DFX模块(日志、事件)内部接口
   |   |   |——kits            // DFX模块(日志、事件)APIs
   |   |——services            // DFX-MUC框架/日志服务功能模块Services
   |   |——utils               // DFX-MCU基础组件
   |——iot_hardware             // IoT外设能力模块(GPIO/I2C/SPI/AD/DA等)
   |   |
   |   |——frameworks
   |   |   |
   |   |    ——wifiiot_lite    // IoT外设模块实现(包含.c文件)
   |   |——hals
   |   |   |
   |   |    ——wifiiot_lite    // HAL adapter 接口(为frameworks与驱动层提供适配)
   |   |——interfaces
   |       |
   |        ——kits            // IoT外设控制模块接口,与frameworks/wifiiot_lite配合
   |——security
   |   |
   |   |——frameworks
   |   |   |
   |   |   |——app_verify      // hap包签名校验模块
   |   |   |——crypto_lite     // 加解密模块
   |   |   |——hichainsdk_lite // 设备认证模块
   |   |   |——huks_lite       // 秘钥与证书管理模块
   |   |   |——secure_os       // libteec库函数实现,提供TEE Client APIs
   |   |——interfaces
   |   |   |
   |   |   |——innerkits       // 内部接口目录,与frameworks对应
   |   |   |——kits            // 模块APIs(应用权限管理)  
   |   |——services
   |       |
   |       |——iam_lite        // 应用权限管理及IPC通信鉴权服务
   |       |——secure_os       // secure_os TEE代理服务
   |——startup
       |
       |——frameworks
       |   |
       |    ——syspara_lite    // 系统属性模块源文件(param_impl_hal-Cortex-M,param_impl_posix-Cortex-A)
       |——hals
       |   |
       |    ——syspara_lite    // 系统属性模块文文件
       |——interfaces
       |   |
       |    ——kits            // 系统属性模块对外APIs
       |——services
           |
           |——appspawn_lite   // 应用孵化模块
           |——bootstrap_lite  // 启动服务模块
           |——init_lite       // 启动引导模块

interfaces 提供内外部 APIs,frameworks 提供接口实现的源代码;hals:HAL adapter 接口(为 frameworks 与驱动层提供适配);services:通过服务管理模块。


03

Foundtion


Foundtion 的中文意义为基础、底座等,这里的基础与 Base 目录的基础怎么区分,有什么不同呢。


下表为 HarmonyOS 官方帮助资料中的描述:

个人理解 Foundtion 提供了更为高级的能力模块,此类模块也是 HarmonyOS 的核心竞争力模块,例如分布式调度、分布式通信等等。


Base 和 Foundtion 之间没有绝对的界限,因为对于低端设备部分 Base 能力可以也要裁剪,例如:IoT 设备中可能不需要全球化;对于高端设备 Base 和 Foundtion 的模块都属于基础能力。
foundation
   |
   |——aafwk                   // Ability开发框架接口、Ability管理服务
   |   |——frameworks
   |   |   |——ability_lite    // Ability开发框架的源代码
   |   |   |——abilitymgr_lite // 管理AbilityKit与Ability管理服务通信的客户端代码
   |   |   |——want_lite       // Ability之间交互的信息载体的实现代码
   |   |——interfaces
   |   |   |——innerkits       //Ability管理服务为其它子系统提供的接口
   |   |   |——kits
   |   |   |   |——ability_lite// AbilityKit为开发者提供的接口
   |   |   |   |——want_lite   // Ability之间交互的信息载体的对外接口
   |   |——services            // Ability管理服务
   |——ace                     // JS应用开发框架,提供了一套跨平台的类web应用开发框架
   |   |——frameworks
   |   |   |——lite
   |   |       |——examples    // 示例代码目录
   |   |       |——include     // 对外暴露头文件存放目录
   |   |       |——packages    // 框架JS实现存放目录
   |   |       |——src         // 源代码存放目录
   |   |       |——targets     // 各目标设备配置文件存放目录
   |   |       |——tools       // 工具代码存放目录
   |   |——interfaces          // JS应用框架APIs
   |       |——builtin
   |           |——async       // JS应用框架异步接口
   |           |——base        // 内存管理接口
   |           |——jsi         // JS应用框架对外APIs
   |——appexecfwk
   |   |——frameworks          // 管理BundleKit与包管理服务通信的客户端代码
   |   |——interfaces          // BundleKit为开发者提供的接口
   |   |——services            // 包管理服务的实现代码
   |   |——utils               // 包管理服务实现中用到的工具性的代码
   |——communication           // 分布式通信(https://gitee.com/openharmony/docs/blob/master/readme/%E5%88%86%E5%B8%83%E5%BC%8F%E9%80%9A%E4%BF%A1%E5%AD%90%E7%B3%BB%E7%BB%9FREADME.md)
   |   |——frameworks          
   |   |   |——ipc_lite        // 进程间通信框架实现
   |   |   |——wifi_lite       // Wifi通信框架(未实现)
   |   |——hals                // hal适配层
   |   |——interfaces          // 提供APIs
   |   |   |——kits
   |   |       |——ipc_lite    // 进程间通信APIs
   |   |       |——softbus_lite// 软总线APIs  
   |   |       |——wifi_lite   // Wi-Fi通信APIs
   |   |——services
   |       |——authmanager     // 提供设备认证机制和设备知识库管理
   |       |——discovery       // 提供基于coap协议的设备发现机制
   |       |——os_adapter      // OS适配管理
   |       |——trans_service   // 提供认证和传输通道
   |
   |——distributedschedule     // 分布式调度
   |   |——interfaces
   |   |   |——kits
   |   |   |   |——samgr_lite
   |   |   |       |——samgr   // M核和A核系统服务框架APIs
   |   |   |       |——registry
   |   |   |       |          //A核进程间服务调用APIs
   |   |   |       |——communication
   |   |   |       |          // M核和A核进程内事件广播服务APIS        
   |   |   |——innerkits       // 内部APIs






请到「今天看啥」查看全文