积分139 / 贡献0

提问0答案被采纳4文章4

作者动态

[经验分享] OpenHarmony系统之Napi框架生成工具介绍(二)

深开鸿_胡瑞涛 显示全部楼层 发表于 2024-6-20 16:23:57
## 前言

在上一篇博客中我们介绍了napi框架生成工具可执行程序的使用方法以及如何集成到OpenHarmony 4.0 release系统并进行测试;本篇文章将介绍如何将napi框架生成工具生成的代码集成到OpenHarmony 4.1 release。

## 使用说明

如何安装并使用napi框架生成工具,请参考上一篇文章:

[OpenHarmony系统之Napi框架生成工具介绍](https://www.51cto.com/article/778404.html)

## 集成

将napi框架生成工具生成的代码集成到OpenHarmony 4.1 release

### 建立模块位置

模块目录理论上可在OpenHarmony工程的任一位置,假设OpenHarmony代码库的目录为OHOS_SRC,在OHOS_SRC/foundation目录下,建测试模块目录:napitest。napitest目录结构如下:

```
napitest
|-- binding.gyp
|-- BUILD.gn
|-- bundle.json
|-- napitest.cpp
|-- napitest.h
|-- napitest_middle.h
|-- napitest_middle.cpp
|-- test.sh
|-- tool_utility.cpp
|-- tool_utility.h
```

其中bundle.json为新增的编译配置文件,其它为工具生成的代码。

### 编译修改点

#### 修改bundle.json文件

其中destPath选项中的"//foundation/napitest"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。

```
{
  "name": "@ohos/napitest",
  "description": "napitest provides atomic capabilities",
  "version": "4.1",
  "license": "Apache License 2.0",
  "publishAs": "code-segment",
  "segment": {
    "destPath": "foundation/napitest"
  },
  "dirs": {},
  "scripts": {},
  "component": {
    "name": "napitest",
    "subsystem": "napitest",
    "features": [],
    "adapted_system_type": [
      "standard"
    ],
    "rom": "10000KB",
    "ram": "10000KB",
    "deps": {
      "components": [
        "napi",
        "ipc_core",
        "hilog"
      ],
      "third_party": [
        "node"
      ]
    },
    "build": {
      "sub_component": [
        "//foundation/napitest:napitest"
      ],
      "inner_kits": [
        {
          "header": {
            "header_base": "//foundation/napitest",
            "header_files": [
              "tool_utility.h",
              "napitest.h",
              "napitest_middle.h"
            ]
          },
          "name": "//foundation/napitest:napitest"
        }
      ]
    }
  }
}
```

#### 修改BUILD.gn文件

删除ohos_shared_library("napitest")中的deps,并新增外部依赖napi和hilog,即 external_deps = [ "napi:ace_napi","hilog:libhilog", ]。修改后的BUILD.gn文件内容如下所示:

```
import("//build/ohos.gni")

ohos_shared_library("napitest")
{
    sources = [
        "napitest_middle.cpp",
        "napitest.cpp",
        "tool_utility.cpp",
    ]
    include_dirs = [
        ".",
        "//third_party/node/src",
    ]
    external_deps = [ "napi:ace_napi","hilog:libhilog", ]
    remove_configs = [ "//build/config/compiler:no_rtti" ]
    cflags=[
    ]
    cflags_cc=[
        "-frtti",
    ]
    ldflags = [
    ]
  
    relative_install_dir = "module"
    part_name = "napitest"
    subsystem_name = "napitest"
}
```

#### 增加子系统

在源码/build/subsystem_config.json中增加子系统选项。如下所示:

```
"napitest": {
    "path": "foundation/napitest",
    "name": "napitest"
  }
```

### 添加功能模块

在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码vendor/hihope/rk3568/config.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。

```
{
      "subsystem": "napitest",
      "components": [
        {
          "component": "napitest",
          "features": []
        }
      ]
}
```

### 编译验证

编译成功后,就会在 /out/产品名/packages/phone/system/lib/module/ 生成libnapitest.z.so,如下所示:

```
/out/rk3568/packages/phone/system/lib/module
```

## 应用测试

如何编写应用对接口进行测试并查看结果,请参考上一篇文章:

[OpenHarmony系统之Napi框架生成工具介绍](https://www.51cto.com/article/778404.html)


monica-code-tools

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

lknj

沙发 发表于 2024-7-4 09:47:44
有一点没有明白,这个流程只是说明了NAPI如何构建到端侧的镜像中,但是这个api怎么打包到hmos sdk中给应用开发使用的?

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部