学习鸿蒙先解决这几个是关键问题~

HarmonyOS 是最近最火的操作系统,HarmonyOS 宣布删除 Android 代码之后,正式向世界上第三大操作系统有迈进了一步,HarmonyOS 前期为了完成从 Android 到 HarmonyOS 的过渡,在设计之初 HarmonyOS 采用了双框架架构设计。

从图中可以看出无论 HarmonyOS 还是 Android 底层都是 Linux 内核,在 Linux 内核的上一层,还有硬件抽象层,从这一层开始将 HarmonyOS 和 Android 分为了两部分,等到发展到一定阶段之后,HarmonyOS 部分会逐步替换掉 Android 部分。

如今 HarmonyOS 完全去 Android 化势在必行了,在技术多变的时代,顺应技术的趋势,我们也不得不去学习 HarmonyOS,我也开始准备更新鸿蒙系列文章了,这次鸿蒙系列文章会以文章 + 案例 + 实战项目的形式分享给正在学习鸿蒙的小伙伴。

在学习 HarmonyOS 过程中,发现 HarmonyOS 的问题太多了,而且很多问题在网上都找不到答案,只能自己一点一点去摸索,走了不少弯路,这篇文章主要记录了我在学习鸿蒙过程中遇到的问题,分享给正在学习的鸿蒙的你,避免少走一些弯路。

鸿蒙目前还处于初期发展阶段,网上对鸿蒙问题的解答太少了,而群是一个非常好的沟通渠道,相比于自己去摸索,通过与大家的沟通交流,效率会提高很多。所以我想建一个鸿蒙学习交流群,诚邀各位小伙伴一起来打造一个良好的学习氛围沟通群。

但是我不知道有多少人对鸿蒙开发感兴趣,因此我想做个简单的统计,正在学习或者对鸿蒙感兴趣的,可以在文章中右下角点个在看,或者给这篇文章点个赞。如果学习的人多的话,我们可以拉个群,互相分享经验。

Stage 模型与 FA 模型的区别

当我们创建 Harmony 工程的时候,会让我们选择工程的模型。

Harmony 的工程模型,分别为 Stage 模型与 FA 模型。

  • FA 模型:Harmony 初期的模型,仅适用简单的应用开发,比如笔记本、闹钟之类的软件。因为在 FA 模型,每个应用组件独享一个虚拟机,占用的运行内存会更多

  • Stage 模型:官方推荐的模型,相比于 FA 模型它适用于复杂应用开发。在 Stage 模型中多个应用组件共享同一个虚拟机,可以减少运行内存的占用,同时为了降低性能的损耗,保障用户体验,Harmony 对后台应用会有严格的管理机制

Harmony 后台管理机制

Harmony 对后台应用会有严格的管理机制,普通应用是不能随意驻留在后台,除非你的应用是国民级别的应用,Harmony 对后台应用会进行有序的治理,系统定义了四类后台任务。在这里只需要了解即可,后面的文章我会详细的分析。

配置环境变量

无论是开发 Android 还是开发 HarmonyOS,第一步都是要配置好环境变量,方便后期使用。

在命令行中配置 hdc

hdc 等同于 adb 是 HarmonyOS 为开发人员提供的用于调试的命令行工具,通过该工具可以在 windows/linux/mac 系统上与真实设备或者模拟器进行交互。

Mac 在不同的系统中使用不同的 shell, 使用下面命令查看自己使用的是哪一个 shell。

echo $SHELL 
  • 如果输出结果为 /bin/bash,你的配置文件是 .bash_profile,打开文件命令 vi .bash_profile

  • 如果输出结果为 /bin/zsh,你的配置文件是 .zshrc, 打开文件命令 vi .zshrc

打开配置文件,将下面的内容添加到文件末尾。记得将「用户名目录」修改为你电脑的用户名。

