积分168 / 贡献0

提问1答案被采纳1文章8

作者动态

[经验分享] OpenHarmony系统之Service代码一键生成工具介绍(二)

深开鸿_苟晶晶 显示全部楼层 发表于 2024-6-20 11:45:39

前言

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

使用说明

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

OpenHarmony系统之Napi框架生成工具介绍

集成

将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框架生成工具介绍

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

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

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

返回顶部