概述
HAR(Harmony Archive)是OpenHarmony静态同享包。能够包含js/ts代码、c++库、资源和配置文件。经过HAR,能够实现多个模块或许多个工程同享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立装置运行在设备上,只能作为运用模块的依靠项被引证。
怎么装置依靠har
三方库的地址配置
要想引证三方仓中的har,首要需求设置三方HAR的库房信息。鸿蒙默许的库房地址是
[https://repo.harmonyos.com/ohpm/](https://repo.harmonyos.com/ohpm/)
假如想设置其他的库房地址,能够经过以下指令设置:
ohpm config set registry=your_registry1,your_registry2
或许翻开.ohpmrc文件自己配置,文件位置:~/.ohpm/.ohpmrc 里边内容:
registry=https://repo.harmonyos.com/ohpm/
strict_ssl=true
publish_registry=https://repo.harmonyos.com/ohpm/
log_level=info
fetch_timeout=60000
publish_id=17KSZKU1PZ
key_path=/Users/xxx/.ssh/id_ohpm
依靠三方库中的har
在指令行中履行install指令
ohpm install @ohos/lottie
履行完上面指令后DevEco Studio会自动在oh-package.json5下面加上lottie的依靠信息
"dependencies": {
"@ohos/lottie": "^2.0.9"
},
运用这种办法要注意履行指令的目录,会添加到当时目录下的oh-package.json5中。
自己在oh-package.json5中添加依靠信息
"dependencies": {
"@ohos/lottie": "^2.0.9"
},
�履行履行如下指令
ohpm install
引荐运用这种办法,自主可控
装置好的依靠库存放在oh_modules目录下:
依靠自定义的Library
在指令行中依靠
创立module library,之后在terminal中切到Entry项目中添加依靠
ohpm install ../library
在工程项目下的oh-package.json5中直接依靠
"dependencies": {
"@ohos/library": "file:../library"
}
之后履行ohpm install指令
怎么把自定义的Library给他人运用
办法一:直接把har文件发送给对方
运用者在entry目录下新建lib目录,把har文件放到该目录下 在oh-package.json5中添加依靠
"dependencies": {
"@ohos/log_fishing": "file:./lib/logfishing.har"
}
sync之后就能够正常运用了
办法二:把自定义的Library上传到三方仓或自定义库房中
上传到三方库房请看上篇文章,自定义库房怎么搭建会在后续文章更新。具体运用办法和依靠三方仓中的资源库一样
怎么运用har中提供内容
运用har中的ArkTS页面
在Library中,经过export导出ArkTs页面,示例如下:
// 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对外暴露接口:
// library/Index.ets
export { MainPage } from './src/main/ets/components/mainpage/MainPage';
运用har中的arkTs页面
// entry/src/main/ets/pages/IndexSec.ets
import { MainPage } from 'library';
@Entry
@Component
struct IndexSec {
build() {
Row() {
// 引证HAR的ArkUI组件
MainPage()
}
.height('100%')
}
}
运用har中的办法
经过export导出办法
// library/src/main/ts/test.ts
export function func() {
return 'har func';
}
export function func2() {
return 'har func2';
}
har对外暴露的接口,在Index.ets导出文件中声明如下所示:
// library/Index.ets
export { func } from './src/main/ts/test';
export { func2 } from './src/main/ts/test';
运用har中的办法
// 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')
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%')
}
}
运用har中native办法
导出native办法
// library/src/main/ets/utils/nativeTest.ts
import native from 'liblibrary.so';
export function nativeAdd(a: number, b: number): number {
let result: number = native.add(a, b);
return result;
}
这里实际上是用Ts包了一层,导出的还是ts办法
运用har中的资源
library打包时会把资源一起打包的har中。在编译构建HAP时,DevEco Studio会从HAP模块及依靠的模块中收集资源文件,假如不同模块下的资源文件出现重名抵触时,DevEco Studio会依照以下优先级进行掩盖(优先级由高到低):
- AppScope(仅API9的Stage模型支持)。
- HAP包自身模块。
- 依靠的HAR模块,假如依靠的多个HAR之间有资源抵触,会依照工程oh-package.json5中dependencies下的依靠顺序进行掩盖,依靠顺序在前的优先级较高。
例如下方示例中dayjs和lottie中包含同名文件时,会优先运用dayjs中的资源。
// oh-package.json5
{
"dependencies": {
"dayjs": "^1.10.4",
"lottie": "^2.0.0"
}
}
引证har中的资源
// 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%')
}
}