1 HarmonyOS是什么
HarmonyOS是华为公司自主研发的,基于微内核的全场景分布式操纵系统。
1.1 微内核
相比基于Linux(宏内核)的Android操作系统,基于微内的HarmonyOS,更安全,更稳定,可维护性更好。
1.2 全场景
可应用于包含但不限于移动通信终端等在内的,各种各样的硬件设备上。
1.3 分布式
借助软总线将多个设备组成超级虚拟终端,实现不同设备间的互联互通和信息共享。HarmonyOS堪称物联网时代的操作系统。
2 HarmonyOS的架构
HarmonyOS总体架构
2.1 内核层
目前华为的大部分HarmonyOS设备依然基于Linux内核,LiteOS属于微内核,但仅限于华为的物联网产品。不同的系统内核借助内核抽象层(KAL)向上层提供统一的访问接口,以屏蔽系统内核间的差异性。
2.2 系统服务层
将一些非核心功能从系统内核中抽离出来,以体现微内核操作系统的设计原则。系统服务与(微)内核一起实现操作系统内核的功能。
2.2.1 方舟多语言运行时子系统
HarmonyOS通过方舟多语言运行时子系统,在操作系统的内核级别处理编译器产出的二进制指令,其性能高于依赖ART虚拟机执行代码的Android。
方舟多语言运行时子系统与ART虚拟机
2.3 应用框架层
为应用程序提供访问系统服务的接口。
应用程序与应用框架
HarmonyOS的应用框架就相当于Windows SDK或Unix/Linux系统调用。
应用框架与SDK或系统调用
3 HarmonyOS应用的开发模式
用Java创建界面,同时实现业务逻辑;用XML描述界面,用Java实现业务逻辑;以上两种模式,都可以在Java中通过JNI调用C或C++编写的库;用HML描述界面的结构,用CSS描述界面的外观,用JavaScript实现业务逻辑。XMLJavaC/C++HMLCSSJavaScript***********
4 HarmonyOS应用的组织结构
HarmonyOS上的应用由一到多个HAP (HarmonyOS Ability Package)组成。
HAP分为两种类型:
entry
入口包,相当于Windows上的exe文件feature
特征包,相当于Windows上的dll文件
应用需要为其适配的每种设备提供一个相应的入口包。只适配一种设备的应用只有一个入口包。无论哪种情况,特征包的数量都没有限制。
___________________________________________________________________________
| 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是应用所具备能力的抽象。
Ability
6 HarmonyOS应用的开发环境
6.1 node.js
https://nodejs.org
下载node.js
6.2 HUAWEI DevEco Studio
https://developer.harmonyos.com/en/develop/deveco-studio
下载HUAWEI DevEco Studio
6.3 HarmonyOS SDK
DevEco Studio
Configure
Settings
HarmonyOS SDK
安装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用于通过控制台输出日志信息,包括如下静态方法:
debug()
输出调试信息info()
输出一般信息warn()
输出警告信息error()
输出错误信息fatal()
输出致命错误
这些方法的第一个参数是一个HiLogLabel类型的对象,表示日志标签,其构造方法包含如下三个参数:
type
日志类型,可取以下值:
HiLog.LOG_APP
HiLog.DEBUG
http://HiLog.INFO
HiLog.WARN
HiLog.ERROR
HiLog.FATALdomain
服务域,采用十六进制整数形式,如:
0x 0 0 1 0 1
\___/ \_/
| |
子系统 模块
tag
标签名称
通常将日志标签定义为类的静态成员变量。
在指定日志文本的格式化字符串中:
{private} (缺省)
表示私有输出{public}
表示公有输出
如:
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, "致命");
}
...
}
运行效果如下图所示:
运行效果
更多精彩,敬请期待……