export HARMONY\_HOME\=/Users/用户名目录/Library/Huawei  
export HARMONY\_SDK\_HOME\=$HARMONY\_HOME/sdk  
export PATH\=$HARMONY\_SDK\_HOME/hmscore/3.1.0/toolchains:$PATH

保存文件,执行下面命令立即生效。

  • 如果配置文件是 .bash_profile,执行 source ~/.bash_profile

  • 如果配置文件是 .zshrc,执行 source ~/.zshrc

最后验证 hdc 是否配置成功。

hdc \-v

hdc 和 adb 一样也有一堆命令,后期我会总结好分享给大家。

在命令行中配置 ohpm

OHPM CLI 作为鸿蒙生态三方库的包管理工具,支持 OpenHarmony 共享包的发布、安装和依赖管理。这个工具在开发中经常会用到,比如在模块中依赖三方库,我们可以使用 ohpm 下载安装第三方库。所以配置好 ohpm 环境变量,方便我们在开发中使用。

打开配置文件

  • 如果配置文件是 .bash_profile,执行 vi ~/.bash_profile

  • 如果配置文件是 .zshrc,执行 vi ~/.zshrc

将下面的内容,添加到配置文件末尾。记得将「用户名目录」修改为你电脑的用户名。

export HARMONY\_HOME\=/Users/用户名目录/Library/Huawei/  
export PATH\=$HARMONY\_HOME/ohpm/bin:$PATH

保存文件,执行下面命令立即生效。

  • 如果配置文件是 .bash_profile,执行 source ~/.bash_profile

  • 如果配置文件是 .zshrc,执行 source ~/.zshrc

最后验证 ohpm 是否配置成功。

ohpm \-v

但是在下载安装 ohpm 工具包和使用 ohpm 时可能会出现不同的错误,这里列了几个常见的错误。

ohpm install failed
Error: execute install task failed, component ohpm.zip.  
Error: execute 'ohpm install' failed.

这是由于 NPM 以前版本中的一个 bug 导致,运行下面的命令即可解决。

sudo chown -R 501:20 “/Users/替换为你mac的用户名/.npm”

ohpm registry is empty

创建 Harmony 项目之后 build 时可能出现 ohpm registry is empty 的错误。

ohpm ERROR: The registry is empty \- edit .ohpmrc file or use "ohpm config set registry your\_registry" command to set registry.  
ohpm ERROR: Install failed  

想解决这个问题,我们需要在 DevEco Studio 中配置 ohpm 仓库的地址,按照下面的路径打开 Ohpm 窗口。

DevEco Studio -> Perferences -> Build, Execution, Deployment -> Ohpm

点击 Optimize Config 会弹出了一个界面。

ohpm registry 中输入 ohpm 仓库的地址并勾选。

https://repo.harmonyos.com/ohpm/

保存成功之后,重新 build 项目即可成功。

真机和模拟器无法运行

首先检查你的 DevEco Studio 版本是否是 3.1 Release,这个版本可能存在一些问题。

真机无法连接

我用 usb 连接真机,在 DevEco Studio 设备管理器中无法显示,用命令查看已经连接上了,我猜测是这个版本的问题,于是我尝试降级到 DevEco Studio 3.1 Beta2 正常了。

本地模拟器无法运行

从 DevEco Studio 3.1 开始支持两个模拟器,API 版本分别为 6、9,无论哪个模拟器都无法运行。

于是我查看了 鸿蒙的开发文档 DevEco Studio >=3.1 本地模拟器仅支持以下系统中运行。

  • Windows 系统:内存推荐为 16GB 及以上。

  • macOS 系统:内存推荐为 8GB 及以上。如果是 ARM 版本的 macOS,macOS 版本需在 12.2 及以上,否则将无法运行本地模拟器。

但是我的 macOS 的版本是 12.5.1 不仅本地模拟器无法运行,而且真机连接了也无法显示。

我猜测这个问题应该也是 DevEco Studio 版本的原因,于是我尝试降级到 DevEco Studio 3.1 Beta2,成功运行 DevEco Studio 支持的模拟器。

