HarmonyOS开发:那些开发中常见的问题汇总(一)

2023-10-29

前言

本来这篇文章需要讲述静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建,非常遗憾的告诉大家,由于组织管理申请迟迟未通过,和部分文档官方权限暂未开放,关于这方面的讲解需要延后了,大概需要等到2024年第一季度,也就是来年,毕竟关于HarmonyOS的升级,舍弃AOSP,也是在2024年第一季度才会面向所有开发者开放,所以啊,不着急。

需要告诉大家的是,关于HarmonyOS文章都是基于最新的API9,如果你是在API9以下的学习,关于远程和私服,官方是支持npm包的,这里就不做概述了,毕竟作为开发者,肯定要以最新的API为基准。

部分文档没有权限查看,官方邮件回复:

部分文档没有权限查看,社区回复:

OpenHarmony三方库中心仓组织管理一直审核中:

还好,少了远程和私服,也不影响我们的正常学习和开发,毕竟我们可以使用本地的共享包进行开发,也是可以满足需求的。

基础准备工作,目前已梳理的四篇,都是日后开发中肯定用得到的,今天这篇文章,是一篇问题总结篇,很多问题,也是开发者需要迫切了解的,也是日后开发中必遇到的。

本篇文章的大纲如下:

1、如何更改应用的名字和图标

2、如何更改主入口页面

3、如何进行全局初始化操作

4、ets文件和ts文件有什么区别

5、获取上下文Context

6、获取版本号等信息

7、如何获取设备信息

8、如何弹出一个toast

9、相关总结

一、如何更改应用的名字和图标

更改应用名字

更改应用的名字,简单的看下Android工程中是如何更改的,只需要在清单文件AndroidManifest.xml中,更改application中的label属性即可,如下图:

那么在HarmonyOS工程中呢,其实也是一样的简单,在前边讲述的工程结构中,我们知道Android中的清单文件AndroidManifest.xml,就是类似于HarmonyOS中module.json5,那么更改应用的名字,也是在这个文件内。

更改位置如下:

abilities可能有多个UIAbility,应用的名字需要设置在主入口的UIAbility,设置在其他的UIAbility是不会生效的。

在选择更改文件时,有三个选项,就是类似于Android中的国际化操作,目前有三个文件,中文和美式英文,以及默认的base,言外之意,设备语言环境是简体中文时,优先匹配中文文件,也就是zh_CN,设备语言环境是美式英文时,优先匹配en_US,base则是默认存在的目录,在其他目录找不到资源时,才会从base中寻找,当然了,除了默认的三个,你可以拓展其他的语言。

如果只是面对国内市场,只需要更改zh_CN下对应的值即可,也就是更改value,如果是国际化的话,那么对应的信息也需要更改。

更改应用图片

和更改应用名字的位置一样,也是更改作为主入口的UIAbility,更改位置如下:

二、如何更改主入口页面

主入口,应用启动之后第一个展示的页面,在Android中,我们通过在清单文件AndroidManifest.xml,给Activity配置如下的标签即可。

 <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

在HarmonyOS中,有所不同,只需要在module.json5中更改mainElement属性即可:

记住,这里的值,需要和你在abilities里定义保持一致,有且只有一个。

三、如何进行全局初始化操作

有很多种情况,我们都需要提前进行初始化,比如网络配置,一些三方SDK等等,可以方便后续的调用,在Android中,一般都会在Application当中,当然了有的情况下也可以在启动页或者主页面操作,那么在HarmonyOS中如何操作呢,是否也有类似Application的角色呢?答案是肯定的,那就是使用AbilityStage。

官方解读:AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。

使用起来很简单,就两步。

第一,创建AbilityStage文件,可以在Module对应的ets目录下进行创建。

切记export default,必须作为前缀,否则会发生崩溃!

import AbilityStage from '@ohos.app.ability.AbilityStage';

export default class MyAbilityStage extends AbilityStage {
  onCreate() {
    // 应用的HAP在首次加载的时,为该Module初始化操作
  }
}

第二,相关配置

在module.json5配置文件中,通过配置srcEntry参数来指定模块对应的代码路径,以作为HAP加载的入口。

{
  "module": {
    "name": "entry",
    "type": "entry",
    "srcEntry": "./ets/myabilitystage/MyAbilityStage.ts",
    ...
  }
}

AbilityStage除了初始化的方法之外,还有很多的事件回调,这个呢,后续大家如果有遇到,可以直接在官网查看即可。

四、ets文件和ts文件有什么区别

项目创建完毕之后,大家会发现,不仅有ets文件还有ts文件,很多人都会有疑问,那么在项目开发中,我们要创建什么类型的文件呢?是ets文件还是ts文件。

