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

news2024/11/26 2:52:49

前言

本来这篇文章需要讲述静态共享包如何实现远程依赖和上传以及关于静态共享包私服的搭建,非常遗憾的告诉大家,由于组织管理申请迟迟未通过,和部分文档官方权限暂未开放,关于这方面的讲解需要延后了,大概需要等到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

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

九、相关总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HeyFriday AI:智能AI写作工具

【产品介绍】​ 名称 HeyFriday AI 具体描述​ HeyFriday是一款智能AI写作工具&#xff0c;可以帮助用户快速生成博客、广告、创意故事等各种类型的文本内容&#xff0c;节省时间和金钱。​HeyFriday的团队由前谷歌NLP科学家&#xff08;ALBERT的第一作者&#xff…

VIRTIO-BLK代码分析(5)virtqueue通信

virtqueue用于VIRTIO驱动和VIRTIO设备进行通信。每个VIRTIO设备可能有一个或多个virtqueue&#xff0c;VIRTIO-BLK的virtqueue数目可以通过num_queues设置。 通过函数vring_create_virtqueue创建virtqueue&#xff0c;通过函数virtqueue_add_sgs添加数据。目前存在split virtqu…

【网络编程】UDP Socket编程

UDP Socket编程 一. DatagramSocket二. DatagramPacket三. InetSocketAddress四. 执行流程五. 代码示例: UDP 回显服务器 数据报套接字&#xff1a; 使用传输层 UDP 协议 UDP: 即 User Datagram Protocol&#xff08;用户数据报协议&#xff09;&#xff0c;传输层协议。 UDP…

Jmeter系列-定时器Timers的基本介绍(11)

简介 JMeter中的定时器&#xff08;Timer&#xff09;是一种重要的元件&#xff0c;用于模拟用户在不同时间间隔内发送请求的场景。通过使用定时器&#xff0c;可以模拟负载、并发和容量等不同情况下的请求发送频率。 使用定时器 可以在取样器下添加定时器&#xff0c;这样定…

机器学习第五课--广告点击率预测项目以及特征选择的介绍

这个项目的主要的目的是通过给定的广告信息和用户信息来预测一个广告被点击与否。 如果广告有很大概率被点击就展示广告&#xff0c;如果概率低&#xff0c;就不展示。 因为如果广告没有被点击&#xff0c;对双方&#xff08;广告主、平台&#xff09;来讲都没有好处。所以预测…

应用商店优化之关键词优化指南1

提高我们应用在应用商店中的知名度&#xff0c;完全取决于关键词。找到一些关键词的策略之后&#xff0c;我们应该选择最有前途的关键词并对其进行研究&#xff0c;从而创建新的组合和长尾关键词。 1、寻找关键词&#xff0c;找到一些潜在的关键词创意。 尝试考虑一下我们将如…

Element表格之表头合并、单元格合并

