HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体 娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS 提出了基 于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
注册与实名认证
首先,我们先点击这里去跳转到 鸿蒙官方网站
点击右上角的注册按钮进行注册。
注册完成后再进行实名认证(一般就是个人开发者)。
鸿蒙开发工具下载
鸿蒙开发使用的语言一共有三个
Java(主推)
JS
C/C++
据说鸿蒙3.0的时候还会推出来一款开发语言:仓颉
鸿蒙应用开发(手机app)- Java
鸿蒙设备开发(硬件开发)- C/C++
开发工具的常见设置
修改主题
设置字体大小
取消注释斜体并修改注释的颜色
自动导包
提示忽略大小写
因为所有的设置必须要进入项目才能设置,所以要新建一个项目
点击设置修改为黑色主题
项目结构介绍
因为 HUAWEI 是基于 IDEA 二次开发的,所以也是以下 4 种
项目
模块
包(里面东西比较多)
类
Project 下面分别有2个
一个就是我们创建的项目
另外一个就是 java包(External Libraries)
External Libraries
<SDK(API Version 5)> 这个就是华为提供的鸿蒙相关的 API 版本为5
<1.8> 这个就是 Java 相关的 JDK 版本是 8
下面的3个 Gradle 就是帮助我们自动构建项目的工具
接下来看我们创建的项目结构
.gradle 项目管理工具 点开会发现版本是 6.3 这个文件夹我们一般是不会去动的
.idea 是开发工具 Studio 的一些信息 同样也不会动它的
entry 是应用的主模块 所以要提出来重要讲解
gradle(以及下面的文件) 都是一些配置 和 Java包 一般都是使用默认的就好了
entry
libs 需要自己手动导入 第三方的 Java包 那么就导入到这个里面
src 这个里面装着我们所有写的代码
src
main 最主要的部分(存放代码)
ohosTest 利用华为提供的鸿蒙写的测试类
test 这个是导入 Junit 写的测试类
main
java 代码要放在这个里面 不能存放在其他地方
resources 这个是资源(App用到的图片、音频、视频等等)
config.json app本身的一些配置信息(版本、公司厂商一些信息)
为了大家看的更清楚,我把信息整理成了图片
鸿蒙第一个入门应用:HelloWorld
一个项目被创建后,自带 HelloWorld 我们主要学习
- 如何运行项目
- 页面中的包含关系
- 学习项目的配置文件:config.json
- 了解程序的运行过程
运行项目
- 登录华为开发者账号 Tools -> Device Manager 登录
- 选择并开启模拟器 Tools -> Device Manager -> Phone -> P40
- 运行项目
页面中的包含关系
- 在鸿蒙里面,一个页面就是一个 Ability
- 里面会添加一个子页面 AbilitySlice (切片或者片段)
- 再添加一段文本信息:你好,世界
- 鸿蒙App 会把每一个 Ability 打包成一个文件(文件的后缀就是Hap) 每一个 Ability 对应一个 Hap 包 是为了可以实现可分可合的作用,单独的 Hap 包 是可以下载的。
在开发中,一个单独的功能 ,对应着一个 Ability。 如果在这个功能中需要进行切换,那么就可以在 Ability 中写多个子页面 AbilitySlice 进行切换。
config.json
- 跟应用相关的所有信息,都会在这个文件中配置
- 项目的配置(app):厂商信息,项目的版本号
- 应用在设备上的配置信息(deviceConfig):应用运行时进程名,是否允许使用流量,是否支持未解锁时启动
- 代码中的配置(module):所有的 Ability
程序的运行过程
- 解析 config.json 文件
- 初始化
- 获取入口 Ability 的全类名
- 找到 Ability 并运行
- 运行 Ability 中的子页面
- 加载 xml 文件,展示内容
鸿蒙第二个入门应用:页面跳转
实现步骤
- 编写第一个页面(文本+按钮)
- 编写第二个页面(文本)
- 给第一个页面的按钮添加一个跳转
鸿蒙UI中,提供了两种编写布局的方式:
- XML文件,标签表示要展示的不同内容:<Text> 文本 <Image> 图片 <Button> 按钮
- Java 代码,对象表示要展示的不同内容:Text对象 文本、 Image对象 图片、Button对象 按钮
第一个页面用 XML 实现,第二页面用 Java 代码实现
- 在 main -> resources -> base -> layout -> ability_main.xml 填写以下代码
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<Text
ohos:id="$+id:text_helloworld"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="$graphic:background_ability_main"
ohos:layout_alignment="horizontal_center"
ohos:text="第一个页面"
ohos:text_size="40vp"
/>
<Button
ohos:id="$+id:but1"
ohos:height="match_content"
ohos:width="match_content"
ohos:background_element="red"
ohos:text_size="40fp"
ohos:text="点我"/>
</DirectionalLayout>
- 在 com.example.你的程序名 这个下面右键 New -> Ability -> Empty Page Ability(Java) 创建第二个页面
- 在 slice 里面找到你的第二个页面的子页面
package com.example.hmosdemo.slice;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.Text;
import ohos.agp.utils.Color;
public class SecondAbilitySlice extends AbilitySlice {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//super.setUIContent(ResourceTable.Layout_ability_second);
//1、创建布局对象
DirectionalLayout d1 = new DirectionalLayout(this);
//2、创建文本对象
Text t = new Text(this);
//设置内容
t.setText("第二个页面");
//设置文字大小
t.setTextSize(55);
//设置文字颜色
t.setTextColor(Color.RED);
//3、把文本对象添加到布局当中
d1.addComponent(t);
//4、把布局添加到子界面当中
super.setUIContent(d1);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
}
编写跳转功能
- 在 slice 中第一个页面的代码里写以下代码
package com.example.hmosdemo.slice;
import com.example.hmosdemo.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.aafwk.content.Operation;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {
Button btn;
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
//1、找到按钮
btn = (Button) findComponentById(ResourceTable.Id_but1);
//2、给按钮添加一个点击事件
//如果没有添加点击事件,那么用鼠标点击按钮之后是没有任何反应的。
//如果我们给按钮添加了点击事件,那么用鼠标点击按钮之后,就可以执行对应的代码
//给btn这个按钮添加了点击事件
btn.setClickedListener(this);
}
@Override
public void onActive() {
super.onActive();
}
@Override
public void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
public void onClick(Component component){
//点击按钮之后执行的代码
//跳转到第二个页面中
if (component == btn){
//只有点击了这个btn按钮之后才进行跳转
//跳转到哪个页面中(意图)
Intent i = new Intent();
//包含了要跳转的页面信息
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")//要跳转到哪个设备上,如果传递一个没有内容的字符串,表示跳转本机
.withBundleName("com.example.hmosdemo")//我要跳转到哪个应用上,小括号里面可以写包名
.withAbilityName("com.example.hmosdemo.SecondAbility")//要跳转的页面
.build();//表示将上面的三个信息进行打包
//把打包之后的 operation 设置到意图当中
i.setOperation(operation);
//跳转页面
startAbility(i);
}
}
}