首先需要说的是ets文件,也就是ArkTS,它是HarmonyOS优选的主力应用开发语言,ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集,所以在实际的开发中,你全部以ets文件作为开发,一点问题没有,正如官方给出的各个案例,打开也全是ets文件。

那么能不能ts和ets文件共存呢?显然是可以的,毕竟一个新建的项目,两种文件都是存在的,而基于我日常的开发中,和UI层牵扯相关的,一般都创建ets文件为主,而普通的文件,如工具类,则是以ts文件为主,当然了,完全在于公司和自己的选择。

两种文件创建方式如下:

五、获取上下文Context

上下文在Android中非常重要,无论是跳转页面还是弹出窗口,创建View,几乎都会使用到它,而在HarmonyOS中,虽然权重没有那么高,但在特定于应用程序的资源、请求和验证权限等场景也是必须需要的。

在Stage模式中,有多种获取上下文的方式。

1、获取全局上下文

export default class App extends AbilityStage {
  
  private mAbilityStageContext = this.context
  
}

2、获取Ability上下文

export default class EntryAbility extends UIAbility {

  private mUIAbilityContext = this.context
  
}

3、ApplicationContext上下文

ApplicationContext模块提供开发者应用级别的的上下文的能力,包括提供注册及取消注册应用内组件生命周期的监听接口。

let applicationContext = this.context.getApplicationContext();

六、获取版本号等信息

导包

import bundleManager from '@ohos.bundle.bundleManager';

获取常见属性如下

    let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
            try {
              bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
                const versionCode=data.versionCode//应用包的版本号
                const versionName=data.versionName//应用包的版本文本描述信息
                const name=data.name//应用包的名称
                const vendor=data.versionCode//应用包的供应商
                const installTime=data.installTime//应用包安装时间
                const updateTime=data.updateTime//应用包更新时间

              }).catch(err => {
                hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed. Cause: %{public}s', err.message);
              });
            } catch (err) {
              hilog.error(0x0000, 'testTag', 'getBundleInfoForSelf failed: %{public}s', err.message);
            }

七、如何获取设备信息

导包

import deviceInfo from '@ohos.deviceInfo'

获取常见属性如下

const deviceType = deviceInfo.deviceType //设备类型
const manufacture = deviceInfo.manufacture //设备厂家名称
const brand = deviceInfo.brand //设备品牌名称
const osFullName = deviceInfo.osFullName //系统版本
const sdkApiVersion = deviceInfo.sdkApiVersion //系统软件API版本
const versionId = deviceInfo.versionId //版本ID
const udid = deviceInfo.udid //设备Udid,需要权限:ohos.permission.sec.ACCESS_UDID,该权限为系统权限,仅对系统应用开放。
const hardwareModel = deviceInfo.hardwareModel //硬件版本号
const productSeries = deviceInfo.productSeries //产品系列

八、如何弹出一个toast

关于Toast,更新迭代挺频繁的,在最新的API9中采用的是如下的代码:

import promptAction from '@ohos.promptAction'

promptAction.showToast({            
    message: 'Message Info',
    duration: 2000,      
  });

参数:

参数名

类型

必填

说明

options

ShowToastOptions

文本弹窗选项。

ShowToastOptions对象:

名称

类型

必填

说明

message

string/Resource9+

显示的文本信息。默认字体为'Harmony Sans',不支持设置其他字体。

duration

number

默认值1500ms,取值区间:1500ms-10000ms。若小于1500ms则取默认值,若大于10000ms则取上限值10000ms。

bottom

string/number

设置弹窗边框距离屏幕底部的位置。

九、相关总结

