HarmonyOS 2.0应用开发实战教程

PS:学习B站全网首套鸿蒙HarmonyOS 2.0应用开发实战教程 的笔记
地址:B站全网首套鸿蒙HarmonyOS 2.0应用开发实战教程


⼀、移动应⽤开发的介绍

移动应⽤开发:

  • Android
  • IOS
  • HarmonyOS (鸿蒙)
    在这里插入图片描述

⼆、HarmonyOS介绍

文档概览-HarmonyOS应用开发官网

2.1 系统的定义

2.1.1 系统的定位

HarmonyOS有三⼤特征:

  • 搭载该操作系统的设备在系统层⾯融为⼀体、形成超级终端,让设备的硬件能⼒可以弹性 扩展,实现设备之间 硬件互助,资源共享。 对消费者⽽⾔,HarmonyOS能够将⽣活场景中的各类终端进⾏能⼒整合,实现不同终端 设备之间的快速连接、能⼒互助、资源共享,匹配合适的设备、提供流畅的全场景体验。
  • ⾯向开发者,实现⼀次开发,多端部署。 对应⽤开发者⽽⾔,HarmonyOS采⽤了多种分布式技术,使应⽤开发与不同终端设备的 形态差异⽆关,从⽽让开发者能够聚焦上层业务逻辑,更加便捷、⾼效地开发应⽤。
  • ⼀套操作系统可以满⾜不同能⼒的设备需求,实现统⼀OS,弹性部署。 对设备开发者⽽⾔,HarmonyOS采⽤了组件化的设计⽅案,可根据设备的资源能⼒和业 务特征灵活裁剪,满⾜不同形态终端设备对操作系统的要求。
2.1.2 系统架构

请添加图片描述

  • 内核层:提供⼿机操作系统的基础能⼒。HarmonyOS采⽤多内核的系统设计,基于 Linux内核、LiteOS,使⽤了Linux的微内核(使⽤了Linux的最简功 能)
    • Linux内核: ⼿机操作系统的内核
    • LiteOS内核:智能硬件的内核
  • 系统服务层:HarmonyOS的核⼼能⼒集合,这些能⼒是有系统本身决定的,为我们应⽤ 开发提供了服务调⽤功能。系统服务层提供的能⼒是可以被我们开发的应⽤进⾏调⽤的。
  • 框架层:为HarmonyOS的应⽤开发提供了不同语⾔程序调⽤的接⼝

2.2 鸿蒙发展史

2.2.1 “鸿蒙”

盘古开天辟地——⼀⽚混沌(鸿蒙时代) ⽴志要在⼿机系统的国产化道路上开天辟地

2.2.2 发展史
  • 2012年,华为开始规划智能操作系统“鸿蒙”
  • 2019年5⽉,华为申请“鸿蒙”商标
  • 2019年5⽉17⽇,发布鸿蒙系统
  • 2019年8⽉,鸿蒙正式版发布,实⾏开源
  • 2020年9⽉,鸿蒙2.0(beta)
  • 2021年6⽉2⽇晚上,华为线上发布HarmonyOS 2.0—⼿机

2.3 鸿蒙与安卓的区别

2.3.1 内核
  • 安卓:基于Linux的内核设计,对Linux的依赖很⼤(也就是说Android操作系统⼤多数功能都 是依赖Linux)
  • 鸿蒙:采⽤了多内核设计,Linux内核+LiteOS内核,操作系统最⼩限度的依赖Linux内核
2.3.2 运⾏效率
  • 安卓:应⽤的运⾏是基于虚拟机的 (Java—JDK编译器—字节码—虚拟机—操作系统)

  • 鸿蒙:⽅⾈编译器 (Java----⽅⾈编译器—机器码—操作系统)

据说, 鸿蒙系统运⾏效率相较于安卓提升了50%+

2.4 技术特性 与 系统安全

2.4.1 技术特性
  • 硬件互助,资源共享
  • ⼀次开发,多端部署
  • 统⼀OS,弹性部署
2.4.2 系统安全
  • 正确的⼈:⾼效安全的⽤户身份识别
  • 正确的设备:设备的识别
  • 正确的使⽤数据:数据的安全

三、第⼀个鸿蒙应⽤

3.1 开发准备

3.1.1 开发环境搭建(Java)
  • 安装JDK、配置环境变量
  • 下载安装DevEco Studio集成开发环境(基于Idea开发的专⻔⽤于鸿蒙应⽤开发的IDE)

下载地址

华为操作系统DevEco Studio和SDK下载与升级 | HarmonyOS开发者

安装

  • 运行安装包
  • 点击Next
  • 选择安装目录
  • 创建桌面快捷方式
  • 开始安装

运行DevEco Studio

