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