开发中遇到的问题还是蛮多的,毕竟大部分的开发者,很多都是刚刚接触的,在后续的开发中,关于常见的问题或者知识点,我也会不定时的更新,希望能给大家带来一丝帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HarmonyOS开发:那些开发中常见的问题汇总(一) 的相关文章

  • Qt使用UDp通信、套接字socket的成员函数bind()的作用

    一 所谓bind 就是指绑定本地接受端口 指定ip 是为了分辨多ip主机 在有服务端和客户端的UDP中 bind是服务端调用的函数 绑定的是服务端的IP 假设服务端有多个网卡 即会有多个IP 这个时候我们可以选择用bind绑定其中一个IP
  • 【AntDB数据库】AntDB数据库整体架构

    整体架构 AntDB包括计算节点 Coordinator 数据节点 DB 全局事务管理器 GTM 和管理节点四种组件 其中GTM和DB为有状态的组件 需要考虑高可用 架构如下图 计算节点 Coordinator 提供SQL解析 优化 路由
  • 软体机器人接触压力分析

    背景介绍 机器人技术广泛用于工业生产 勘探勘测 医疗服务 军事侦察等领域 对于国民经济和国防建设具有重要意义 传统刚体机器人主要由硬质基体 金属 塑料等 和刚性运动副构成 能够快速 精确地完成工作任务 但这种传统的机器人运动灵活性有限 环境
  • [课程设计]Java实现图形化窗口界面可存储ATM机(自助取款机)

    很久以前写的了 没想到这么多浏览了 现在看着不是一般的乱 当时刚学java 望见谅 不过现在也没有闲工夫重写和心情修改了 凑活凑活吧 这是一个使用io流和swing库制作的可存储的窗口化ATM机程序 臭不要脸的发上来 实现的功能有 1 登录
  • 【C++】多态

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 多态的概念 二 静态的多态 三 动态的多态 1 虚函数
  • QT中的常见布局

    一 QBoxLayout 包括QHBoxLayout QVBoxLayout QHBoxLayout QVBoxLayout 二 QGridLayout 三 QFormLayout 不能在mainwindow上直接布局 必须在mainwin
  • 概率论【随机事件和概率】--猴博士爱讲课

    第一课 随机事件和概率 1 6 无放回类题目 一次摸多个 例 1 盒子里有 3 绿 4 红共 7
  • 缓存的最佳实践

    1 本地缓存 分布式缓存 文件缓存 缓存就是数据交换的缓冲区 按照分布情况 可以分为 本地缓存 可用hashmap 注意并发 guava cache 推荐 等 对于一致性要求不高 访问频率高 总数据集小 重建成本低可以考虑使用本地缓存 本地
  • WiFi新伙伴802.11AY来了,你必知的3件事

    转自 https baijiahao baidu com s id 1615713457503805791 wfr spider for pc 本月早些时候 Wi Fi联盟宣布下一代Wi Fi标准将被称为 Wi Fi 6 它就是之前我们提到
  • BAT脚本卸载软件

    应用场景 学习过程中遇到需要通过bat脚本卸载指定软件 但是各软件对应的卸载命令一般都是不同的 实现方法 Windows软件在封装时一般会指定一个注册表项用来存放该软件的卸载方式 直接使用该方式即可 该注册表项的路径为 64位软件 HKEY
  • Java中如何从键盘输入char类型字符

    1 第一种方法 是用String类型替代char型 但是这种替代本质还是String类型 import java util Scanner public class Test1 public static void main String
  • 高频react面试题20道(附详解)

    大厂技术 高级前端 Node进阶 点击上方 程序员成长指北 关注公众号 回复1 加入高级Node交流群 作者 前端要努力 原文 https github com whylisa front end interview 上次分享了一篇vue面
  • 宝塔定时计划任务

    选择shell脚本 选择执行周期 在脚本内容内写入 curl sS connect timeout 10 m 60 此处为地址链接
  • maven添加依赖

    maven添加依赖 进入maven仓库网站 https mvnrepository com 检索想要添加依赖的关键字 例如 spring webmvc 进入选择想要的依赖版本即可看到对应的maven坐标三要素 groupId artifac
  • Edit distance(二维动态规划题目)

    题目1 Edit Distance 传统动态规划问题 两个字符串不一样 对第一个字符每一个位置可以进行删除 修改或者增加 将第一个字符串改成第二个字符串 求最小的操作数 a Insert a character b Delete a cha
  • 如何突破java程序员瓶颈?十年Java架构师分享自己的辛酸成长历程

    不知不觉 金九银十已经过去一半了 小编最近也是收到了蛮多读者的私信与简历 发现了一个比较值得我注意的点 就是很多读者的简历千篇一律 工作五年经验的简历竟然和工作一年的简历并无二致 所以小编今天根据阿里的一位 十年Java架构师工作经验 和大

