ArkTS---HAR

2024-08-24 19:12
文章标签 arkts har

本文主要是介绍ArkTS---HAR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。

一、使用场景

  • 作为二方库,发布到OHPM私仓,供公司内部其他应用使用。
  • 作为三方库,发布到OHPM中心仓,供其他应用使用。

二、约束限制

  • HAR不支持在设备上单独安装/运行,只能作为应用模块的依赖项被引用。
  • HAR不支持在配置文件中声明UIAbility组件与ExtensionAbility组件。
  • HAR不支持在配置文件中声明pages页面,但是可以包含pages页面,并通过命名路由的方式进行跳转。
  • HAR不支持引用AppScope目录中的资源。在编译构建时,AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。
  • HAR可以依赖其他HAR,但不支持循环依赖,也不支持依赖传递。

三、开发

         Index.ets文件是HAR导出声明文件的入口,HAR需要导出的接口,统一在Index.ets文件中导出。Index.ets文件是DevEco Studio默认自动生成的,用户也可以自定义,在模块的oh-package.json5文件中的main字段配置入口声明文件,配置如下所示:

{"main": "Index.ets"
}

        1、导出ArkUI组件

        ArkUI组件的导出方式与ts的导出方式一致,通过export导出ArkUI组件,示例如下:

// library/src/main/ets/components/mainpage/MainPage.ets
@Component
export struct MainPage {@State message: string = 'HAR MainPage';build() {Column() {Row() {Text(this.message).fontSize(32).fontWeight(FontWeight.Bold)}.margin({ top: '32px' }).height(56).width('624px')Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, alignContent: FlexAlign.Center }) {Column() {Image($r('app.media.pic_empty')).width('33%')Text($r('app.string.empty')).fontSize(14).fontColor($r('app.color.text_color'))}}.width('100%').height('90%')}.width('100%').height('100%').backgroundColor($r('app.color.page_background'))}
}

        HAR对外暴露的接口,在Index.ets导出文件中声明如下所示:

// library/Index.ets
export { MainPage } from './src/main/ets/components/mainpage/MainPage';

        2、导出ts类和方法

        通过export导出ts类和方法,支持导出多个ts类和方法,示例如下所示:

// library/src/main/ts/test.ets
export class Log {static info(msg: string) {console.info(msg);}
}export function func() {return 'har func';
}export function func2() {return 'har func2';
}

        HAR对外暴露的接口,在Index.ets导出文件中声明如下所示:

// library/Index.ets
export { Log } from './src/main/ts/test';
export { func } from './src/main/ts/test';
export { func2 } from './src/main/ts/test';

        3、导出native方法

        在HAR中也可以包含C++编写的so。对于so中的native方法,HAR通过以下方式导出,以导出liblibrary.so的加法接口add为例:

// library/src/main/ets/utils/nativeTest.ets
import native from 'liblibrary.so';export function nativeAdd(a: number, b: number): number {let result: number = native.add(a, b);return result;
}

         HAR对外暴露的接口,在Index.ets导出文件中声明如下所示:

// library/Index.ets
export { nativeAdd } from './src/main/ets/utils/nativeTest';

4、资源

        在编译构建HAP时,DevEco Studio会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,DevEco Studio会按照以下优先级进行覆盖(优先级由高到低):

  • AppScope(仅API9的Stage模型支持)。
  • HAP包自身模块。
    // oh-package.json5
    {"dependencies": {"dayjs": "^1.10.4","lottie": "^2.0.0"}
    }

四、使用

        1、引用HAR的ArkUI组件

        HAR的依赖配置成功后,可以引用HAR的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过import引入HAR导出的ArkUI组件,示例如下所示:

// entry/src/main/ets/pages/IndexSec.ets
import { MainPage } from 'library';@Entry
@Component
struct IndexSec {build() {Row() {// 引用HAR的ArkUI组件MainPage()}.height('100%')}
}

        2、引用HAR的ts类和方法