第一次启动开发环境会下载鸿蒙开发所需要的SDK
  • 双击桌⾯快捷⽅式,打开DevEco Studio
  • 开始使⽤
  • 选择SDK⽬录
  • 点击Next进⼊下⼀步
  • 选择Accept,点击Next开始下载SDK
  • 点击Finish完成下载,开始使⽤
3.1.2 注册华为帐号

注册_华为帐号 (huawei.com)

3.2 创建鸿蒙应⽤

请添加图片描述
在这里插入图片描述
在这里插入图片描述

3.3 鸿蒙应⽤⽬录结构

在这里插入图片描述

3.4 运⾏项⽬

3.4.1 启动鸿蒙模拟器
  • Tools—Device Manager
  • 在弹出的窗⼝装点击 Login 按钮,登录华为帐号
  • 启动⼀个模拟器

在这里插入图片描述

3.5 鸿蒙应⽤的启动流程

3.5.1 config.json

config.json 是鸿蒙应⽤的主配置⽂件

  • app 配置 :定义当前应⽤的唯⼀标识

    • bundleName应用的唯一标识(一般包名用公司名+应用名称)
    • version 应⽤的版本
  • module 配置: ⽤于声明当前应⽤的信息(包、主类、主界⾯、功能模块声明、适配设 备类型等等)

    • mainAbility声明当前应用启动时默认加载的Ability

    • deviceType声明当前应用适配的设备类型

    • abilities 声明当前应⽤中每个ability的配置信息

      • 创建一个ability那么在config.json中会自动生成对应的ability的配置信息。

      在这里插入图片描述
      在这里插入图片描述

3.5.2 应⽤启动流程
  • 启动鸿蒙应⽤加载config.json⽂件,根据 mainAbility 配置加载启动应⽤的主界⾯

    "mainAbility": "com.example.myapplication.demo01.MainAbility"
    
  • 执⾏MainAbility的 onStart ⽅法

    MainAbility是⼀个显示界⾯的容器,在onStart⽅法中通过调⽤ setMainRoute ⽅法来指 定当前界⾯容器中显示的视图界⾯

    // ability相当于一个容器(或者说是浏览器窗口),
    // 在容器里面通过填充一个视图slice(html中的body)来展示。
    // MainAbilitySlice就是⼀个界⾯
    super.setMainRoute(MainAbilitySlice.class.getName());
    
  • 执⾏MainAbilitySlice中的 onStart 完成界⾯的渲染

    slice是⼀个界⾯,界⾯中显示什么视图,就是通过onstart⽅法来加载渲染的

    在这里插入图片描述
    在这里插入图片描述

3.5.3 你好,世界哪里来的

在这里插入图片描述

$string : 表示引用的一sing,表示要去string文件中寻找键值对,如图寻找key为:mainability_HelloWorld 的值。

四、Ability框架

4.1 Ability介绍

Ability是应⽤所具备能⼒的抽象,也是应⽤程序的重要组成部分。⼀个应⽤可以具备多种能⼒

(即可以包含多个Ability),HarmonyOS⽀持应⽤以Ability为单位进⾏部署。

Ability可以分为 FA(Feature Ability)PA (Particle Ability) 两种类型,每种类型为

开发者提供了不同的模板,以便实现不同的业务功能。

  • FA⽀持Page Ability:

    Page模板是FA唯⼀⽀持的模板,⽤于提供与⽤户交互的能⼒。⼀个Page实例可以包含⼀组相关⻚⾯,每个⻚⾯⽤⼀个AbilitySlice实例表示。

    在这里插入图片描述

  • PA⽀持Service Ability和Data Ability:

    • Service模板:⽤于提供后台运⾏任务的能⼒。
    • Data模板:⽤于对外部提供统⼀的数据访问抽象。

在这里插入图片描述

4.2 PageAbility

4.2.1PageAbility简介

⼀个PageAbility相当于⼀个⻚⾯的容器(浏览器窗⼝),⼀个AbilitySlice相当于显示在容器

中的⼀个⻚⾯(HTML)

Page模板(以下简称“Page”)是FA唯⼀⽀持的模板,⽤于提供与⽤户交互的能⼒。
⼀个Page可以由⼀个或多个AbilitySlice构成,AbilitySlice是指应⽤的单个⻚⾯及其控制逻辑的总和(相当于⼀个HTML⽂件)。在⼀个Abiliy种可以包含多个Slice

商品管理: 	ProductAbility(PageAbility):
 goods-list.html	ProductListSlice
 goods-detail.html 	ProductDetailSlice
