前几日,华为EMUI官方微博正式宣布改名为HarmonyOS。java
这不就是说,之后华为手机都是鸿蒙系统了嘛?鸿蒙还发出了一条视频,视频中显示2021年6月2号将开启鸿蒙操做系统及华为全场景新品发布会。预计如今支持EMUI11升级的机型,将所有支持升级鸿蒙系统。我这一瞅,这不就是明天准备推送了嘛,抓紧学习一波儿。程序员
以前一直有关注过鸿蒙系统,可是感受应该不会很快的大面积推送系统。直到看到这个新闻后,我才以为是时候学一下鸿蒙系统了。编程
学习鸿蒙系统很是简单,目前鸿蒙的文档、开发者社区、学习视频都很是多。个人主要学习方法就是跟着官网读一遍文档。而后文档里面没了解过概念知识点整理一下。json
文档中有一段关于鸿蒙的系统定位,看到这段文字介绍,就能够总结出鸿蒙系统的三大特色:swift
从这段学习当中,让我看到了鸿蒙的愿景很是远大。不只仅是能够替代安卓系统,还能够将全部的智能设备链接在一块儿,实现万物互联。后端
我我的感受,想学鸿蒙的话,主要根据这张技术架构图,应该就够了。剩下的全部相关知识无非就是根据这张技术架构图进行的扩展和补充。因此官方给出的这张技术架构图就是重中之重了。安全
鸿蒙系统从下向上依次分为:内核层、系统服务层、架构层和应用层。这四层初看起来,跟隔壁的安卓系统架构图很是像啊,但又彻底不同。鸿蒙系统功能能够根据实际须要,量身定制某些非必要的系统功能和模块。架构
阅读文档时,系统服务层提供了方舟多语言运行时子系统。其中发现了以下这句话:框架
方舟运行时提供了C/C++/JS多语言运行时和基础的系统类库,也为使用方舟编译器静态化的Java程序(即应用程序或框架层中使用Java语言开发的部分)提供运行时。
按照个人理解,这应该就是鸿蒙能够实现多语言开发的关键吧。而后从网上找了一篇文章,瞬间明白了方舟编译器作的事情。分布式
无论是早期的电子管仍是如今的半导体晶体管,这些计算的基本单位能识别的只有电平的高低,在计算机中咱们就用0和1来表示。1和0的各类组合就是机器是能看懂的语言,也就是机器码。计算机的初期,人们就是用0和1来写成程序命令的,这种反人类的编码显然是程序员痛恨的,因而有了汇编语言,用字符来表示命令编码,这就方便了不少,可是大型程序依然不可行,C\C++,JAVA等高级语言应运而生。能够说高级语言是为程序员设计的,也是为大型的软件工程设计的,所以逐步诞生了面向对象编程的继承、多态以及回调、反射等机制,无论高级语言怎么变化,处理器可以识别的都只是机器码,编译器就承担了这个翻译转化的角色,这也是方舟编译器要作的事儿。
如今的手机系统iOS之因此比Android系统更流畅的一个缘由,就是由于iOS没有像Android同样的虚拟机。Java之因此能够作到跨平台的缘由虽然是由于有虚拟机,可是在手机操做系统上,虚拟机却拖累了Android。虚拟机打包成的字节码虽然能够作到于机器硬件无关,可是当程序执行的时候,仍是须要再次编译成机器码才能执行。也就是Java开发完的程序须要编译两次才能够执行,反观iOS则只须要一次。由于iOS有集成swiftc编译命令的Xcode工具。
鸿蒙比安卓会更流畅的一个缘由也是由于没有虚拟机,它采用了和iOS同样的机制,生成安装包时直接编译成合适的机器码。
从上面的图中能够发现,安卓应用在运行前须要静态编译,而后在ART虚拟机中,还须要执行解析器解析代码。逐字解析以后,还须要JIT。这就产生了额外的开销。反观方舟编译器,在开发阶段,就已经将其可执行文件进行了静态编译工做,剩下的只须要安装和运行便可。
方舟编译器除了去掉虚拟机,还实现了多语言联合开发。如今开发一款APP不多只使用到一种语言的,在开发应用时会使用到各类其余语言开发的库,好比C语言。不一样语言之间也是须要通讯、调用的。在安卓阵容中,采用的是不一样语言在单独的环境中,而后经过中间代码编译成机器码去执行。并且是当程序运行时。这样就会产生系统额外的开销。
方舟编译器采用的是,不一样语言在开发环境中,就编译成一套可执行文件,而后在运行环境中执行。
总结来讲,方舟编译器针对现有的安卓问题,采用解决思路就是开发阶段解决。
我以为,经过这样的策略,对用户而言手机系统APP确定是更快更流畅了,由于全部的开销在开发阶段就解决的差很少了,那程序运行时天然是快的。这就让我想起了Xcode,如今光下载Xcode 12.5就须要11.7G的存储空间,我电脑中Xcode就占用了25G的存储空间。
在开始学习以前,了解一下HarmonyOS应用的基础知识。HarmonyOS应用软件包由HAP(HarmonyOS App Package)和描述文件pack.info组成。一个HAP由代码、资源、三方库和配置文件组成。
一个App Pack的逻辑图如上图,这张图包含了不少信息:
华为开发者学院有一我的才计划,里面有一门课程HarmonyOS应用开发系列课(基础篇)。经过本课程的学习,开发者可以具有运用HarmonyOS顺利开发应用的能力。
接下来就是对这门课程进行学习,同时结合官网文档进行补充行学习。
首先根据官方文档给出的快速入门建立一个能够实现页面跳转的小应用。
个人开发环境是MacOS,直接下载和安装DevEco Studio便可。同时DevEco Studio须要登陆华为开发者帐号,由于后续开发是须要使用到远程模拟器,因此必须得有华为开发者帐号。
安装完成后,须要配置一下开发环境。按照官方给出的配置开发环境的方法,自动下载安装了最新版本的HarmonyOS SDK安装包。其中默认使用的是Java语言的SDK。由于还没开始学怎样用JS开发,我先不安装JS语言的SDK包。如今的版本已是2.1.1.20了,比文档上面要更新一些了。这个版本是2021年4月30日最新发布的一个版本。并且能够发现个人API Version已是5了,后面建立项目时,须要选择的版本应该也是对应上的。
老规矩,新环境都会建立一个hello world,代表环境是否搭建成功。
在建立项目时,我选择的是API Version 5, 由于想体验最新的API。
要想使用模拟器,必须登陆华为开发者帐号。
登陆帐号后,选择P40机型做为模拟器,而后运行代码到模拟器中。我运行完结果和文档上面给出的图片,有些出入。我界面当中的“Hello World”文字,并无在垂直方向居中,而是定格在了最上面。可是也说明了,开发环境搭建完成了。
在HarmonyOS中提供了Java UI框架,而Java UI框架又提供了两种布局方式:XML布局和代码布局。为撒HarmonyOS会提供xml布局方式呢?
我想这多是架构者须要吸引部分Android开发者们,加入到鸿蒙系统的开发当中来。提供多种不一样的开发方式,帮助鸿蒙系统发展和壮大。
文档这里并无说怎么建立一个Button按钮或者Text文本,而是直接给出了一段代码。可是文档中给出了是采用DependentLayout布局,并且给出了Text和Button组件的链接地址。
我用DevEcoStudio建立的项目,按照文档提示,打开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: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="$string:mainability_HelloWorld" ohos:text_size="50px" /> </DirectionalLayout>
对比了一下文档给出代码,发现布局方式不同,我这里使用的是DirectionalLayout方式布局,而文档使用的是DependentLayout方式布局。
按照文档给出的步骤开始后,又发现一个问题,每次运行模拟器都须要从新安装应用,从新运行应用才行,好像没有相似Flutter同样的热更新。
后来发现使用文档中提到的预览器能够解决实时预览界面效果的问题。
最后我调整的代码以下:
<?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: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="$string:mainability_HelloWorld" ohos:text_size="50px" /> <Button ohos:id="$+id:button" ohos:width="match_content" ohos:height="match_content" ohos:text="Next" ohos:text_size="19fp" ohos:text_color="#FFFFFF" ohos:top_padding="8vp" ohos:bottom_padding="8vp" ohos:right_padding="70vp" ohos:left_padding="70vp" ohos:center_in_parent="true" ohos:layout_alignment="horizontal_center" ohos:below="$id:text_helloworld" ohos:margin="10vp" ohos:background_element="$graphic:background_button"/> </DirectionalLayout>
由于是拷贝的官方文档代码,可是须要调整的地方为:
ohos:layout_alignment="horizontal_center"
用代码建立UI布局就是在Java文件中,编写布局代码。直接拷贝文档给出的代码便可。
此次运行的效果跟文档上面一致了。而后有几处注意点
至此文档上的快速入门手册就运行成功了。虽然代码全是拷贝,也并不知道其中的概念。因此还须要进一步学习。
掌握了上面这些基础知识后,再去学习华为给出的课程就很是简单了。认真看一遍官网给出的视频介绍,而后听听每节课后面的答疑,最后作作每节课的考核。全都完成以后,只须要作一份毕业考试题,就能够了。
这是我第一次线上学习带有华为认证的课程,并且今天恰好是6月1儿童节,但愿本身天天都依然充满童心检查学习下去✌️✌️✌️。
这个证书其实就是证实有了一个对HarmonyOS基础的认识而已。离真正能开发HarmonyOS应用的能力还差很多距离,后续还须要继续努力💪💪💪。