一、合并表头 el-table配置 :header-cell-style"headFirst"headFirst({ row, colunm, rowIndex, columnIndex }) {let base { background-color: rgba(67, 137, 249, 0.3), color: #333, text-align: center };//这里为了是将第一列的表头隐藏&#xff0c;就形成了合…

Python开发环境配置

Python 作为一个语言&#xff0c;代码需要一个解释器来进行解释&#xff0c;这个解析器就是专门针对 Python 代码的&#xff0c;只有它才知道这些代码是什么意思。编写代码也需要一定的工具&#xff0c;理论上所有的纯文本都可以编写代码&#xff0c;但工欲善其事必先利其器&am…

Python 办公自动化之 PDF 操作详解

1、PyMuPDF简介 1. 介绍 在介绍PyMuPDF之前&#xff0c;先来了解一下MuPDF&#xff0c;从命名形式中就可以看出&#xff0c;PyMuPDF是MuPDF的Python接口形式。 MuPDF MuPDF 是一个轻量级的 PDF、XPS和电子书查看器。MuPDF 由软件库、命令行工具和各种平台的查看器组成。 M…

安卓修改rom 移植rom必备常识 lib--**so文件基本解析

安卓系统lib-so文件 解包安卓固件中lib lib64分区下存在很多后缀为so的文件&#xff0c;其实都是系统的动态库&#xff0c;类似于win下面的*.dll&#xff0c;一般是由C/C编译成的动态库.在系统lib的文件夹下&#xff0c;置换移植其他系统的程序也需要修改更换相关so文件.没有它…

Android---底部弹窗之BottomSheetDialog

BottomSheetDialog 是Android开发中的一个弹出式对话框&#xff0c;它从屏幕底部弹出并覆盖部分主界面。 1. BottomSheetDialog的使用 // 参数2&#xff1a;设置BottomSheetDialog的主题样式&#xff1b;将背景设置为transparent&#xff0c;这样我们写的shape_bottom_sheet_…

C【函数】

1.常用API 1.strcpy&#xff1a;#include<string.h> char * strcpy ( char * destination, const char * source );int main(){char arr1[] "bit";char arr2[20] "###########";// bit\0########strcpy(arr2, arr1);printf("…

ChatGPT的未来

随着人工智能的快速发展&#xff0c;ChatGPT作为一种自然语言生成模型&#xff0c;在各个领域都展现出了巨大的潜力。它不仅可以用于日常对话、创意助手和知识查询&#xff0c;还可以应用于教育、医疗、商业等各个领域&#xff0c;为人们带来更多便利和创新。 在教育领域&#…

【刷题篇】贪心算法(二)

文章目录 找出工作所需最短时间活动选择无重叠区间 找出工作所需最短时间 某工厂有n个独立的作业&#xff0c;由m台相同的机器进行加工处理。作业i所需的加工时间为ti&#xff0c;任何作业在被处理时不能中断&#xff0c;也不能进行拆分处理。现厂长请你给他写一个程序:算出n个…

LLM 04-大模型的数据

LLM 03-大模型的数据 到目前为止&#xff0c;我们已经讨论了大型语言模型的行为&#xff08;能力和损害&#xff09;。现在&#xff0c;我们要剥开洋葱的第一层&#xff0c;开始讨论这些模型是如何构建的。任何机器学习方法的起点都是训练数据&#xff0c;因此这就是我们开始的…

JDK10特性

文章目录 JAVA10概述语法层次的变化局部变量的类型推断不能使用类型推断的场景变量的声明初始值nulllambda表达式方法引用为数组静态初始化成员变量不能使用其他不可以的场景 API层次的变化集合的copyOf方法 总结 JAVA10概述 2018年3月21日&#xff0c;Oracle官方宣布JAVA10正…

sizeof和strlen求取数组指针之辨析

目录 一维数组中sizeof Vs strlen 整型数组sizeof 字符数组 sizeof strlen 字符串数组 sizeof strlen 字符串的指针char *p sizeof strlen 二维数组中sizeof 今天主要来讲题目主要是数组&指针辨析题和笔试题。&#x1f197;最近心情有点焦虑。大家一定专注…

进阶测试知识之风险基础测试

风险基础测试&#xff08;Risk-Based Testing&#xff09;是一种测试策略&#xff0c;其主要思想是根据产品或系统中各个部分的风险程度来优先进行测试。风险通常是由两个因素决定的&#xff1a;一是问题&#xff08;如缺陷或错误&#xff09;发生的可能性&#xff0c;二是如果…

嵌入式入门教学——模电基础概念

目录 1、模拟信号和模拟电路 2、研究领域 3、常用术语 3.1、共价键 3.2、电场 3.3、温度的电压当量 3.4、动态信号 3.5、直流电流和交流电流 3.6、内阻 3.7、信号频率 3.8、电容 3.9、电感 3.10、相位 3.11、信号失真 3.12、电导 3.13、跨导 3.14、电位 3.15…

【小沐学NLP】AI辅助编程工具汇总

文章目录 1、简介2、国内2.1 aiXcoder2.1.1 工具特点2.1.2 部署方式2.1.3 使用费用2.1.4 代码测试2.1.4.1 代码搜索引擎2.1.4.2 在线体验 2.2 CodeGeeX2.2.1 工具特点2.2.2 部署方式2.2.3 使用费用2.2.4 代码测试 2.3 Alibaba Cloud AI Coding Assistant&#xff08;cosy&#…