4.2.2 创建AbilitySlice
  • AbilitySlice创建slice包中

  • 创建步骤:

    • 创建⼀个类继承 ohos.aafwk.ability.AbilitySlice 类

      public class MainAbilitySlice2 extends AbilitySlice {
      
      }
      
    • resources/base/layout ⽬录下创建布局⽂件

      <?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:orientation="vertical">
       <Text
       ohos:height="match_content"
       ohos:width="match_content"
       ohos:text="这是测试⽂本"
       ohos:text_color="#ff0000"
       ohos:text_size="40vp"></Text>
      </DirectionalLayout> 
      
    • 在创建的 AbilitySlice 类中重写 onStart ⽅法,调⽤setUIContent⽅法加载布局⽂件

      通过 ResourceTable 加载resouces⽬录下的资源

      public class MainAbilitySlice2 extends AbilitySlice {
          @Override
          protected void onStart(Intent intent) {
              super.onStart(intent);
       		//定义slice视图组件(Java,XML)
       		//setUIContent(int); 加载应⽤的 布局⽂件(xml) 作为当前slice的视图
       		setUIContent(ResourceTable.Layout_ability_main_slice2);
      	}
      }
      
4.2.3 PageAbility⽣命周期

⼀个Page中可以包含多个Slice,但是只能同时显示⼀个slice,如何设置PageAbility默认

显示的slice?

在⼀个Page Ability中提供了多个声明周期⽅法,这些⽅法在当前PageAbility加载的不同

阶段会⾃定调⽤

在这里插入图片描述

说明

INACTIVE状态是一种短暂存在的状态,可理解为“激活中”。

public class MainAbility extends Ability {
     /**
      * 当系统⾸次创建当前PageAbility实例时,⾃动调⽤onstart⽅法。也就是说对于⼀个Page⽽⾔,onStart⽅法只会执⾏⼀次
      */
     public void onStart(Intent intent) {
     	super.onStart(intent);
     	super.setMainRoute(MainAbilitySlice2.class.getName());
     	System.out.println("--------------onStart");
     }
    
     /**
      * 当前Page进⼊active状态进⼊到⼿机前台获取焦点时,会触发onActive⽅法的执⾏
      */
     protected void onActive() {
     	super.onActive();
     	System.out.println("--------------onActive");
 	}
    
     /**
      * 当前PageAbility失去焦点(⻚⾯切⼊到后台、切换到其他Page),触发onInactive⽅法的执⾏
      */
     protected void onInactive() {
     	super.onInactive();
     	System.out.println("--------------onInactive");
     }
    
     /**
      * 当前PageAbility切换到后台,不可⻅时,触发onBackground执⾏
      */
     protected void onBackground() {
     	super.onBackground();
     	System.out.println("--------------onBackground");
     }
     /**
      * 当PageAbility从后台不可⻅状态(⻚⾯在后台、但是没销毁)切换到前台可⻅状态时触发 onForeground执⾏
      */
     protected void onForeground(Intent intent) {
     	super.onForeground(intent);
     	System.out.println("--------------onForeground");
     }
     /**
      * 当前Page销毁时,触发onStop的执⾏
      */
     protected void onStop() {
     	super.onStop();
     	System.out.println("--------------onStop");
     }
}
4.2.4 PageAbility⽣命周期

Slice相当于一个网页,Slice中显示的视图是通过组件来声明的,Slice中的组件加载支持两种方式:

  • Java代码
  • xml布局文件

onStart方法:在Slice实例创建时执行,用于载入当前Slice的视图组件,在onStart方法中通过调用setUIContext来加载视图组件

setUIContext方法提供了2个重载:

setUIContext(int):通过布局⽂件的ID,加载resources/base/layout⽬录下的布局⽂件

完成⻚⾯的渲染

setUIContext(ComponentContainer) :通过加载⼀个使⽤Java代码创建的组件完成⻚⾯

的渲染

XML****⽅式渲染
  • 创建布局⽂件:ability_main_slice2.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:orientation="vertical">
    
        <Text
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:text="这是测试文本"
            ohos:text_color="#ff0000"
            ohos:text_size="40vp"></Text>
    
    </DirectionalLayout>
    
  • 在Slice的onStart⽅法中加载布局⽂件:

    每创建一个布局文件(或者说每个资源都会创建一个ID)都会生成一个ID,所以布局文件调用的是setUIContext(int)方法
    在这里插入图片描述

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        // 定义slice视图组件(java,xml)
        // setUIContent(int); 加载应用的 布局文件(xml)作为当前slice的试图
        super.setUIContent(ResourceTable.Layout_ability_main_slice2);
    }
    