但是这里需要注意的是如果你的 macOS >=10.14 and macOS < 12.2 只能运行 API 版本是 6 的模拟器。

如果有遇到和我一样问题的小伙伴,可以采用临时方案,尝试降级 DevEco Studio 版,等待官方解决吧。

如何解决安装错误

好不容易解决了开发工具的问题,满心欢喜想运行鸿蒙应用体验一下,结果安装应用时报错了,让我喝杯茶压压惊。

这是因为运行的设备(模拟器和真机)和 SDK 版本的不匹配,因此会报 INSTALL_PARSE_FAILED_USESDK_ERROR 错误。

想解决这个问题,需要将 compileSdkVersioncompatibleSdkVersion 以及 SDK 版本需要与运行设备的 apiVersion 对应起来。

但是我们不能简单修改配置文件中 compileSdkVersion 和 c ompatibleSdkVersion 的版本号,因为使用不同的 HarmonyOS Sdk 版本,创建的 HarmonyOS 工程的目录结构和开发语言都不相同。

  • API Version 4~7 构建体系是由 Gradle 构建工具和构建插件组成,不要基于这个版本去开发,不然后期从 Gradle 迁移到 Hvigor 是件非常痛苦的事

  • API Version 8~9 构建体系是由 Hvigor 构建工具和构建插件组成

开发语言也不一样:

  • API Version >= 9 仅仅支持 ArkTS

  • API Version == 8 支持 ArkTS 和 JS

  • API Version == 7 支持 ArkTS 、 JS 和 Java

  • API Version < 7 支持 JS 和 Java

所以我们不能简单的修改 compileSdkVersioncompatibleSdkVersion 的版本,对于我们初学者,如果出现这个问题,建议重新创建一个新的工程。

新建项目时 Compile Sdk 应该选择与你运行的设备(模拟器和真机) apiVersion 相对应的版本号。

如何查看运行的设备(模拟器和真机) apiVersion 的版本

这里我们需要用到 hdc 工具,hdc 的配置在前面已经介绍过了,hdc 的用法等价于 adbhdc 如何使用,后期我会总结好分享给大家。

hdc shell  
getprop hw\_sc.build.os.apiversion

输出结果即是设备(模拟器和真机) apiVersion 的版本。

运行项目常见错误

当我以为一切都正常的时候,运行项目,有出现了一个新的错误,真令人崩溃,跑起一个项目怎么这么难。

对应的错误信息。

{  
 instancePath: 'app.compileSdkVersion',  
 keyword: 'exclusiveMinimum',  
 params: { comparison: '>', limit: 7 },  
 message: 'must be > 7',  
 location: '/Users/用户名目录/Documents/codebase/harmonyOs/Application/build-profile.json5:4:27'  
}

这是因为创建的是 Hvigor 工程,而 Hvigor 工程支持最低的 apiVersion 版本是 7,而我修改了 apiVersion 的版本 < 7, 因此运行的时候会出现上面的错误。因此我们应该选择 Compile Sdk 和你运行设备(模拟器和真机) apiVersion 相对应的版本号。

在鸿蒙模拟器,运行 Android 应用

Android 同学都体验过 Android Studio 自带的模拟器是多么的难用,网上也有很多 Android 模拟器,但是安装的门槛高,而且安装好了运行会出现很多问题,体验也不是那么的好。

DevEco Studio 提供的模拟器,相比于其它的模拟器,非常的好用,Android 同学可以在下载体验一下,在鸿蒙的模拟器上安装 Android 应用,对于简单的应用体验还是可以的。而且 DevEco Studio 的模拟器安装非常的简单。

如何安装鸿蒙的模拟器

按照图示方式打开 Device Manager。

点击 New Emulator 按钮,按照图示,操作即可。

如何安装 Android 应用到鸿蒙的模拟器

但是我们需要修改 Android 项目支持的 CPU/API 版本。因为 Harmony 的模拟器 CPU/API 是 x86,所以需要在 build.gradle 文件中添加 x86 的支持。