        通过import引用HAR导出的ts类和方法,示例如下所示:

// entry/src/main/ets/pages/Index.ets
import { Log } from 'library';
import { func } from 'library';@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {Text(this.message).fontFamily('HarmonyHeiTi').fontWeight(FontWeight.Bold).fontSize(32).fontWeight(700).fontColor($r('app.color.text_color')).textAlign(TextAlign.Start).margin({ top: '32px' }).width('624px')//引用HAR的ts类和方法Button($r('app.string.button')).id('button').height(48).width('624px').margin({ top: '4%' }).type(ButtonType.Capsule).fontFamily('HarmonyHeiTi').borderRadius($r('sys.float.ohos_id_corner_radius_button')).backgroundColor($r('app.color.button_background')).fontColor($r('sys.color.ohos_id_color_foreground_contrary')).fontSize($r('sys.float.ohos_id_text_size_button1')).onClick(() => {// 引用HAR的类和方法Log.info('har msg');this.message = 'func return: ' + func();})}.width('100%').backgroundColor($r('app.color.page_background')).height('100%')}
}

        3、引用HAR的native方法

        通过import引用HAR导出的native方法,示例如下所示:

// entry/src/main/ets/pages/Index.ets
import { nativeAdd } from 'library';@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {Text(this.message).fontFamily('HarmonyHeiTi').fontWeight(FontWeight.Bold).fontSize(32).fontWeight(700).fontColor($r('app.color.text_color')).textAlign(TextAlign.Start).margin({ top: '32px' }).width('624px')//引用HAR的native方法Button($r('app.string.native_add')).id('nativeAdd').height(48).width('624px').margin({ top: '4%', bottom: '6%' }).type(ButtonType.Capsule).fontFamily('HarmonyHeiTi').borderRadius($r('sys.float.ohos_id_corner_radius_button')).backgroundColor($r('app.color.button_background')).fontColor($r('sys.color.ohos_id_color_foreground_contrary')).fontSize($r('sys.float.ohos_id_text_size_button1')).onClick(() => {this.message = 'result: ' + nativeAdd(1, 2);})}.width('100%').backgroundColor($r('app.color.page_background')).height('100%')}
}

        4、引用HAR的资源