Java⽅式渲染
  • 使⽤Java代码创建组件,渲染到slice中

    public class MainAbilitySlice2 extends AbilitySlice {
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
            // 定义slice视图组件(java,xml)
            // setUIContent(int); 加载应用的 布局文件(xml)作为当前slice的试图
    //        super.setUIContent(ResourceTable.Layout_ability_main_slice2);
    
            // ComponentContainer(组件容器)
            DirectionalLayout directionalLayout = new DirectionalLayout(this);
            directionalLayout.setOrientation(Component.DRAG_VERTICAL);
            // Component(组件)
            Text text = new Text(this);
            text.setText("Hello Boys");
            text.setHeight(40);
            text.setTextSize(40);
            // 将组件放到组件容器中
            directionalLayout.addComponent(text);
            // 将组件容器渲染到slice中
            setUIContent(directionalLayout);
        }
    }
    
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
学前必读:HarmonyOS学习资源主题分享 学前必读:OpenHarmony-联盟生态资料合集 常见问题(JAVA、JS开发模拟器、模拟器运行) 1.常见问题之HarmonyOS元服务的设计与开发解析 2.常见问题之Java开发 3.常见问题之JS开发 4.常见问题之模拟器登录 5.常见问题之模拟器运行 6.常见问题之如何使用JsJava开发HarmonyOS UI 7.常见问题之应用配置 8.常见问题之预览器运行 技术解读(框架、场景案例解读) 1.技术解读之HarmonyOS轻量JS开发框架与W3C标准差异分析 2.技术解读之HarmonyOS驱动加载过程分析 3.技术解读之HarmonyOS组件库使用实践 4.技术解读之华为架构师解读:HarmonyOS低时延高可靠消息传输原理 5.技术解读之解密HarmonyOS UI框架 6.技术解读之如何从OS框架层面实现应用服务功能解耦 生态案例(游戏、农业、教育) 1.生态案例:【开发者说】重塑经典,如何在HarmonyOS手机上还原贪吃蛇游戏 2.生态案例:HarmonyOLabo涂鸦鸿蒙亲子版 3.生态案例:HarmonyOS分镜头APP案例 4.生态案例:HarmonyOS时光序历史学习案例 5.生态案例:HarmonyOS先行者说 宝宝巴士携手HarmonyOS共同打造儿童教育交互新体验 6.生态案例:HarmonyOS智能农场物联网连接实践 7.生态案例:分布式开发样例,带你玩转多设备pptx 8.生态案例:华为分布式日历应用开发实践 HarmonyOS概述(官网资料解读) 1.HarmonyOS概述:技术特性 2.HarmonyOS概述:开发工具与平台 3.HarmonyOS概述:系统安全 4.HarmonyOS概述:系统定义 5.HarmonyOS概述:下载与安装软件 6.HarmonyOS概述:应用开发基础知识 7.HarmonyOS概述:最全HarmonyOS文档和社区资源使用技巧 HarmonyOS基础入门必看视频课 【视频合集】入门到进阶视频学习资料合集30+ 【直播回顾】HarmonyOS应用开发系列课基础篇_从零开始开发HarmonyOS应用 【直播回顾】HarmonyOS应用开发系列课基础篇_如何让HarmonyOS应用调试速度翻倍 【直播回顾】HarmonyOS应用开发系列课基础篇_HarmonyOS分布式应用开发实践 运行第一个HarmonyOS Demo应用 N个Codelab案例轻松入门 1.【Codelab】HarmonyOS基于图像模块实现图库图片的四种常见操作 2.【CodeLab】手把手教你创建第一个手机“Hello World” 3.【Codelab】如此简单!一文带你学会15个HarmonyOS JS组件 4.【Codelab】懒人“看”书新法—鸿蒙语音播报,到底如何实现? 5.【Codelab】基于AI通用文字识别的图像搜索,这波操作亮了 6.【Codelab】开发样例概览
Python是一种简洁、易学且功能强大的编程语言,非常适合进行app开发。下面是一个简单的300字中文回答关于Python app开发教程的内容: app开发是一种非常热门和有前景的技能,而Python是一个理想的选择。要学习Python app开发,首先应该掌握Python的基本知识,比如语法、变量、数据类型等。可以通过在线教程、教科书或参加培训班来学习这些基础内容。 当你掌握了基本的Python语法后,下一步就是学习使用第三方库来开发app。Python有很多优秀的库可以帮助你开发app,比如Django、Flask等。这些库提供了丰富的功能和工具,可以让你快速搭建一个功能完备的app。 在学习库的同时,也要了解一些基本的app开发概念,比如用户界面设计、数据存储和处理、网络通信等。了解这些概念可以帮助你更好地规划和实现你的app。 在实际的app开发中,最好有一个实际的项目来练手。可以选择一个自己感兴趣的主题,然后详细规划和设计你的app。通过实际项目的实践,你可以更好地理解和掌握Python app开发的技巧和方法。 最后,还可以参考一些优秀的Python app开发教程和案例。这些教程和案例可以帮助你更深入地了解Python app开发的各个方面,并提供一些建议和指导。 总之,学习Python app开发需要一点耐心和实践,但它可以给你带来很多机会和发展空间。希望这些简单的指引可以帮助你入门并顺利掌握Python app开发的技能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值