android {  
 compileSdkVersion 33  
 defaultConfig {  
 ndk {  
 abiFilters 'x86\_64','x86'  
 }  
 }  
}

DevEco Studio 和 Android Studio 样式文件共享

DevEco Studio 和 Android Studio 都是基于 idea 开发的,所以如果习惯了 Android Studio 开发界面,我们可以把 Android Studio 界面的样式,导入到 DevEco Studio 中。

如何导出 Android Studio 界面的样式

如何导入 Android Studio 界面的样式到 DevEco Studio

最终的效果对比。DevEco Studio 和 Android Studio 都支持定义自己的外观样式,大家可以按需定制。

为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (OpenHarmony)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/329404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【栈】【字符串和int类型转化】Leetcode 150 逆波兰表达式求值

【栈】【字符串和int类型转化】Leetcode 150 逆波兰表达式求值 解法1 栈 ---------------&#x1f388;&#x1f388;题目链接 Leetcode 150 逆波兰表达式求值 &#x1f388;&#x1f388;------------------- 解法1 栈 字符串转化为int类型数据: Integer.parseInt(s) Long.p…

SpringBoot教程(十五) | SpringBoot集成RabbitMq

SpringBoot教程(十五) | SpringBoot集成RabbitMq RabbitMq是我们在开发过程中经常会使用的一种消息队列。今天我们来研究研究rabbitMq的使用。 rabbitMq的官网&#xff1a; rabbitmq.com/ rabbitMq的安装这里先略过&#xff0c;因为我尝试了几次都失败了&#xff0c;后面等我…

FPGA时序分析与时序约束(四)——时序例外约束

目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约…

网站SEO优化方案

1&#xff0c;去各类搜索引擎里面&#xff0c;注册你的站点 解决方案&#xff1a;注册地址&#xff1a;https://seo.chinaz.com/chinaz.com 2&#xff0c;网站地址使用 https 会增加搜索排名 解决方案&#xff1a;https:www.xxx.com 3&#xff0c;官网每个页面的 meta 里面&a…

牛客周赛 Round 10 解题报告 | 珂学家 | 三分模板 + 计数DFS + 回文中心扩展

前言 整体评价 T2真是一个折磨人的小妖精&#xff0c;写了两版DFS&#xff0c;第二版计数DFS才过。T3是三分模板&#xff0c;感觉也可以求导数。T4的数据规模才n1000&#xff0c;因此中心扩展的 O ( n 2 ) O(n^2) O(n2)当仁不让。 A. 游游的最长稳定子数组 滑窗经典题 从某个…

78、avx2 数据 load/store 向量化操作介绍

向量寄存器和一个最简单的寄存器-内存的存储器模型,查看上一节。 本节基于整个内存模型,介绍一下如何使用 avx2 向量指令集,来完成数据从内存到寄存器中的交互的。 load 操作 在改内存模型下,load 操作指将数据从内存中加载到寄存器中。 使用 C++ 代码实现如下: float…

REVIT二次开发修改轴网

REVIT二次开发修改轴网 步骤1 步骤2 步骤3 功能实现在这 using System; using System.Collections.Generic; using System.Linq; using

【实操】基于 GitHub Pages + Hexo 搭建个人博客

《开发工具系列》 【实操】基于 GitHub Pages Hexo 搭建个人博客 一、引言二、接入 Node.js2.1 下载并安装 Node.js2.2 环境变量配置 三、接入 Git3.1 下载并安装 Git3.2 环境变量配置 四、接入 Hexo4.1 安装 Hexo4.2 建站4.3 本地启动服务器 五、接入 GitHub Pages5.1 初识 G…

大模型学习与实践笔记(七)

一、环境配置 1.平台&#xff1a; Ubuntu Anaconda CUDA/CUDNN 8GB nvidia显卡 2.安装 # 构建虚拟环境 conda create --name xtuner0.1.9 python3.10 -y # 拉取 0.1.9 的版本源码 git clone -b v0.1.9 https://github.com/InternLM/xtuner# 从源码安装 XTuner pip insta…