        通过$r引用HAR中的资源,例如在HAR模块的src/main/resources里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示例如下所示:

// entry/src/main/ets/pages/Index.ets
@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {Column() {// 引用HAR的字符串资源Text($r('app.string.hello_har')).id('stringHar').fontFamily('HarmonyHeiTi').fontColor($r('app.color.text_color')).fontSize(24).fontWeight(500).margin({ top: '40%' })List() {ListItem() {// 引用HAR的图片资源Image($r('app.media.icon_har')).id('iconHar').borderRadius('48px')}.margin({ top: '5%' }).width('312px')}.alignListItem(ListItemAlign.Center)}.width('100%').backgroundColor($r('app.color.page_background')).height('100%')}
}

五、编译

        HAR可以作为二方库和三方库提供给其他应用使用,如果需要对代码资产进行保护时,建议开启混淆能力。

        混淆能力开启后,DevEco Studio在构建HAR时,会对代码进行编译、混淆及压缩处理,保护代码资产。

        HAR模块原先默认开启混淆能力,会对API 10及以上的HAR模块,且编译模块为release时,自动进行简单的代码混淆;从DevEco Studio 5.0.3.600开始,新建工程默认关闭代码混淆功能,可以在HAR模块的build-profile.json5文件中的ruleOptions字段下的enable进行开启混淆,配置如下所示:

{"apiType": "stageMode","buildOption": {},"buildOptionSet": [{"name": "release","arkOptions": {"obfuscation": {"ruleOptions": {"enable": true,"files": ["./obfuscation-rules.txt"]},"consumerFiles": ["./consumer-rules.txt"]}}},],"targets": [{"name": "default"}]
}

六、编译生成TS文件

        在依赖TS HAR时,禁止引用TS HAR中的ArkUI组件。

        HAR模块中arkts文件编译后,默认产物为js文件,想要将产物修改为ts文件,可以在HAR模块src/main目录下的module.json5文件中的"metadata"字段下的"UseTsHar"进行设置,配置如下所示:

{"module": {"name": "TsClosedHar","type": "har","deviceTypes": ["default","tablet","2in1"],"metadata": [{"name": "UseTsHar","value": "true"}]}
}

这篇关于ArkTS---HAR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103351

相关文章

HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题

本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候,发现很多博客在onTimer(event: (utc: number, elapsedTime: number) => void) 这里提到elapsedTime:计时器经过的时间,单位为毫秒。我不清楚是否为版本问题。 在我查看version11和version10的api时候,说的都是设置格式的最小单位。 经过个人检验的

【鸿蒙】HarmonyOS NEXT星河入门到实战2-ArkTS快速入门

目录 一、ArkTS基础快速入门 二、认识和存储数据  2.1 认识数据 2.2 存储数据(变量、常量) 2.2.1 变量 2.2.2 常量(不可修改) 三、数组 四、函数-Function 4.1 函数的基本使用 4.1.1 定义函数 4.1.2 调用函数 4.2 函数的完整写法 4.3 箭头函数 五、接口&对象 六、对象-方法 七、联合类型 八、枚举类型 小

鸿蒙 ArkTS声明式 UI 语法

鸿蒙(HarmonyOS)的ArkTS(ArkUI的TypeScript扩展)确实支持声明式UI语法,这种语法允许开发者以声明的方式描述UI组件的结构、样式和行为,而不是直接操作DOM或类似的结构。然而,需要注意的是,ArkTS和ArkUI的声明式UI语法是特定于鸿蒙系统的,与Web开发中使用的React、Vue等框架的语法有所不同。 在ArkTS中,开发者会定义各种UI组件,这些组件可以是鸿蒙

说一说鸿蒙 数组常用的API有那些?或者说ArkTS中Array 对象常用 的API?

数组在编程中非常常用,通常会涉及到以下一些常用的数组API: length:返回数组的长度,即数组中元素的个数。 push:向数组末尾添加一个或多个元素,并返回新的数组长度。 pop:删除数组的最后一个元素,并返回被删除的元素。 shift:删除数组的第一个元素,并返回被删除的元素。 unshift:向数组的开头添加一个或多个元素,并返回新的数组长度。 concat:将两个或多个数组

【HarmonyOS NEXT开发】鸿蒙开发环境准备,ArkTS基础语法入门

文章目录 鸿蒙开发环境准备,ArkTS基础语法入门大纲简介DevEco Studio简介运行环境要求 安装与配置开发工具下载Harmony OS 和 OpenHarmony 的区别Previewer汉化插件的配置 ArkTS基础快速入门1. 解释说明2. 变量与常量3. 变量命名规则4. 数组5. 函数定义函数调用函数 6. 箭头函数7. 对象8. 联合类型9. 枚举实例:创建一个学生信

鸿蒙HSP,HAP,HAR

HAP HarmonyOS Ability Package, 是由代码,资源,第三方库,配置文件等打包生成的模块包 用于封装应用程序的各个模块,比如登录模块,具体某个业务模块,一个HAP中可能会包含一个或多个‘UIAbility’,这些Ability负责不同的用户界面和交互逻辑 实例 ‘UserIterfaceHAP.hap’负责用户管理界面,包括登录,注册,个人信息等 ‘ProductDisp

ArkTS 一些基础知识

ArkTS(Ark TypeScript)是鸿蒙生态中用于应用开发的一种语言,它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加了更严格的约束,并引入了静态类型。同时,ArkTS还提供了声明式UI、状态管理等能力,使得开发者能够以更简洁、更自然的方式开发高性能应用。以下是ArkTS的基础语法概述: 1. 注释 单行注释:使用//开头,例如// 这是一个单行注

32 HAP HAR HSP使用

HAP、HSP、HAR在华为鸿蒙操作系统(HarmonyOS)中代表不同的应用组件类型 HAP (HarmonyOS Ability Package):应用包,需要UIability和Page,包含了应用的代码、资源、配置等文件。一个 HAP 文件可以包含一个或多个 Ability(应用功能/界面)。HAP 是鸿蒙应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模

【习题】ArkTS语法介绍

判断题 1. ArkTS中使用const声明常量。         A、正确(True)        B、错误(False) 2. 允许在容器组件内使用if/else条件渲染语句构建不同的子组件。         A、正确(True)        B、错误(False) 3. @Entry装饰的自定义组件将作为UI页面的入口。在单个UI页面中可以使用多个@Entry装饰不同自定义组件

ArkTs之:数据懒加载——LazyForEach的用法

官方描述 LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。 使用限制 LazyForEach必须在容器组件内使用,仅有List、Grid、Swiper以及WaterFlow组件支持数据懒加载(可配置cached