OpenHarmony开发者论坛
标题:
OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK
[打印本页]
作者:
深开鸿_王石
时间:
2024-3-27 17:54
标题:
OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK
[md]### Har包
**HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。**
* **使用场景**
* **作为二方库,发布到**[OHPM](
https://gitee.com/link?target=ht ... m.openharmony.cn%2F
)私仓,供公司内部其他应用使用。
* **作为三方库,发布到**[OHPM](
https://gitee.com/link?target=ht ... m.openharmony.cn%2F
)中心仓,供其他应用使用。
* **HAR开发约束限制**
* **HAR不支持UIAbility、ExtensionAbility组件和pages页面。**
* **HAR不支持在build-profile.json5文件的buildOption中配置worker。**
* **FA模型与Stage模型的HAR不支持相互引用。**
* **Stage模型的HAR,不能引用AppScope内的内容。在编译构建时AppScope中的内容不会打包到HAR中,因此会导致HAR资源引用失败。**
### 开发介绍
1. **创建一个工程**
![image.png](
https://forums-obs.openharmony.c ... ava355asp0v5rso.png
"image.png")
2. **工程里加模块**
![image.png](
https://forums-obs.openharmony.c ... cwdhac8xkmtmc48.png
"image.png")
3. **选择staticlibrary,就是静态库**
![image.png](
https://forums-obs.openharmony.c ... s4r46dx43u3fsu4.png
"image.png")
4. **打开native的开关就是支持nativec++,也就支持ndk**
![image.png](
https://forums-obs.openharmony.c ... k9oc7brkucprpom.png
"image.png")
5. **在主工程里导入library工程**
![image.png](
https://forums-obs.openharmony.c ... j1f0r6j19lrd98j.png
"image.png")
6. **修改代码导出控件,方法**
```
// library 工程里修改 ------------------------------------------
// src/main/ets/components/mainpage/MainPage.ets
export struct AddCom {
......
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(this.na, this.nb));
this.na += 1;
this.nb += 2;
this.message = "AddCom = " + testNapi.add(this.na, this.nb);
})
// src/main/ets/components/mainpage/Caculate.ets
import hilog from '@ohos.hilog';
import testNapi from 'liblibrary.so';
export namespace Caculator {
export function add(a: number, b: number) {
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(a, b));
return testNapi.add(a, b);
}
}
// Index.ets
export { AddCom } from './src/main/ets/components/mainpage/MainPage'
export { Caculator } from './src/main/ets/components/mainpage/Caculate'
// library 工程里修改 ------------------------------------------
// 主项目里导入
import { AddCom, Caculator } from 'library'
.....
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
hilog.info(0x0000, 'testTag', 'Test Har 2 + 3 = %{public}d', Caculator.add(this.na, this.nb));
this.na += 10
this.nb += 10
this.message = "2+3=" + Caculator.add(this.na, this.nb)
})
```
7. **结果**
![image.png](
https://forums-obs.openharmony.c ... bfmg8rx48nuluie.png
"image.png")
### 总结
**可以利用OpenHarmony的hsp和har,包装组件和对应的NDK工程,提供给其他应用进行开发和应用。**
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5