您的位置:首页 > 游戏 > 游戏 > HarmonyOS

HarmonyOS

2024/12/23 17:01:25 来源:https://blog.csdn.net/qq_44143906/article/details/140766140  浏览:    关键词:HarmonyOS

HarmonyOS APP开发

  • HarmonyOS
    • 鸿蒙系统开发需要具备的环境及技术
      • 操作系统要求(#1.1)
    • DevEco
      • 使用环境
      • 格式化
      • 快速查阅API接口及组件参考文档
      • Optimize Imports功能
      • 启动模拟器提示未开启Hyper-V
      • 模拟器暂不支持的Kit
      • 功能快捷键
    • 应用程序框架基础
      • Module类型
      • UIAbility组件
        • 生命周期
        • UIAbility组件启动模式
    • ArkUI
      • ArkWeb
      • UI范式基本语法
        • @Styles装饰器:定义组件重用样式
        • @Extend装饰器:定义扩展组件样式
    • 数据与变量
      • [深入理解 TypeScript 的 type 以及 type 与 interface 和 class 的区别](https://blog.csdn.net/chencl1986/article/details/130541697)
      • 通过用户首选项实现数据持久化
        • 1、运作机制
        • 2、约束限制
        • 3、接口说明
    • 依赖加载
      • module的引用步骤
    • 权限配置
      • 权限列表
        • 对所有应用开放
        • 受限开放权限
        • 仅对MDM应用开放
      • 授权方式
        • system_grant(系统授权)
        • user_grant(用户授权)
      • 申请应用权限

HarmonyOS

鸿蒙系统开发需要具备的环境及技术

操作系统要求(#1.1)

运行模拟器需要开启 Hyper-V 支持

  • Windows 10 企业版
  • Windows 10 专业版
  • Windows 10 教育版

DevEco

使用环境

使用环境

格式化

在使用代码格式化功能时,您可以使用快捷键Ctrl + Alt + L(macOS为Option+Shift+Command +L) 可以快速对选定范围的代码进行格式化。(重新格式化快捷键 :Ctrl + Shift + Alt + L)

如果在进行格式化时,对于部分代码片段不需要进行自动的格式化处理,可以通过如下方式进行设置:(默认设置)

  1. 在File > Settings >Editor > Code Style(macOS为DevEco Studio > Preferences > Editor > Code Style),单击“Formatter”,勾选“Turn formatter on/off with markers in code comments”。setting

  2. 在不需要进行格式化操作的代码块前增加“//@formatter:off”,在不格式化代码块的最后增加“//@formatter:on”,即表示对该范围的代码块不需要进行格式化操作。

快速查阅API接口及组件参考文档

在编辑器中调用ArkTS/JS API或组件时,支持在编辑器中快速、精准调取出对应的参考文档

可在编辑器中,鼠标悬停在需要查阅的接口或组件,弹窗将显示当前接口/组件在不同API版本下的参数等信息,单击弹窗右下角Show in API Reference,可以快速查阅更详细的API文档。

Optimize Imports功能

使用编辑器提供的Optimize Imports,可以快速清除未使用的import,并根据设置的规则对import进行合并或排序

启动模拟器提示未开启Hyper-V

解决办法:在Windows电脑上启动模拟器,提示未开启Hyper-V(系统版本请看)

模拟器暂不支持的Kit

模拟器暂不支持的Kit
HDC常见命令及环境准备

功能快捷键

快速覆写父类:Ctrl + O 或右键单击Generate…,选择Override Methods
快速生成构造器:Alt + Insert 鼠标右键选择Generate…,在弹窗中选择Constructor
快速生成get/set方法:Alt + Insert 鼠标右键选择Generate…,在弹窗中选择Getter and Setter
快速生成声明信息到Index文件:通过Generate…>Declarations功能

应用程序框架基础

Module类型

  1. Ability类型的Module:用于实现应用的功能和特性
    每一个Ability类型的Module编译后,会生成一个以.hap为后缀的文件,我们称其为HAP(Harmony Ability Package)包。是应用安装的基本单位,一个应用中可以包含一个或多个HAP包。
  2. Library类型的Module :用于实现代码和资源的共享
    同一个Library类型的Module可以被其他的Module多次引用,合理地使用该类型的Module,能够降低开发和维护成本。Library类型的Module分为Static和Shared两种类型,编译后会生成共享包。
    HAR与HSP两种共享包的主要区别
    三种包的区别

UIAbility组件

一种包含UI的应用组件,主要用于和用户交互。

生命周期

UIAbility 生命周期

  1. Create状态:
    (1)UIAbility实例创建完成时触发。
    (2)以在该回调中进行页面初始化操作。
  2. WindowStageCreate和WindowStageDestroy状态
  • 在进入Foreground之前,系统会创建一个WindowStage。创建完成后进入 onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅
    WindowStage
  • 在onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面,并根据需要调用on(‘windowStageEvent’)方法订阅WindowStage的事件(获焦/失焦、可见/不可见)。
import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';const TAG: string = '[EntryAbility]';
const DOMAIN_NUMBER: number = 0xFF00;export default class EntryAbility extends UIAbility {// ...onWindowStageCreate(windowStage: window.WindowStage): void {// 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)try {windowStage.on('windowStageEvent', (data) => {let stageEventType: window.WindowStageEventType = data;switch (stageEventType) {case window.WindowStageEventType.SHOWN: // 切到前台hilog.info(DOMAIN_NUMBER, TAG, 'windowStage foreground.');break;case window.WindowStageEventType.ACTIVE: // 获焦状态hilog.info(DOMAIN_NUMBER, TAG, 'windowStage active.');break;case window.WindowStageEventType.INACTIVE: // 失焦状态hilog.info(DOMAIN_NUMBER, TAG, 'windowStage inactive.');break;case window.WindowStageEventType.HIDDEN: // 切到后台hilog.info(DOMAIN_NUMBER, TAG, 'windowStage background.');break;default:break;}});} catch (exception) {hilog.error(DOMAIN_NUMBER, TAG, 'Failed to enable the listener for window stage event changes. Cause:' + JSON.stringify(exception));}hilog.info(DOMAIN_NUMBER, TAG, '%{public}s', 'Ability onWindowStageCreate');// 设置UI加载windowStage.loadContent('pages/Index', (err, data) => {// ...});}
}
  • WindowStageWillDestroy状态:对应onWindowStageWillDestroy()回调,在WindowStage销毁前执行,此时WindowStage可以使用。(释放UI资源)
  1. Foreground和Background状态
    Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。
  2. Destroy状态
UIAbility组件启动模式
  • singleton(单实例模式):只存在一个该类型的UIAbility实例
  • multiton(多实例模式):每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。
  • specified(指定实例模式):指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。(存在实例匹配)

ArkUI

ArkWeb

UI范式基本语法

@Styles装饰器:定义组件重用样式

提炼公共样式进行复用的装饰器。
说明:

  • @Styles方法不支持参数。
  • @Styles可以定义在组件内或全局,在全局定义时需在方法名前面添加function关键字,组件内定义时则不需要添加function关键字。
// 全局
@Styles function functionName() { ... }// 在组件内
@Component
struct FancyUse {@Styles fancy() {.height(100)}
}
  • 定义在组件内的@Styles可以通过this访问组件的常量和状态变量,并可以在@Styles里通过事件来改变状态变量的值。
  • 组件内@Styles的优先级高于全局@Styles。
@Extend装饰器:定义扩展组件样式

扩展原生组件样式。
使用规则:

  • 和@Styles不同,@Extend仅支持在全局定义,不支持在组件内部定义。(只能在当前文件内使用,不支持export)
  • 和@Styles不同,@Extend支持封装指定组件的私有属性、私有事件和自身定义的全局方法。
// @Extend(Text)可以支持Text的私有属性fontColor
@Extend(Text) function fancy () {.fontColor(Color.Red)
}
// superFancyText可以调用预定义的fancy
@Extend(Text) function superFancyText(size:number) {.fontSize(size).fancy()
}
  • 和@Styles不同,@Extend装饰的方法支持参数,开发者可以在调用时传递参数,调用遵循TS方法传值调用。
// xxx.ets
@Extend(Text) function fancy (fontSize: number) {.fontColor(Color.Red).fontSize(fontSize)
}@Entry
@Component
struct FancyUse {build() {Row({ space: 10 }) {Text('Fancy').fancy(16)Text('Fancy').fancy(24)}}
}
  • @Extend装饰的方法的参数可以为function,作为Event事件的句柄。
@Extend(Text) function makeMeClick(onClick: () => void) {.backgroundColor(Color.Blue).onClick(onClick)
}@Entry
@Component
struct FancyUse {@State label: string = 'Hello World';onClickHandler() {this.label = 'Hello ArkUI';}build() {Row({ space: 10 }) {Text(`${this.label}`).makeMeClick(() => {this.onClickHandler()})}}
}
  • @Extend的参数可以为状态变量,当状态变量改变时,UI可以正常的被刷新渲染。

数据与变量

深入理解 TypeScript 的 type 以及 type 与 interface 和 class 的区别

通过用户首选项实现数据持久化

1、运作机制

用户程序通过ArkTS接口调用用户首选项读写对应的数据文件。开发者可以将用户首选项持久化文件的内容加载到Preferences实例,每个文件唯一对应到一个Preferences实例,系统会通过静态容器将该实例存储在内存中,直到主动从内存中移除该实例或者删除该文件。

2、约束限制
  • Key键为string类型,要求非空且长度不超过1024个字节。
  • 如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过16 * 1024 * 1024个字节。
  • 内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。
3、接口说明
  • 获取Preferences实例:getPreferencesSync(context: Context, options: Options): Preferences
  • 写入Preferences实例:putSync(key: string, value: ValueType): void
  • 检查Preferences实例是否包含名为给定Key的存储键值对:hasSync(key: string): boolean
  • 获取键对应的值:getSync(key: string, defValue: ValueType): ValueType(如果值为null或者非默认值类型,返回默认数据defValue)
  • 删除名为给定Key的存储键值对:deleteSync(key: string): void
  • 将当前Preferences实例的数据异步存储到用户首选项持久化文件中:flush(callback: AsyncCallback<void>): void
  • 订阅数据变更callback回调:on(type: 'change', callback: Callback<string>): void
  • 取消订阅数据变更:off(type: 'change', callback?: Callback<string>): void
  • 移除指定的Preferences实例:deletePreferences(context: Context, options: Options, callback: AsyncCallback<void>): void

依赖加载

module的引用步骤

  1. 新建module:选择shared librarystatic libraryvisual library三种template才能被其他模块引用
    module

  2. module 中的类对外暴露export:在Index.ets(模块根目录的Index.ets,不是pages下面的)中导出需要引用的对象

export { CourseLearning } from './src/main/ets/pages/CourseLearning'
  1. 导入module:要使用的nodule中的oh-package.json5文件中配置声明路径
{"name": "entry","version": "1.0.0","description": "Please describe the basic information.","main": "","author": "","license": "","dependencies": {"@ohos/learning": "file:../features/learning",//导入的模块 }
}
  1. 引用:正常导入后就能使用了
import { CourseLearning } from '@ohos/learning'

权限配置

权限列表

对所有应用开放
受限开放权限
仅对MDM应用开放

授权方式

system_grant(系统授权)
  • 应用被允许访问的数据不会涉及到用户或设备的敏感信息
  • 系统会在用户安装应用时,自动把相应权限授予给应用。
  • system_grant(系统授权)权限列表
user_grant(用户授权)
  • 被允许访问的数据将会涉及到用户或设备的敏感信息
  • 不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应权限,从而成功访问操作目标对象。

申请应用权限

  1. 声明权限:应用需要在module.json5配置文件的requestPermissions标签中声明权限
  • name:必须,填写需要使用的权限名称。取值范围
  • reason:可选,用于描述申请权限的原因,当申请的权限为user_grant权限时此字段必填。可参考权限使用理由的文案内容规范。
  • usedScene:可选,用于描述权限使用的场景,当申请的权限为user_grant权限时建议填写此字段。由abilities和when组成。
    • 其中abilities可以配置为多个UIAbility组件(UIAbility或者ExtensionAbility组件的名称。)。
    • when表示调用时机(inuse(使用时)、always(始终)。)。
{"module" : {// ..."requestPermissions":[{"name" : "ohos.permission.PERMISSION1","reason": "$string:reason","usedScene": {"abilities": ["FormAbility"],"when":"inuse"}},{"name" : "ohos.permission.PERMISSION2","reason": "$string:reason","usedScene": {"abilities": ["FormAbility"],"when":"always"}}]}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com