草庐IT

#私藏项目实操分享#一个后端开发到鸿蒙开发的简单尝试

宇宙之一粟 2023-03-28 原文
笔者说:因为本人也从未接触 Android 开发,所以本文也是从小白入门的角度学习 HarmonyOS 开发,文中大量的内容和观点其实都可以从官方文档查阅到。写这篇文章大概也是从中精简内容,记录学习 HarmonyOS 的过程。

鸿蒙,万物之始

鸿蒙者,万物之始也

鸿蒙操作系统(HarmonyOS)最初在 2019 年的华为开发者大会上发布并且宣布开源,然后鸿蒙 2.0 在 2020 推出,又吸引了众多开发者的眼球。这是一款面向全场景分布式操作系统,开启万物智联新模式。这是一款跨平台开发的操作系统,兼容多种设备。按照官网的介绍:

HarmonyOS 主打的是 “1+8+N” 的全场景体验,如何解释呢?

  • “1”指的是主入口手机;
  • “8”指的是智慧屏、平板、PC、音响、手表、眼镜、车机和耳机8种设备;
  • “N”则指的是泛IoT硬件构成的华为HiLink生态,其中包括移动办公、智能家居、健康生活、影音娱乐、智能出行等各大场景下的智能硬件设备。
鸿蒙的英文名,之前为拼音 " HongMeng",后又 改为 Harmony ,有和谐,协调之义。更能体现鸿蒙 OS 的特点,比拼音更国际化了。

讲特点都是虚的,但也是需要讲的。鸿蒙的​​特点​​:

  • 分布式为基础的多终端屏幕共享,跨屏设计
  • 系统与硬件解耦,弹性部署
  • 应用一次开发,多端部署
但我们开发者的角度更多关心的是:如何开发?用什么语言开发?

毕竟,生态和社区还是很重要的。为此,Harmony 官方也给了一套完整的解决方案。

HarmonyOS 概述

想要学习鸿蒙系统开发,就不得不先从操作系统本身开始学习,了解鸿蒙操作系统到底是什么。

官方的定位是:

HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。

HarmonyOS 提供了支持多种开发语言的API,供开发者进行应用开发。支持的开发语言包括 Java、XML(Extensible Markup Language)、C/C++ 、 JS(JavaScript)、CSS(Cascading Style Sheets)和 HML(HarmonyOS Markup Language)。

对比 IOS 开发限于 SWIFT/Object-C,Android 开发使用 Kotlin/JAVA,鸿蒙就已经领先于市场上许多传统操作系统。

技术架构

层次结构的思想还是很重要的,类似其他操作系统的分层结构,。Harmony 脱胎于 Linux,HarmonyOS 也不例外采取了分层架构。

Linux 的系统结构

先让我们看一下 Linux 的系统结构,Linux 操作系统的架构主要有以下组件:内核、硬件层、系统库、Shell 和应用程序,就不得不提到这个很多书会提到的图:

  • 内核是操作系统的核心部分,负责 Linux 操作系统的所有主要活动。该操作系统由不同的模块组成,直接与底层硬件进行交互。内核提供所需的抽象来隐藏到系统的应用程序或低级硬件详细信息;
  • 系统库是特殊函数,用于实现操作系统的功能,不需要内核模块的代码访问权限;
  • Shell 是用户和内核之间的接口,它提供内核的服务。它来自用户的命令并执行内核的函数。Shell 以不同类型的操作系统存在,它们分为两种类型:命令行 Shell 和图形 Shell;
  • 应用程序易于执行个人和专业级别的任务,包括我们看到的图形界面、开发工具等;

HarmonyOS 系统架构

从​​文档​​来看:

HarmonyOS 与 Linux 类似,整体遵从分层设计,从下向上依次为:内核层系统服务层框架层应用层

系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。HarmonyOS技术架构如下所示。

感兴趣的朋友可以去读一下官方文档,仔细了解一下每层主要实现的功能。

而本文主要关注于应用层的知识,利用 HarmonyOS 进行应用开发,所以直接往下走。

HarmonyOS 应用开发

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。在HarmonyOS上运行的应用,有两种形态:

  • 传统方式的需要安装的应用。
  • 提供特定功能,免安装的应用(即原子化服务)。
需要安装的用户应用程序包以 APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability Package)以及描述每个 HAP 属性的 pack.info 组成。HAP 是 Ability 的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。App 的逻辑视图如下:

开发准备

本文以 Java 开发为例,

  1. 下载 HUAWEI DevEco Studio,这个开发工具是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用/服务开发。
  2. 安装完毕后打开后的界面如下:

  1. 点击 Create HarmonyOS Project,选择一个合适的 ability 模板,此处选择 Empty Ability(Java),如下图:

  1. 点击 next,然后配置我们的项目,比如取一个名字为 HelloWrold ,DevEco Studio 集成了 Phone、Tablet、TV、Wearable、LiteWearable等设备的典型场景模板。此处设备我选择 Phone :

  1. 点击完成,然后等待 Gradle 编译完成,自动进行工程的同步。

使用模拟器运行 HelloWorld

DevEco Studio 提供远程模拟器和本地模拟器,本文以远程模拟器为例进行说明。

  1. 首先需要华为开发者授权,在 在DevEco Studio菜单栏,点击Tools > Device Manager。

  1. 在 Remote Emulator 页签中点击 Login,然后会在默认浏览器中弹出华为开发者联盟帐号登录界面,请输入已实名认证的华为开发者联盟帐号的用户名和密码进行登录。登录完成后可以看到下图:

  1. 登陆成功后,点击界面的允许按钮进行授权。返回在设备列表中,选择 Phone -> P40,并点击 绿色的三角形 按钮,运行模拟器。

  1. 就可以连接上一个远程的 P40 界面:

  1. 点击 DevEco Studio 工具栏中的按钮运行工程,或使用默认快捷键 Shift+F10 运行该项目。
  2. 等候一会,我们就能不写一句代码就得到我们每个入门者梦寐以求的结果:“你好,世界”,如下:

恭喜我们,我们已经完成了一大壮举,没有写一句代码就实现了面向 HelloWorld 编程

总结

如果你能看到此处,说明你也是一个跟我一样入门移动端开发的小白,说实话,这篇文章目前没有什么技术含量,但不能阻碍我去学习 HarmonyOS,写下这篇文章。

万丈高楼平地起,只有先从自己快速能动手实践,才有动力继续学下去。如果你也跟我一样是 Java 使用者,还没有 Android 开发基础,我认为是可以动手学习更多关于鸿蒙开发的知识的。毕竟,目前相关文章和书籍还是比较少的,多探索还是有一定必要的。

最后,打个预告,下一篇将从 Java 开发的角度去体验更多 HarmonyOS 开发的乐趣,希望你也能看到。让我们下一篇文章再见!

有关#私藏项目实操分享#一个后端开发到鸿蒙开发的简单尝试的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  6. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  7. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

随机推荐