【Proteus仿真】【Arduino单片机】汽车车窗除霜系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用LCD1602显示模块、光线传感器、DS18B20温度传感器、PCF8691 ADC模块、继电器加热模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD…

常考SQL

1 思维导图 2 题目 mysql8版本 1. 连续问题♥♥♥ 问题描述&#xff1a;如下数据为蚂蚁森林中用户领取的减少碳排放量&#xff0c;找出连续3天及以上减少碳排量在100以上的用户。 iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021…

pyqtgraph绘图类

pyqtgraph绘图类 pyqtgraph绘图有四种方法: 方法描述pyqtgraph.plot()创建一个新的QWindow用来绘制数据PlotWidget.plot()在已存在的QWidget上绘制数据PlotItem.plot()在已存在的QWidget上绘制数据GraphicsLayout.addPlot()在网格布局中添加一个绘图 上面四个方法都接收同样…

Python爬虫实战:IP代理池助你突破限制,高效采集数据

当今互联网环境中&#xff0c;为了应对反爬虫、匿名访问或绕过某些地域限制等需求&#xff0c;IP代理池成为了一种常用的解决方案。IP代理池是一个包含多个可用代理IP地址的集合&#xff0c;可以通过该代理池随机选择可用IP地址来进行网络请求。 IP代理池是一组可用的代理IP地址…

【Maven】008-Maven 私服搭建与使用

【Maven】008-Maven 私服搭建与使用 文章目录 【Maven】008-Maven 私服搭建与使用一、概述1、简介2、建立私服后依赖查找和下载逻辑第一步&#xff1a;请求本地仓库第二步&#xff1a;请求 Maven 私服第三步&#xff1a;请求外部远程仓库&#xff08;远程中央仓库等&#xff09…

SpringBoot教程(三) | Spring Boot初体验

SpringBoot教程(三) | Spring Boot初体验 上篇文章我们创建了SpringBoot 项目&#xff0c;并且进行了简单的启动。整个项目了里其实我们就动了两个文件&#xff0c;一个是pom.xml负责管理springboot的相关依赖&#xff0c;一个是springBoot的启动类。 pom文件中通过starter的…

Linux环境变量配置全攻略

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 Linux环境变量配置 在自定义安装软件的时候&#xff0c;经常需要配置环境变量&#xff0c;下面列举出各种对环境变量的配置方法。 下面所有例…

HTML-鼠标悬浮文案效果

文章目录 前言一、 hover属性实现二、title属性 简单实现总结 前言 有时候&#xff0c;我们浏览网站时&#xff0c;鼠标停留在某处后鼠标会提示一些文案。 一、 hover属性实现 HTML 中可以使用 CSS 来实现鼠标悬浮文案效果。 首先&#xff0c;在 HTML 文件中添加需要显示悬浮…

VS打开报错 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage”

VS 打开的时候报错&#xff1a; 未能正确加载 Microsoft Wswalstudio.editorImplementation.editorPackage” 此间题可能是由配查更改或安装另一个扩展导致的&#xff0c;可以通过查看文件 C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.x…

AI客服发展现状与展望:期待技术进步带来更优质的服务体验

近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;越来越多的企业开始采用AI客服&#xff0c;以提高效率、降低成本。然而&#xff0c;一些用户反映AI客服存在回答不准确、难以理解个性化问题等问题&#xff0c;引发了对智能客服发展现状的关注。 在北京市民邹女士的…

js的防抖与节流

目录 认识防抖与节流防抖节流 手写防抖函数绑定this与参数取消功能立即执行获取返回值最终版 手写节流函数 认识防抖与节流 在JavaScript中&#xff0c;大量操作都会触发事件&#xff0c;这些事件又会被添加到事件队列中进行排队处理 某些事件如果频繁触发的话会对浏览器的性能…