随机推荐

  • PostgreSQL 在psql中切换schema

    psql中切换schema 执行 set search path to test schema 后续在执行的操作都是针对test schema这个schema了
  • GPT4发布,有哪些升级和应用?

    引言 GPT 4是OpenAI GPT系列研究最新里程碑 GPT 4接受图像和文本输入 是一个大型多模态模型 接受图像和文本输入 输出为文本 本文结合OpenAI官方Blog 技术报告微软Copilot发布会内容 详细介绍GPT4的接入方式
  • 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图

    使用Python EoN模拟网络中的疾病扩散模型 并结合matplotlib绘图 1 EoN是什么 2 安装 3 效果图 4 源代码 4 1 源码 4 2 源码 参考 写这篇博客源于博友的提问 好奇EoN是什么 然后安装研究了一下 1 Eo
  • 英语发音规则---ir字母组合发音规律

    英语发音规则 ir字母组合发音规律 一 总结 一句话总结 这个字母组合通常在单词中读 girl g l n shirt t n girl g l n 女孩 bird b d n 鸟 shirt t n 衬衫 skirt sk t n 裙子
  • Verilog基本语法初学

    一 语言要素 一 概述 1 空白符 White Space 空格 换行 换页 Tab等 是代码错落有致 提高可读性 2 注释 Comment 单行注释 多行注释 3 标识符 Identifier 字母 数字 最长1023个字符 4 关键字
  • QT窗口设置为无边框后背景色无法正常显示的解决方法

    widget类构造函数 setWindowFlags Qt FramelessWindowHint Qt WindowStaysOnTopHint setAutoFillBackground true auto p palette p se
  • 未能加载文件或程序集 请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] 解决方法

    警告 程序集绑定日志记录被关闭 要启用程序集绑定失败日志记录 请将注册表值 HKLM Software Microsoft Fusion EnableLog DWORD 设置为 1 注意 会有一些与程序集绑定失败日志记录关联的性能损失 要关
  • transformer(下)机器翻译+pytorch实现

    transformer 下 机器翻译 pytorch实现 说在前面 实验环境 注意点 1 加载数据 建立input pipeline 2 位置编码 positional encoding 3 掩码 masking 4 scaled dot
  • TCP协议分析

    实验目的 了解TCP报文段的结构 掌握TCP数据流追踪的方法 理解TCP三次握手的基本过程 理解TCP连接终止的基本过程 理解TCP可靠数据传输的基本原理 TCP数据流追踪 我们以抓取京东的页面为例 分析整个抓包过程 首先为了筛选抓包抓到的
  • 面向对象编程的三大特征

    面向对象编程的三大特征 封装 继承 多态 一 封装 对于封装而言 一个对象它所封装的是自己的属性和方法 所以他是不需要依赖其他对象就可以完成自己的操作 封装的三大好处 1 良好的封装能够减少耦合 2 类内部的结构可以自由修改 3 可以对成员
  • Python趣味编程3则:李白买酒、猴子吃桃、宝塔上的琉璃灯

    1 李白买酒 问题描述 李白街上走 提壶去买酒 遇店加一倍 见花喝一斗 店不相邻开 花不成双长 三遇店和花 喝光壶中酒 请问此壶中 原有多少酒 简单分析 题目中加一倍是指再购买和壶中酒同样数量的酒 喝一斗是指喝掉壶中的一斗酒 根据描述 李白
  • 看完这篇 教你玩转渗透测试靶机vulnhub—Corrosion:2

    Vulnhub靶机Corrosion 2渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 Tomcat msf 上传漏洞拿到shell look越权操作 sudo执行
  • 一个月的学习体会

    匆忙的一个月的学习已经结束了 感觉自己也从刚开始的冲劲满满开始有了疲惫感 特别是最近由于疫情经常半夜2 3点 56点做核酸 导致睡眠不足 上课就开始打瞌睡 头一次产生如此重的疲惫感 但是钱一个月的学习总的来说 收获还是挺大的 就自我感觉到的
  • 最大子数组和(Python)

    给一个整数数组 nums 请找出一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 子数组是数组中的一个连续部分 示例 1 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和最
  • chrome浏览器91版本SameSite by default cookies被移除后的解决方案,Chrome中跨域POST请求无法携带Cookie的解决方案

    周一早上一打开电脑准备开发项目时候 突然发现网站登录跳转有异常 怎么都登录不上一直跳回登录页 通过抓包排除了后端的原因后 发现后端的set cookie没有效果 突然想起Chrome禁用第三方Cookies的计划 打开Edge的更新记录发现
  • Ubuntu下自动启动终端并运行脚本或命令

    1 2 command填写示例 gnome terminal x home river startupRun sh 3 startupRun sh示例 date sleep 5 date gnome terminal mnt hgfs E
  • Druid关闭自动重试

    设置两个属性就可以了 来自druid GitHub connectionErrorRetryAttempts 0 breakAfterAcquireFailure true
  • 正大国际期货:恒指交易如何避免频繁止损?

    正大国际金融控股有限公司 简称 正大国际 成立于2019年11月4日 为香港证监会辖下之持牌法团 证监会中央编号 BOP620 从事第2类及第5类受规管活动及期货合约交易及就期货合约提供意见 主要从事商品期货经纪 金融期货经纪业务 致力于提
  • DATEDIFF() 函数——返回两个日期之间的时间

    定义和用法 DATEDIFF 函数返回两个日期之间的时间 语法 DATEDIFF datepart startdate enddate startdate 和 enddate 参数是合法的日期表达式 datepart 参数可以是下列的值 实
  • HarmonyOS开发:那些开发中常见的问题汇总(一)

    前言 本来这篇文章需要讲述静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建 非常遗憾的告诉大家 由于组织管理申请迟迟未通过 和部分文档官方权限暂未开放 关于这方面的讲解需要延后了 大概需要等到2024年第一季度 也就是来年 毕竟