HarmonyOS基础知识


1 HarmonyOS是什么

HarmonyOS是华为公司自主研发的,基于微内核的全场景分布式操纵系统。

1.1 微内核

相比基于Linux(宏内核)的Android操作系统,基于微内的HarmonyOS,更安全,更稳定,可维护性更好。

1.2 全场景

可应用于包含但不限于移动通信终端等在内的,各种各样的硬件设备上。

1.3 分布式

借助软总线将多个设备组成超级虚拟终端,实现不同设备间的互联互通和信息共享。HarmonyOS堪称物联网时代的操作系统。

2 HarmonyOS的架构

2.1 内核层

目前华为的大部分HarmonyOS设备依然基于Linux内核,LiteOS属于微内核,但仅限于华为的物联网产品。不同的系统内核借助内核抽象层(KAL)向上层提供统一的访问接口,以屏蔽系统内核间的差异性。

2.2 系统服务层

将一些非核心功能从系统内核中抽离出来,以体现微内核操作系统的设计原则。系统服务与(微)内核一起实现操作系统内核的功能。

2.2.1 方舟多语言运行时子系统

HarmonyOS通过方舟多语言运行时子系统,在操作系统的内核级别处理编译器产出的二进制指令,其性能高于依赖ART虚拟机执行代码的Android。

2.3 应用框架层

为应用程序提供访问系统服务的接口。

HarmonyOS的应用框架就相当于Windows SDK或Unix/Linux系统调用。

3 HarmonyOS应用的开发模式

 _____________________________________________
|     |      |       |     |     |            |
| XML | Java | C/C++ | HML | CSS | JavaScript |
|_____|______|_______|_____|_____|____________|
|     |      |       |     |     |            |
|     |   *  |       |     |     |            |
|_____|______|_______|_____|_____|____________|
|     |      |       |     |     |            |
|  *  |   *  |       |     |     |            |
|_____|______|_______|_____|_____|____________|
|     |      |       |     |     |            |
|     |   *  |   *   |     |     |            |
|_____|______|_______|_____|_____|____________|
|     |      |       |     |     |            |
|  *  |   *  |   *   |     |     |            |
|_____|______|_______|_____|_____|____________|
|     |      |       |     |     |            |
|     |      |       |  *  |  *  |     *      |
|_____|______|_______|_____|_____|____________|

4 HarmonyOS应用的组织结构

HarmonyOS上的应用由一到多个HAP (HarmonyOS Ability Package)组成。

HAP分为两种类型:

应用需要为其适配的每种设备提供一个相应的入口包。只适配一种设备的应用只有一个入口包。无论哪种情况,特征包的数量都没有限制。

 ___________________________________________________________________________
|                              application.app                              |
|  _______________________________________________________________________  |
| |    entry.hap    |   feature1.hap  |   feature2.hap  |   feature3.hap  | |
| |  _____________  |  _____________  |  _____________  |  _____________  | |
| | |  abilities  | | |  abilities  | | |             | | |             | | |
| | |     libs    | | |     libs    | | |     libs    | | |  resources  | | |
| | |  resources  | | |  resources  | | |             | | |             | | |
| | | config.json | | | config.json | | | config.json | | | config.json | | |
| | |_____________| | |_____________| | |_____________| | |_____________| | |
| |_________________|_________________|_________________|_________________| |
|                                                                           |
|                                 pack.info                                 |
|___________________________________________________________________________|

其中:

application.app   - 应用包(Application Package)
|
|__entry.hap      - 入口包
|  |
|  |__abilities   - 界面或服务
|  |__libs        - 库
|  |__resources   - 资源
|  |__config.json - 包配置
|
|__feature1.hap   - 特征包
|  |
|  |__abilities   - 界面或服务
|  |__libs        - 库
|  |__resources   - 资源
|  |__config.json - 包配置
|
|__feature2.hap   - 库特征包
|  |
|  |__libs        - 库
|  |__config.json - 包配置
|
|__feature3.hap   - 资源特征包
|  |
|  |__resources   - 资源
|  |__config.json - 包配置
|
|__pack.info      - 包信息

5 Ability(能力)

Ability是应用所具备能力的抽象。

6 HarmonyOS应用的开发环境

6.1 node.js

https://nodejs.org

6.2 HUAWEI DevEco Studio

https://developer.harmonyos.com/en/develop/deveco-studio

6.3 HarmonyOS SDK

DevEco Studio
  Configure
    Settings
      HarmonyOS SDK

7 第一个HarmonyOS应用

7.1 创建工程

DevEco Studio
  Create HarmonyOS Project
    Empty Ability(Java)
      Project Name: Hello
      Project Type: Application
      Package Name: com.<你的姓名全拼>.hello
      Save Location: <工程所在目录>\Hello
      Compatible API Version: SDK: API Version 5
      Device Type: Phone

例程:Hello

...\Hello\entry\src\main\resources\zh\element\string.json

{
  "string": [
    {
      "name": "entry_MainAbility",
      "value": "你好"
    },
    {
      "name": "mainability_description",
      "value": "你好"
    },
    {
      "name": "mainability_HelloWorld",
      "value": "你好,鸿蒙"
    }
  ]
}

...\Hello\entry\src\main\resources\en\element\string.json

{
  "string": [
    {
      "name": "entry_MainAbility",
      "value": "Hello"
    },
    {
      "name": "mainability_description",
      "value": "Hello"
    },
    {
      "name": "mainability_HelloWorld",
      "value": "Hello HarmonyOS"
    }
  ]
}

7.2 在本地预览器中运行

 

7.3 在远程模拟器中运行

 

7.4 在真机设备中运行

 

有关如何将自己开发的HarmonyOS应用,部署到真机设备并运行调试的方法,将在后续课程中为大家介绍。

8 控制台输出

HiLog用于通过控制台输出日志信息,包括如下静态方法:

这些方法的第一个参数是一个HiLogLabel类型的对象,表示日志标签,其构造方法包含如下三个参数:

通常将日志标签定义为类的静态成员变量。

在指定日志文本的格式化字符串中:

如:

HiLog.warn(
    label,
    "Failed to visit %{private}s, reason: %{public}d.",
    url, errno);

例程:HiLog

...\HiLog\entry\src\main\java\com\minwei\hilog\slice\MainAbilitySlice.java

public class MainAbilitySlice extends AbilitySlice {
    private static final HiLogLabel label = new HiLogLabel(
        HiLog.LOG_APP, 0x00101, "标签");

    @Override
    public void onStart(Intent intent) {
        ...
        HiLog.debug(label, "调试");
        HiLog.info(label, "信息");
        HiLog.warn(label, "警告");
        HiLog.error(label, "错误");
        HiLog.fatal(label, "致命");
    }
    ...
}

运行效果如下图所示:

更多精彩,敬请期待……


达内集团C++教学部 2021年9月14日