From 4b01b5517ac97964080ff2d5faca47be01e91b15 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Thu, 11 Jul 2024 20:34:07 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0dts2cpp=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/readme.md | 12 +- docs/usage.md | 17 +-- .../figures/pic-d-ts-transition_result.png | Bin 0 -> 7736 bytes src/cli/dts2cpp/dts2cpp_README.md | 133 ++++++++++++++++++ 4 files changed, 136 insertions(+), 26 deletions(-) create mode 100644 src/cli/dts2cpp/docs/figures/pic-d-ts-transition_result.png create mode 100644 src/cli/dts2cpp/dts2cpp_README.md diff --git a/docs/readme.md b/docs/readme.md index 77c6ae6d..e323e397 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -2,7 +2,7 @@ ## dts2cpp(NAPI框架代码生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/README_zh.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/dts2cpp_README_zh.md) ## h2dts(TS接口生成工具) @@ -16,18 +16,10 @@ [readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/README_zh.md) -## dts2ets - -暂无 - ## h2dtscpp(NATIVE生成工具) [readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dtscpp/README.md) ## scan(API扫描工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/README_zh.md) - -## hdf(HCS可视化工具) - -[readme](https://gitee.com/openharmony/drivers_hdf_core/tree/master/framework/tools/hcs-view/README_zh.md) \ No newline at end of file +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/README_zh.md) \ No newline at end of file diff --git a/docs/usage.md b/docs/usage.md index d366fc26..2dfd3235 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -12,7 +12,7 @@ vscode插件开发说明:[vscode插件开发说明](https://gitee.com/openharm **使用说明** -可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/docs/usage/INSTRUCTION_ZH.md) +可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/docs/usage/dts2cpp_INSTRUCTION_ZH.md) intelliJ插件使用说明:[intelliJ插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/intellij_plugin/dts2cpp/napi_IntelliJ_plugin/docs/usage/INSTRUCTION_ZH.md) @@ -80,11 +80,6 @@ intelliJ插件开发说明:暂无 intelliJ插件使用说明:暂无 - -## dts2ets - -暂无 - ## scan(API扫描工具) **开发说明** @@ -98,13 +93,3 @@ intelliJ插件使用说明:暂无 intelliJ插件使用说明:暂无 vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/api_scan_vs_plugin/docs/INSTRUCTION_ZH.md) - -## hdf(HCS可视化工具) - -**开发说明** - -工具开发说明:[开发说明](https://gitee.com/openharmony/drivers_hdf_core/blob/master/framework/tools/hcs-view/docs/DEVELOP_zh.md) - -**使用说明** - -工具使用说明:[使用说明](https://gitee.com/openharmony/drivers_hdf_core/blob/master/framework/tools/hcs-view/docs/INSTRUCTION_zh.md) \ No newline at end of file diff --git a/src/cli/dts2cpp/docs/figures/pic-d-ts-transition_result.png b/src/cli/dts2cpp/docs/figures/pic-d-ts-transition_result.png new file mode 100644 index 0000000000000000000000000000000000000000..22661b7435f4ed6e4f709d5209a4d386966914e2 GIT binary patch literal 7736 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 Date: Thu, 11 Jul 2024 20:34:52 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0dts2cpp=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- .../docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md | 682 ++++++++++++++++++ 1 file changed, 682 insertions(+) create mode 100644 src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md diff --git a/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md b/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md new file mode 100644 index 00000000..9c676493 --- /dev/null +++ b/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md @@ -0,0 +1,682 @@ +# NAPI框架生成代码集成到OpenHarmony的方法 + +## 场景说明 + +为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 +本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用,主要是有以下两种方式,分别为增加ohos.build文件方式和增加bundle.json文件方式。 + +## 4.1版本 + +### 建立模块位置 + +模块目录理论上可在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", + "libhilog" + ], + "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,并新增external_deps = [ "napi:ace_napi" ] 修改后的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" ] + remove_configs = [ "//build/config/compiler:no_rtti" ] + cflags=[ + ] + cflags_cc=[ + "-frtti", + ] + ldflags = [ + ] + + relative_install_dir = "module" + part_name = "napitest" + subsystem_name = "napitest" +} +``` + +#### 修改napitest.cpp文件 + +在funcTest方法中增加业务逻辑: + +``` +out = v1 + v2; +``` + +#### 增加子系统 + +在源码/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 + +## 4.0 版本 + +### 建立模块位置 + +模块目录理论上可在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.0", + "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": [ + "ace_napi", + "ipc_core", + "libhilog" + ], + "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" + } + ] + } + } +} +``` + +#### 修改napitest.cpp文件 + +在funcTest方法中增加业务逻辑: + +``` +out = v1 + v2; +``` + +#### 增加子系统 + +在源码/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 + +## 3.2 版本 + +### 建立模块位置 + +模块目录理论上可在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": "3.2", + "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": [ + "ace_napi", + "ipc_core", + "libhilog" + ], + "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" + } + ] + } + } +} +``` + +#### 修改napitest.cpp文件 + +在funcTest方法中增加业务逻辑: + +``` +out = v1 + v2; +``` + +#### 增加子系统 + +在源码/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 + +## 3.1 版本 + +### bundle.json方式集成 + +#### 建立模块位置 + +模块目录理论上可在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为新增的编译配置文件,其它为工具生成的代码。 + +#### 编译修改点 + +##### 修改BUILD.gn文件 + +将deps中"//foundation/arkui/napi:ace_napi"的修改为"//foundation/ace/napi:ace_napi",修改后的BUILD.gn文件内容如下所示: + +``` +import("//build/ohos.gni") + +ohos_shared_library("napitest") +{ + sources = [ + "napitest_middle.cpp", + "../serviceCode/NodeISayHello.cpp", # 将业务代码编译进去 + "napitest.cpp", + "tool_utility.cpp", + ] + include_dirs = [ + ".", + "//third_party/node/src", + ] + deps=[ + "//foundation/ace/napi:ace_napi", + "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog", + ] + remove_configs = [ "//build/config/compiler:no_rtti" ] + cflags=[ + ] + cflags_cc=[ + "-frtti", + ] + ldflags = [ + ] + + relative_install_dir = "module" + part_name = "napitest" + subsystem_name = "napitest" +} +``` + +若用户需要修改子系统和部件名称,则根据自身需求修改BUILD.gn文件和bundle.json文件中子系统与部件名称即可。 + +##### 修改bundle.json文件 + +其中destPath选项中的"//foundation/napitest"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。 + +``` +{ + "name": "@ohos/napitest", + "description": "napitest provides atomic capabilities", + "version": "3.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": [ + "ace_napi", + "ipc_core", + "libhilog" + ], + "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" + } + ] + } + } +} +``` + +##### 修改napitest.cpp文件 + +在funcTest方法中增加业务逻辑: + +``` +out = v1 + v2; +``` + +##### 增加子系统 + +在源码/build/subsystem_config.json中增加子系统选项。如下所示: + +``` +"napitest": { + "project": "hmf/napitest", + "path": "foundation/napitest", + "name": "napitest", + "dir": "foundation" + } +``` + +#### 添加功能模块 + +在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。 + + "napitest:napitest":{} + +#### 编译验证 + +编译成功后,就会在 /out/产品名/packages/phone/system/lib/module/ 生成libnapitest.z.so,如下所示: + + /out/ohos-arm-release/packages/phone/system/lib/module + +### ohos.build方式集成 + +#### 建立模块位置 + +模块目录理论上可在OpenHarmony工程的任一位置,假设OpenHarmony代码库的目录为OHOS_SRC,在OHOS_SRC/foundation目录下,建测试模块目录:napitest。napitest目录结构如下: + + napitest + |-- binding.gyp + |-- BUILD.gn + |-- ohos.build + |-- napitest.cpp + |-- napitest.h + |-- napitest_middle.h + |-- napitest_middle.cpp + |-- test.sh + |-- tool_utility.cpp + |-- tool_utility.h + +其中ohos.build为新增的编译配置文件,其它为工具生成的代码。 + +#### 编译修改点 + +##### 修改BUILD.gn文件 + +将deps中"//foundation/arkui/napi:ace_napi"的修改为"//foundation/ace/napi:ace_napi",修改后的BUILD.gn文件内容如下所示: + +``` +import("//build/ohos.gni") + +ohos_shared_library("napitest") +{ + sources = [ + "napitest_middle.cpp", + "../serviceCode/NodeISayHello.cpp", # 将业务代码编译进去 + "napitest.cpp", + "tool_utility.cpp", + ] + include_dirs = [ + ".", + "//third_party/node/src", + ] + deps=[ + "//foundation/ace/napi:ace_napi", + "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog", + ] + remove_configs = [ "//build/config/compiler:no_rtti" ] + cflags=[ + ] + cflags_cc=[ + "-frtti", + ] + ldflags = [ + ] + + relative_install_dir = "module" + part_name = "napitest" + subsystem_name = "napitest" +} +``` + +若用户需要修改子系统和部件名称,则根据自身需求修改BUILD.gn文件和ohos.build文件中子系统与部件名称即可。 + +##### 修改ohos.build文件 + +其中module_list选项中的"//foundation/napitest"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。 + +``` +{ + "subsystem": "napitest", + "parts": { + "napitest": { + "module_list": [ + "//foundation/napitest:napitest" + ], + "test_list": [] + } + } +} +``` + +##### 修改napitest.cpp文件 + +在funcTest方法中增加业务逻辑: + +``` +out = v1 + v2; +``` + +##### 增加子系统 + +在源码/build/subsystem_config.json中增加子系统选项。如下所示: + +``` +"napitest": { + "project": "hmf/napitest", + "path": "foundation/napitest", + "name": "napitest", + "dir": "foundation" + } +``` + +#### 添加功能模块 + +在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。 + + "napitest:napitest":{} + +#### 编译验证 + +编译成功后,就会在 /out/产品名/packages/phone/system/lib/module/ 生成libnapitest.z.so,如下所示: + + /out/ohos-arm-release/packages/phone/system/lib/module + +## 总结 + +3.1版本两种集成方式使用场景说明: + +ohos.build方式集成:适合3.0前版本使用。 + +bundle.json方式集成:兼容ohos.build方式,但3.1及以后版本建议使用此种方式集成。 + +3.2版本适合使用bundle.json方式集成。 + +4.0版本适合使用bundle.json方式集成。 + +4.1版本适合使用bundle.json方式集成。 + -- Gitee From dc70aef8e363e9630ce7efa45e83490786317bbd Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Thu, 11 Jul 2024 20:35:11 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0dts2cpp=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- .../docs/usage/dts2cpp_INSTRUCTION_ZH.md | 131 ++++++++++++++++++ .../usage/dts2cpp_INTEGRATION_TESTING_ZH.md | 106 ++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 src/cli/dts2cpp/docs/usage/dts2cpp_INSTRUCTION_ZH.md create mode 100644 src/cli/dts2cpp/docs/usage/dts2cpp_INTEGRATION_TESTING_ZH.md diff --git a/src/cli/dts2cpp/docs/usage/dts2cpp_INSTRUCTION_ZH.md b/src/cli/dts2cpp/docs/usage/dts2cpp_INSTRUCTION_ZH.md new file mode 100644 index 00000000..1722c535 --- /dev/null +++ b/src/cli/dts2cpp/docs/usage/dts2cpp_INSTRUCTION_ZH.md @@ -0,0 +1,131 @@ +# dts2cpp工具使用说明 +## 简介 + +dts2cpp工具即NAPI框架生成工具,该工具支持三种入口,分别是可执行程序、VS Code插件、DevEco Studio上使用的IntelliJ插件,使用者可以根据自己的需要选择合适的工具。 + +1.可执行文件下载路径如下(由于网络原因,可能会导致有的下载链接失效,因此提供了以下三个下载链接): + +[可执行文件下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/yaRiKSjBI) + +[可执行文件下载链接2](http://ftp.kaihong.com:5000/fsdownload/yaRiKSjBI/) + +[可执行文件下载链接3](http://ftp.kaihongdigi.com:5000/fsdownload/yaRiKSjBI/) + +访问密码:kaihong + +压缩包解压密码:kaihong20231121 + +DevEco Studio上使用的IntelliJ插件下载路径如下: + +[DevEco Studio上使用的IntelliJ插件下载链接](https://plugins.jetbrains.com/plugin/19593-napi-generator/versions) + +## 工具介绍 + +通过NAPI框架生成工具,使用者可输入一个接口定义的ts文件,一键生成NAPI框架代码、业务代码框架、GN脚本等文件,并使用生成的NAPI接口及功能。使用者也可以输入一个定义方法的.h头文件,反向生成ts文件。 + +![](../figures/pic-frm.png) + +## 生成框架 + +### 可执行程序使用方法 + +#### Linux + +1.将待转换的.d.ts文件、napi_generator-linux放在同级目录下。此处新建out文件夹,用于存放生成框架代码。整体目录文件如下: + + OpenHarmony@Ubuntu-64:~/service$ ls + napi_generator-linux @ohos.napitest.d.ts out + +2.在终端中进入到之前可执行程序napi_generator-linux所在的目录,并运行napi_generator-linux,命令如下: + + OpenHarmony@Ubuntu-64:~/service$ ./napi_generator-linux -f @ohos.napitest.d.ts -o out + +其中,参数详情如下: + + -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; + + -d, 根据指定路径转换该文件夹中所有.d.ts文件; + + -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; + + -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; + + -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; + + -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 + + 备注1:-f与-d两个参数只选其中一个参数即可。 + + 备注2:若.d.ts文件中声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 + +3.运行成功后会在out目录下生成框架代码文件,如下所示: + + OpenHarmony@Ubuntu-64:~/linshi/napi_generator_8/examples/ts/out$ ls + binding.gyp BUILD.gn napi_gen.log napitest.cpp napitest.h napitest_middle.h napitest_middle.cpp test.sh tool_utility.cpp tool_utility.h + +#### Windows + +1.将待转换的.d.ts文件、napi_generator-win.exe放在同级目录下。此处新建out文件夹,用于存放生成框架代码。整体目录文件如下: + + E:\demo\napi>dir /B + @ohos.napitest.d.ts + napi_generator-win.exe + out + +2.在终端中进入到之前可执行程序napi_generator-win.exe所在的目录,并运行napi_generator-win.exe,命令如下: + + E:\demo\napi>napi_generator-win.exe -f @ohos.napitest.d.ts -o out + +其中,参数详情如下: + + -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; + + -d, 根据指定路径转换该文件夹中所有.d.ts文件; + + -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; + + -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; + + -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; + + -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 + + 备注1:-f与-d两个参数只选其中一个参数即可。 + + 备注2:若.d.ts文件中声明了其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 + +3.运行成功后会在out目录下生成框架代码文件,如下所示: + + E:\demo\napi\out>dir /B + binding.gyp + BUILD.gn + napitest.cpp + napitest.h + napitest_middle.h + napitest_middle.cpp + napi_gen.log + test.sh + tool_utility.cpp + tool_utility.h + +#### Mac + +方法步骤参考windows、Linux的使用方法。 + +### VS Code插件使用方法 + +具体的插件使用步骤,可以左键单击以下链接了解: + +[VS插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/vscode_plugin/dts2cpp/napi_vs_plugin/docs/usage/INSTRUCTION_ZH.md) + +### DevEco Studio上使用的IntelliJ插件使用方法 + +具体的插件使用步骤,可以左键单击以下链接了解: + +[DevEco Studio上使用的IntelliJ插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/intellij_plugin/dts2cpp/napi_IntelliJ_plugin/docs/usage/INSTRUCTION_ZH.md) + +## 集成测试 +NAPI框架代码生成后,系统框架开发者进行二次开发后,即可集成到OpenHarmony编译系统,生成对应的库文件,供应用开发者调用接口。工具集成测试的具体操作步骤可以左键单击以下链接了解: + +[工具集成测试](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/docs/usage/dts2cpp_INTEGRATION_TESTING_ZH.md) + diff --git a/src/cli/dts2cpp/docs/usage/dts2cpp_INTEGRATION_TESTING_ZH.md b/src/cli/dts2cpp/docs/usage/dts2cpp_INTEGRATION_TESTING_ZH.md new file mode 100644 index 00000000..09cc4828 --- /dev/null +++ b/src/cli/dts2cpp/docs/usage/dts2cpp_INTEGRATION_TESTING_ZH.md @@ -0,0 +1,106 @@ +# NAPI框架生成工具集成测试 + +## 简介 + 本文主要介绍如何将NAPI框架生成代码集成到OpenHarmony系统,进而进行集成测试。 + +## 准备 + + 1.硬件:rk3568开发套件。 + + 2.系统镜像: + + 系统镜像的具体生成方法,可以左键单击以下链接了解: + + [生成代码集成到OpenHarmony](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md) + +3. hap包 + +hap包的具体生成方法,可参考OpenHarmony/docs/zh-cn/application-dev文档中使用ArkTS语言开发(Stage模型)。 + +### 修改点1:扩展SDK接口 +1. 查看SDK目录:打开DevEco Studio ,点击 Tools -> SDK Manager -> SDK + + ![](../figures/DevEco_SDK_path.png) + +2. 将@ohos.napitest.d.ts文件拷贝到应用所使用的sdk目录下 的ets\api + + ![](../figures/DevEco_add_interface.png) + +### 修改点2:增加新接口调用 +其中修改index.ets文件内容如下: + +``` +import napitest from '@ohos.napitest'; + +@Entry +@Component +struct Index { + @State returnVal: number = 0 + + build() { + Row() { + Column() { + + // 调用普通函数 + Button() { + Text('调用funcTest方法') + .fontSize(20) + .fontWeight(FontWeight.Bold) + } + .type(ButtonType.Capsule) + .margin({ + top: 10 + }) + .backgroundColor('#0D9FFB') + .width('90%') + .height('5%') + .onClick( () => { + this.returnVal = napitest.funcTest(2, 3); + console.info("napiTestDemo ----funcTest returnVal = " + this.returnVal) + }) + + Text('funcTest返回值: returnVal = ' + this.returnVal).margin({ top: 10 }) + } + .width('100%') + } + .height('100%') + } +} +``` + +## 使用说明 + +步骤一:安装镜像环境:将out/rk3568/packages/phone目录下的images镜像文件下载并烧录到开发板上。 + + OpenHarmony@Ubuntu-64:~/OpenHarmony/out/rk3568/packages/phone/images$ ll + total 767452 + drwxrwxrwx 2 root root 4096 Nov 21 05:32 ./ + drwxrwxrwx 15 root root 4096 Nov 21 05:32 ../ + -rwxrwxrwx 1 root root 67108864 Nov 21 05:04 boot_linux.img* + -rw-r--r-- 1 root root 52428800 Nov 21 05:32 chip_prod.img + -rwxrwxrwx 1 root root 8569 Nov 21 05:04 config.cfg* + -rw-r--r-- 1 root root 12582912 Nov 21 05:32 eng_system.img + -rwxrwxrwx 1 root root 455104 Nov 21 05:04 MiniLoaderAll.bin* + -rwxrwxrwx 1 root root 756 Nov 21 05:04 parameter.txt* + -rw-rw-r-- 1 root root 2507625 Nov 21 05:32 ramdisk.img + -rwxrwxrwx 1 root root 5639680 Nov 21 05:04 resource.img* + -rw-r--r-- 1 root root 52428800 Nov 21 05:32 sys_prod.img + -rw-r--r-- 1 root root 1610608640 Nov 21 05:32 system.img + -rwxrwxrwx 1 root root 4194304 Nov 21 05:04 uboot.img* + -rw-rw-r-- 1 root root 15806303 Nov 21 05:32 updater.img + -rw-r--r-- 1 root root 1468006400 Nov 21 05:32 userdata.img + -rw-r--r-- 1 root root 268431360 Nov 21 05:32 vendor.img + +步骤二:安装hap包。 + + Build Haps通过后,通过Run按钮将hap包安装到板子上。 + + 执行完成后,设备中会出现安装的APP。 + +## 查看结果 + +点击”调用funcTest方法“按钮,funcTest返回值显示出 returnVal = 5 + +## 相关仓 + +暂无 -- Gitee From 94208798cb1c473082e083da74b1e737c24ee59e Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 09:41:44 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0h2sa=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/readme.md | 8 +- docs/usage.md | 6 +- .../docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md | 330 ++++++++++++++++++ .../h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md | 238 +++++++++++++ .../h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md | 95 +++++ src/cli/h2sa/h2sa_README_ZH.md | 119 +++++++ 6 files changed, 788 insertions(+), 8 deletions(-) create mode 100644 src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md create mode 100644 src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md create mode 100644 src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md create mode 100644 src/cli/h2sa/h2sa_README_ZH.md diff --git a/docs/readme.md b/docs/readme.md index e323e397..677e9f4c 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -6,15 +6,15 @@ ## h2dts(TS接口生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dts/README_zh.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dts/README_ZH.md) ## cmake2gn(GN脚本生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/cmake2gn/README_zh.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/cmake2gn/README_ZH.md) ## h2sa(SERVICE框架生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/README_zh.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/h2sa_README_ZH.md) ## h2dtscpp(NATIVE生成工具) @@ -22,4 +22,4 @@ ## scan(API扫描工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/README_zh.md) \ No newline at end of file +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/README_ZH.md) \ No newline at end of file diff --git a/docs/usage.md b/docs/usage.md index 2dfd3235..75ed6830 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -26,8 +26,6 @@ vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharm intelliJ插件开发说明:[intelliJ插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/intellij_plugin/h2dts/ts_IntelliJ_plugin/docs/guide/DEVELOP_zh.md) -// vscode 是否支持? - vscode插件开发说明:[vscode插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/vscode_plugin/h2dts/ts_vs_plugin/docs/guide/DEVELOP_zh.md) **使用说明** @@ -48,7 +46,7 @@ vscode插件开发说明:暂无 **使用说明** -可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/INSTRUCTION_ZH.md) +可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md) vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/vscode_plugin/h2sa/service_vs_plugin/docs/usage/INSTRUCTION_ZH.md) @@ -70,7 +68,7 @@ vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharm **开发说明** -可执行程序开发说明:暂无 +可执行程序开发说明:[]() intelliJ插件开发说明:暂无 diff --git a/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md b/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md new file mode 100644 index 00000000..7f28db32 --- /dev/null +++ b/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md @@ -0,0 +1,330 @@ +# h2sa工具集成到OpenHarmony的方法 + +## 场景说明 + +为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码经系统框架开发者二次开发后编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用。 + +## 编译 + +将生成的整个testservice目录复制到OpenHarmony源码根目录下(与base、foundation目录平级) + +### OpenHarmony 3.1 release + +#### 修改系统公共文件 + +1. 服务配置 + foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy/include/system_ability_definition.h增加以下两行(ID说明: TEST_SERVICE_ID值与用户指定的ID一致;TEST_SERVICE_ID宏值定义必须为这个,因为代码中使用的就是这个) + + ``` + TEST_SERVICE_ID = 9016, + {TEST_SERVICE_ID, "testservice" }, + ``` + +2. 子系统配置 + build/subsystem_config.json + 增加以下内容 + + ``` + "testservice": { + "path":"testservice", + "name": "testservice" + } + ``` + +3. 产品配置,如Hi3516DV300 + productdefine/common/products/Hi3516DV300.json + +``` + "testservice:testservice_part":{} +``` + +### OpenHarmony 3.2 release + +#### 修改编译文件 + +1. 修改testservice/BUILD.gn文件,将utils/native 改为 commonlibrary/c_utils,将samgr_standard改为samgr。修改后的BUILD.gn文件内容如下所示: + + ``` + import("//build/ohos.gni") + + ohos_shared_library("testservice") { + sources = [ + "//testservice/src/i_test_service.cpp", + "//testservice/src/test_service_stub.cpp", + "//testservice/src/test_service.cpp" + ] + include_dirs = [ + "//testservice/include", + "//testservice/interface", + "//commonlibrary/c_utils/base/include" + ] + + deps = [ + "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara", + "//commonlibrary/c_utils/base:utils", + ] + + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + "startup_l2:syspara", + ] + + part_name = "testservice_part" + subsystem_name = "testservice" + } + + ohos_executable("testclient") { + sources = [ + "//testservice/src/i_test_service.cpp", + "//testservice/src/test_service_proxy.cpp", + "//testservice/src/test_client.cpp" + ] + + include_dirs = [ + "//testservice/include", + "//testservice/interface", + "//commonlibrary/c_utils/base/include" + ] + + deps = [ + "//commonlibrary/c_utils/base:utils", + ] + + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "samgr:samgr_proxy", + ] + + part_name = "testservice_part" + subsystem_name = "testservice" + } + + ``` + +2. 修改testservice/bundle.json文件,将"name": "@ohos/testservice"修改为 "name": "@ohos/testservice_part";将"samgr_standard"改为"samgr","utils_base"修改为"c_utils";修改后的bundle.json文件内容如下所示: + + ``` + { + "name": "@ohos/testservice_part", + "description": "system ability framework test", + "homePage": "https://gitee.com/", + "version": "3.1", + "license": "Apache License 2.0", + "repository": "", + "publishAs": "code-segment", + "segment": { + "destPath": "testservice" + }, + "dirs": {}, + "scripts": {}, + "component": { + "name": "testservice_part", + "subsystem": "testservice", + "adapted_system_type": [ + "standard" + ], + "rom": "2048KB", + "ram": "~4096KB", + "deps": { + "components": [ + "hiviewdfx_hilog_native", + "ipc", + "samgr", + "c_utils", + "safwk", + "startup_l2" + ], + "third_party": [ "libxml2" ] + }, + "build": { + "sub_component": [ + "//testservice:testservice", + "//testservice/sa_profile:testservice_sa_profile", + "//testservice:testclient", + "//testservice/etc:test_service_init" + ], + "inner_kits": [ + ], + "test": [ + ] + } + } + } + ``` + +#### 修改系统公共文件 + +##### 基础配置 + +1. 服务配置 + + foundation/systemabilitymgr/samgr/interfaces/innerkits/samgr_proxy/include/system_ability_definition.h增加以下两行(ID说明: TEST_SERVICE_ID值与用户指定的ID一致;TEST_SERVICE_ID宏值定义必须为这个,因为代码中使用的就是这个) + + ``` + TEST_SERVICE_ID = 9016, + {TEST_SERVICE_ID, "testservice" }, + ``` + +2. 子系统配置 + + build/subsystem_config.json + + 增加以下内容 + + ``` + "testservice": { + "path":"testservice", + "name": "testservice" + } + ``` + +3. 产品配置,如rk3568 + + vendor/hihope/rk3568/config.json + + 若用户不需要配置selinux,则将"build_selinux"属性改为false + + ``` + "build_selinux": false, + ``` + + 增加以下内容 + + ``` + { + "subsystem": "testservice", + "components": [ + { + "component": "testservice_part", + "features": [] + } + ] + } + ``` + + 注意:若用户需要配置selinux相关配置,则将开关改为true,再根据自身需求进行相关配置 + +4. 权限配置 + + 在相应产品目录下 + + vendor/hihope/rk3568/security_config/high_privilege_process_list.json + + 增加以下内容 + + ``` + { + "name": "testservice", + "uid": "system", + "gid": ["root", "system"] + } + ``` + +##### selinux权限配置 + +若要配置selinux权限,首先应将vendor/hihope/rk3568/config.json中"build_selinux"属性改为true,然后修改以下文件: + +1. testservice/etc/sample_service.cfg + + ``` + "secon" : "u:r:testservice:s0" + ``` + +2. base/security/selinux/sepolicy/base/public/service_contexts + + ``` + 9016 u:object_r:sa_testservice:s0 + ``` + +3. base/security/selinux/sepolicy/base/public/service.te + + ``` + type sa_testservice, sa_service_attr; + ``` + +4. base/security/selinux/sepolicy/base/te/init.te + + ``` + allow init testservice:process { getattr rlimitinh siginh transition }; + ``` + +5. base/security/selinux/sepolicy/base/public/type.te + + ``` + type testservice, sadomain, domain; + ``` + +6. /base/security/selinux/sepolicy/base/te目录下增加新service的te文件,新增文件名即为服务名,例如:testservice + + ``` + allow testservice init_param:file { map open read }; + allow testservice sa_testservice:samgr_class { add get }; + ``` + +### OpenHarmony 4.1 release + +[Service框架生成代码集成到OpenHarmony 4.1 Release的方法](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md) + +### 补充 服务端/客户端 业务逻辑实现 + +**服务端** +test_service.cpp +在testservice/src/test_service.cpp注释“// TODO: Invoke the business implementation”处添加各个接口的服务端实现代码,当前版本生成服务端代码需要用户先初始化,给int ret值赋初值0,如下所示: + +![](./../figures/service_init_example.png) + +远程方法的参数包装已在生成代码test_service_stub.cpp中统一处理,开发人员无需关注 + +**客户端** +test_client.cpp 为自动生成的客户端样例代码。编译烧录后,会在/system/bin/目录下生成可执行程序test_client +在testservice/src/test_client.cpp的main函数中使用proxy对象进行远程方法调用,参考注释示例。如下图: + +![](./../figures/service_client_proxy_example.png) + +远程方法的参数包装已在生成代码test_service_proxy.cpp中统一处理,开发人员无需关注 + +编码完成后,执行镜像编译命令 + +``` +./build.sh --product-name 产品名 +``` + +如:若编译Hi3516DV300开发板,则执行 + +``` +./build.sh --product-name Hi3516DV300 +``` + +若编译rk3568开发板,则执行 + +``` +./build.sh --product-name rk3568 +``` + +## 运行 + +将编译好的镜像烧录到开发板后,使用hdc_std shell登录开发板。 +查看服务端进程是否已正常启动 + +``` +ps -ef | grep testservice +system 288 1 0 00:02:13 ? 00:00:00 testservice_sa --- 服务进程已正常运行 +``` + +如下图所示: + +![](./../figures/service_init_success.png) + +运行客户端 + +``` +/system/bin/testclient +``` + + + (客户端具体执行哪些远程调用方法请在test_client.cpp的main方法中实现) + diff --git a/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md b/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md new file mode 100644 index 00000000..e0c388ef --- /dev/null +++ b/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH_4-1RELEASE.md @@ -0,0 +1,238 @@ +# h2sa工具集成到OpenHarmony 4.1 Release的方法 + +## 场景说明 + +为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码经系统框架开发者二次开发后编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。本文介绍如何将工具生成的源码集成到OpenHarmony 4.1 relsease + +## OpenHarmony 4.1 release + +### 修改编译文件 + +1. 修改testservice/BUILD.gn文件,将utils/native 改为 commonlibrary/c_utils,将samgr_standard改为samgr,− 将hiviewdfx_hilog_native改为hilog,在ohos_shared_library("testservice")中include_dirs内新增"//base/startup/init/interfaces/innerkits/include/syspara",将ohos_shared_library("testservice")中的deps删除,并删除external_deps中的"startup_l2:syspara",同时在external_deps中新增"c_utils:utils", 将ohos_executable("testclient")中的deps删除,同时在external_deps中新增"c_utils:utils"。修改后的BUILD.gn文件内容如下所示: + + ``` + import("//build/ohos.gni") + + ohos_shared_library("testservice") { + sources = [ + "//testservice/src/i_test_service.cpp", + "//testservice/src/test_service_stub.cpp", + "//testservice/src/test_service.cpp" + ] + include_dirs = [ + "//testservice/include", + "//testservice/interface", + "//commonlibrary/c_utils/base/include", + "//base/startup/init/interfaces/innerkits/include/syspara", + ] + + external_deps = [ + "hilog:libhilog", + "ipc:ipc_core", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + "c_utils:utils", + ] + + part_name = "testservice_part" + subsystem_name = "testservice" + } + + ohos_executable("testclient") { + sources = [ + "//testservice/src/i_test_service.cpp", + "//testservice/src/test_service_proxy.cpp", + "//testservice/src/test_client.cpp" + ] + + include_dirs = [ + "//testservice/include", + "//testservice/interface", + "//commonlibrary/c_utils/base/include", + ] + + external_deps = [ + "hilog:libhilog", + "ipc:ipc_core", + "samgr:samgr_proxy", + "c_utils:utils", + ] + + part_name = "testservice_part" + subsystem_name = "testservice" + } + ``` + +2. 修改testservice/bundle.json文件,将"name": "@ohos/testservice"修改为 "name": "@ohos/testservice_part";将"samgr_standard"改为"samgr","utils_base"修改为"c_utils";将"hiviewdfx_hilog_native"修改为"hilog";− 将"deps":"components"下的"starup_l2"删除。修改后的bundle.json文件内容如下所示: + + ``` + { + "name": "@ohos/testservice_part", + "description": "system ability framework test", + "homePage": "https://gitee.com/", + "version": "4.1", + "license": "Apache License 2.0", + "repository": "", + "publishAs": "code-segment", + "segment": { + "destPath": "testservice" + }, + "dirs": {}, + "scripts": {}, + "component": { + "name": "testservice_part", + "subsystem": "testservice", + "adapted_system_type": [ + "standard" + ], + "rom": "2048KB", + "ram": "~4096KB", + "deps": { + "components": [ + "hilog", + "ipc", + "samgr", + "c_utils", + "safwk" + ], + "third_party": [ "libxml2" ] + }, + "build": { + "sub_component": [ + "//testservice:testservice", + "//testservice/sa_profile:testservice_sa_profile", + "//testservice:testclient", + "//testservice/etc:test_service_init" + ], + "inner_kits": [ + ], + "test": [ + ] + } + } + } + ``` + +3. 步骤 1 修改testservice/sa_profile下的文件以及testservice/etc/test_service.cfg文件, 将testservice/sa_profile/9016.xml文件重命名为9016.json,并将内容修改为json格式,修改后的9016.json文件如下所示: + + ``` + { +   "process":"testservice_sa", +       "systemability":[ +           { +               "name":9016, +               "libpath":"libtestservice.z.so", +               "run-on-create":false, +               "auto-restart":true, +               "distributed":false, +               "dump-level":1 +           } +       ] + } + ``` + + 修改testservice/sa_profile/BUILD.gn文件:将sources = [ "9016.xml" ]修改为sources = [ "9016.json" ] + + 修改testservice/etc/test_service.cfg文件:将"path"内的testservice_sa.xml修改为testservice_sa.json + +### 修改系统公共文件 + +#### 基础配置 + +1. 服务配置 + + 在foundation/systemabilitymgr/samgr/interfaces/innerkits/samgr_proxy/include/ + + system_ability_definition.h增加以下一行: + + ``` + TEST_SERVICE_ID = 9016, + ``` + + 其中,TEST_SERVICE_ID宏值与用户定义的serviceID一致。 + +2. 子系统配置 + + 在build/subsystem_config.json中增加以下内容。 + + ``` + "testservice": { + "path":"testservice", + "name": "testservice" + } + ``` + +3. 产品配置,如rk3568 + + 在vendor/kaihong/rk3568/config.json中增加以下内容: + + ``` + { + "subsystem": "testservice", + "components": [ + { + "component": "testservice_part", + "features": [] + } + ] + } + ``` + +4. 权限配置 + + 在相应的产品目录的vendor/kaihong/rk3568/security_config/high_privilege_process_list.json中增加以下内容: + + ``` + { + "name": "testservice", + "uid": "system", + "gid": ["root", "system"] + } + ``` + +#### selinux权限配置 + +上述基础配置时关闭了selinux 权限配置,用户新增服务时需根据自身需求配置selinux 权限 。 + +若要配置selinux权限,首先应将vendor/hihope/rk3568/config.json中"build_selinux"属性改为true,然后修改以下文件: + +1. testservice/etc/sample_service.cfg + + ``` + "secon" : "u:r:testservice:s0" + ``` + +2. base/security/selinux_adapter/sepolicy/base/public/service_contexts + + ``` + 9016 u:object_r:sa_testservice:s0 + ``` + +3. base/security/selinux_adapter/sepolicy/base/public/service.te + + ``` + type sa_testservice, sa_service_attr; + ``` + +4. base/security/selinux_adapter/sepolicy/ohos_policy/startup/init/system/init.te + + ``` + allow init testservice:process { getattr rlimitinh siginh transition }; + ``` + +5. base/security/selinux/sepolicy/base/public/type.te + + ``` + type testservice, sadomain, domain; + ``` + +6. /base/security/selinux/sepolicy/base/te目录下增加新service的te文件,新增文件名即为服务名,例如:testservice.te + + ``` + allow testservice init_param:file { map open read }; + allow testservice sa_testservice:samgr_class { add get }; + ``` + + + + diff --git a/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md b/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md new file mode 100644 index 00000000..4be3afb7 --- /dev/null +++ b/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md @@ -0,0 +1,95 @@ +# h2sa工具使用说明 +## 简介 + +h2sa工具,即SERVICE框架生成工具,该工具支持命令行和VS Code插件,使用者可以根据自己的需要下载工具使用。 + +## 工具介绍 + +通过SERVICE框架生成工具,使用者只需提供一个定义远程方法的.h头文件,一键生成SERVICE框架代码,主要包含Ability注册、proxy/stub类实现、MessageParcel数据包构造、Service子系统编译及开机自启动相关配置文件。 + +![](../figures/pic-service-frm.png) + +## 准备 + +下载python脚本可执行程序header_parser.exe(linux系统为header_parser),下载链接如下: + +[下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/kBG1c7CvT) + +[下载链接2](http://ftp.kaihong.com:5000/sharing/kBG1c7CvT) + +[下载链接3](http://ftp.kaihongdigi.com:5000/sharing/kBG1c7CvT) + +获取nodejs脚本可执行程序service-gen-win.exe、service-gen-linux,用户可根据以下步骤生成nodejs脚本可执行程序: + +[工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2sa/docs/guide/DEVELOP_ZH.md) + +## 生成框架 + +### 可执行程序使用方法 + +#### Linux + +1.将待转换的.h文件放到任意目录下,建议放到可执行程序service-gen-linux与header_parser同级目录下,如下所示: + + OpenHarmony@Ubuntu-64:~/service/napi_generator_8/hdc/service-gen/examples$ ls + test.h header_parser service-gen-linux + +2.在终端中进入到可执行程序service-gen-linux所在的目录,并运行service-gen-linux,命令如下: + + OpenHarmony@Ubuntu-64:~/service/napi_generator_8/hdc/service-gen/examples$ ./service-gen-linux -f test.h -o ./ -s 9016 + +其中,参数详情如下: + -f,定义远程服务的.h文件; + -l, 日志级别(0-3),默认为1; + -o, 生成框架代码输入到指定路径下; + -s, 指定serviceID。 + +3.运行成功后会在当前目录下生成对应的文件,如下所示: + + OpenHarmony@Ubuntu-64:~/service/napi_generator_8/hdc/service-gen/examples$ ls + test.h header_parser napi_gen.log service-gen-linux testservice + +#### Windows + +1.将要转换的.h文件放到任意目录下,建议放到可执行程序service-gen-win.exe与header_parser.exe同级目录下,如下所示: + + E:\demo\service>dir /B + test.h + header_parser.exe + service-gen-win.exe + +2.在终端中进入到可执行程序service-gen-win.exe所在的目录,并运行service-gen-win.exe,命令如下: + + E:\demo\service>service-gen-win.exe -f test.h -o ./ -s 9016 + +其中,参数详情如下: + -f,定义远程服务的.h文件; + -l, 日志级别(0-3),默认为1; + -o,生成框架代码输入到指定路径下; + -s,指定serviceID。 + +3.运行成功后会在当前目录下生成对应的文件,如下所示: + + E:\demo\service>dir /B + test.h + header_parser.exe + napi_gen.log + service-gen-win.exe + testservice + +#### Mac + +方法步骤参考windows、Linux的使用方法。 + +### VS Code插件使用方法 + +具体的插件使用步骤,可以左键单击以下链接了解: + +[VS插件使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/vscode_plugin/h2sa/service_vs_plugin/docs/usage/INSTRUCTION_ZH.md) + +## 集成 + +Service框架代码生成后,系统框架开发者进行二次开发后,即可集成到OpenHarmony编译系统,生成对应的库文件,供应用开发者调用接口。工具集成到OpenHarmony的具体操作步骤可以左键单击以下链接了解: + +[工具集成](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md) + diff --git a/src/cli/h2sa/h2sa_README_ZH.md b/src/cli/h2sa/h2sa_README_ZH.md new file mode 100644 index 00000000..519f3bad --- /dev/null +++ b/src/cli/h2sa/h2sa_README_ZH.md @@ -0,0 +1,119 @@ +# h2sa工具 + +## 简介 + +h2sa工具,即SERVICE框架生成工具,当开发者为OpenHarmony系统框架开发某些功能时,有时需要将这个功能包装成一个独立的服务进程运行在系统中,为了其它应用进程能够调用此服务,开发人员需要基于系统IPC通信框架编写一套远程接口调用实现。实现Service远程调用接口需要开发人员熟悉IPC通信框架,了解proxy/stub的继承与实现方式,掌握C++类型转为MessageParcel数据包的各种API方法,有一定的学习成本。而Service代码生成工具能够帮助使用者生成框架代码,提升开发效率。用户只需提供一个定义远程方法的.h头文件,工具会自动生成整个Service框架的代码,包含Ability注册、proxy/stub类实现、MessageParcel数据包构造、Service子系统编译及开机自启动相关配置文件。目前工具支持命令行和VS Code插件两种入口。 + + ├── napi_generator # NAPI框架代码生成工具 + │ ├── ... # 其他文档 + │ ├── src + │ │ ├── ... + │ │ ├── cli # 脚手架源码 + │ │ | ├── h2sa/src # 工具源码 + │ │ | | ├── src + │ │ | | | ├── tools # 公共模块代码,包括消息体校验、文件读写、正则表达式转换等 + │ │ | | | ├── gen # 生成器 + │ │ | | ├── package.json # 配置文件 + │ │ | ├── ... # 其他工具 + +## 约束 +系统:建议Ubuntu 20.04或者Windows 10 + +依赖版本:VS Code 1.62.0 + +## 使用方法 + +### 使用对象 + +系统开发者 +### 使用场景 + +1) 开发者为OpenHarmony系统框架开发某些功能,并将该功能包装成一个独立的服务进程运行在系统中。 + +### 工具输入 + +根据使用者指定的.h头文件,工具会输出SERVICE框架代码。为了方便使用者快速上手工具,可供测试的.h文件如下所示: + +``` +#ifndef TEST_H +#define TEST_H + +namespace OHOS { + namespace Example { + /** + * @brief service服务,提供IPC调用接口 + * @ServiceClass + */ + class test { + public: + int testFunc(int v1, int v2, bool v3); + }; + } // namespace Example +} // namespace OHOS +#endif // TEST_H +``` + +注意:.h文件中待生成的主class必须加注释:@brief service服务,提供IPC调用接口 ,如下所示: + +``` +/** + * @brief service服务,提供IPC调用接口 + * @ServiceClass + */ +``` + +### 工具使用 + +#### 命令行使用方法 + +[命令行使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md) + +#### VS Code插件使用方法 + +具体的插件使用步骤,可以左键单击以下链接了解: + +[vscode工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/vscode_plugin/h2sa/service_vs_plugin/docs/usage/INSTRUCTION_ZH.md) + +### 工具输出 + +在window环境下的,根据输入.h文件生成的输出文件,如下所示: + +![](./docs/figures/service_framework.png) + +### 工具集成 + +[工具输出文件集成到OpenHarmony](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/usage/h2sa_ENSEMBLE_METHOD_ZH.md) + +## 工具开发说明 + +### 对象 + +工具的开发者 + +### 开发场景 + +若当前工具的功能已经不能满足开发者的全部需求,则开发者可以基于已有的源码对工具进行二次开发,来增强工具的能力,编译打包生成自定义的可执行文件和插件。 + +### 开发步骤 + +开发者可以根据如下的步骤来完成对工具的开发: + + [工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2sa/docs/guide/DEVELOP_ZH.md) + +## 版本说明 + +[已支持特性](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/release-notes/Service-1.0.md) + +[待开发特性](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2sa/docs/requirement/ROADMAP_ZH.md) + +## FAQ + +[FAQ](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2sa/docs/guide/FAQ.md) + +## 参与贡献 + +暂无 + +## 相关仓 + +暂无 -- Gitee From 2a50fa44f7bcfd1583d6314978ef7fcb960bbb4e Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 09:51:59 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0h2dts=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/readme.md | 2 +- src/cli/h2dts/h2dts_README_ZH.md | 128 +++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 src/cli/h2dts/h2dts_README_ZH.md diff --git a/docs/readme.md b/docs/readme.md index 677e9f4c..8632a87b 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -6,7 +6,7 @@ ## h2dts(TS接口生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dts/README_ZH.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dts/h2dts_README_ZH.md) ## cmake2gn(GN脚本生成工具) diff --git a/src/cli/h2dts/h2dts_README_ZH.md b/src/cli/h2dts/h2dts_README_ZH.md new file mode 100644 index 00000000..4656ba75 --- /dev/null +++ b/src/cli/h2dts/h2dts_README_ZH.md @@ -0,0 +1,128 @@ +# h2dts工具 + +## 简介 +h2dts工具,即Ts接口生成工具,它可以根据定义在c++头文件中的接口,生成type-script语言的ts接口文件。若某个服务实现方式为c++,且供应用层访问的接口已在.h文件中定义,此时,NAPI接口开发者使用此工具可一键生成对应的ts文件,进而将生成的ts文件作为NAPI框架生成代码工具的输入,生成NAPI框架代码。串行使用ts接口生成工具、NAPI框架代码生成工具,形成工具链,达到降低NAPI接口开发难度,提高开发效率。目前工具支持可执行文件、IntelliJ插件两种入口。 + + ├── napi_generator # 工具集 + │ ├── ... # 其他文件 + │ ├── src + │ │ ├── ... + │ │ ├── cli + │ │ | ├── ... # 其他工具 + │ │ | ├── h2dts/src # 工具源码 + │ │ │ │ ├── tsGen # Ts框架工具源码 + │ │ | │ │ ├── header_parser.py # 解析C++头文件并生成表示类的数据结构 + │ │ | │ │ |── tsMain.js # Ts框架工具源码入口 + +## 约束 +系统:建议Ubuntu 20.04或者Windows 10 + +依赖版本:VS Code 1.62.0 + +## 使用方法 + +### 使用对象 + +系统开发者、应用Native开发者 + +### 使用场景 + +1) 系统框架层新增子系统,需对应用层提供接口。 +2) 系统框架层子系统能力增强后,需对应用层提供新接口。 +3) 应用层引入C++三方库,需增加OpenHarmony应用层接口。 + +### 工具获取 + +工具有两种类型,分别是可执行文件、IntelliJ插件。其中的可执行文件可根据工具使用者的开发环境选择,支持Windows,Linux和Mac。可执行文件、IntelliJ插下载路径如下: + +[下载链接](http://ftp.kaihongdigi.com:5000/fsdownload/mKjfCmPjk/generator_outputs_NAPI_0930) + +### 工具输入 + +根据使用者指定的.h文件,工具会输出对应的ts接口文件。为了方便使用者快速上手工具,可供测试的test.h文件样例如下: + +``` + + #include < string > + #include < vector > + using namespace std; + + class TestA { + public: + char16_t string1; + void add(string v, long double v1[]); + }; + double count(double v, double v1[]); + + namespace Space { + class TestBB { + public: + short string4; + bool ifExist(bool v, bool v1[]); + }; + uint32_t max(uint32_t v, uint32_t v1[]); + } +``` + +### 工具使用 + +具体的工具使用步骤,可以左键单击以下链接了解: + +[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dts/docs/usage/INSTRUCTION_ZH.md) + +### 工具输出 + +在window环境下的,根据输入文件test.h,生成的输出文件,如下所示: + +![](./docs/figures/h-2-ts-succ.png) + + +其中生成的"test.d.ts"文件,定义了应用开发接口,如下所示: + + declare class TestA { + string1: string; + add(v: string, v1: Array): void; + } + declare namespace Space { + function max(v: number, v1: Array): number; + class TestBB { + string4: number; + ifExist(v: boolean, v1: Array): boolean; + } + } + declare function count(v: number, v1: Array): number; + + export default Space; + + +## 工具开发说明 + +### 对象 + +工具的开发者 + +### 开发场景 + +若当前工具的功能已经不能满足开发者的全部需求,则开发者可以基于已有的源码对工具进行二次开发,来增强工具的能力,编译打包生成自定义的可执行文件和插件。 + +### 开发步骤 + +开发者可以根据如下的步骤来完成对工具的开发: + + [工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dts/docs/guide/DEVELOP_ZH.md) + +## 版本说明 + + [版本说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dts/docs/release-notes/ts_Gen-1.0.md) + +## FAQ + + [FAQ](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dts/docs/guide/FAQ.md) + +## 参与贡献 + +暂无 + +## 相关仓 + +暂无 -- Gitee From df25e7de003b7c2026cad8097e42f6969be2e2e6 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 11:16:54 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0cmake2gn=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/readme.md | 2 +- src/cli/cmake2gn/cmake2gn_README_ZH.md | 293 +++++++++++++++++++++++++ 2 files changed, 294 insertions(+), 1 deletion(-) create mode 100644 src/cli/cmake2gn/cmake2gn_README_ZH.md diff --git a/docs/readme.md b/docs/readme.md index 8632a87b..6333874a 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -10,7 +10,7 @@ ## cmake2gn(GN脚本生成工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/cmake2gn/README_ZH.md) +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/cmake2gn/cmake2gn_README_ZH.md) ## h2sa(SERVICE框架生成工具) diff --git a/src/cli/cmake2gn/cmake2gn_README_ZH.md b/src/cli/cmake2gn/cmake2gn_README_ZH.md new file mode 100644 index 00000000..da4496c3 --- /dev/null +++ b/src/cli/cmake2gn/cmake2gn_README_ZH.md @@ -0,0 +1,293 @@ +# cmake2gn工具 + +## 简介 + +cmake2gn工具,即GN脚本转换工具,它可以根据三方库的CMakeLists.txt文件,编译转换生成BUILD.gn脚本文件。当前OpenHarmony源码只支持BUILD.gn文件编译,开发者无法移植CMakeLists.txt编译方式的三方库到OpenHarmony中。此时,开发者可使用GN脚本转换工具,根据CMakeLists.txt文件生成BUILD.gn脚本文件,降低移植难度,提高开发效率。目前工具支持可执行文件、VS Code插件两种入口。 + + ├── napi_generator # 工具集 + │ ├── ... # 其他文件 + │ ├── src + │ │ ├── ... + │ │ ├── cli + │ │ | ├── ... # 其他工具 + │ │ | ├── cmake2gn + │ │ | | ├── src + │ │ | | | ├── main.js # 工具源码入口 + │ │ | | | ├── package.json # package.json文件 + │ │ | | | |── src + │ │ | | | | |── analyze_cmake.js # cmake解析器 + │ │ | | | | |── analyze_command.js # command解析器 + │ │ | | | | |── analyze_make.js # make解析器 + │ │ | | | | |── generate_gn.js # 生成器 + │ │ | | | | |── logger.js # log日志 + │ │ | | | | |── tool.js # 公共模块代码 + +## 约束 +系统:建议Ubuntu 20.04或者Windows 10 + +依赖版本:VS Code 1.62.0 + +## 使用方法 + +### 使用对象 + +系统开发者 +### 使用场景 + +1) 移植CMakeLists.txt编译方式的三方库到OpenHarmony源码中。 + +### 工具获取 + +工具有两种类型,分别是可执行文件、VS Code插件。其中的可执行文件可根据工具使用者的开发环境选择,支持Windows,Linux和Mac。可执行文件、VS Code插件下载路径如下: + +[下载链接](http://ftpkaihongdigi.i234.me:5000/fsdownload/1OjtRhtGf/gn-gen-0.0.1) + +### 工具输入 + +以CmakeLists.txt编译方式的三方库 + +根据使用者指定三方库的CMakeLists.txt文件,工具会输出对应的BUILD.gn文件。为了方便使用者快速上手工具,可供测试的三方库项目目录如下: + +``` +Openharmony@Ubuntu-64:~/OpenHarmony/third_party/mbedtls-development$ ls +3rdparty BUGS.md ChangeLog cmake configs DartConfiguration.tcl docs include LICENSE programs scripts SUPPORT.md visualc BRANCHES.md ChangeLog.d CMakeLists.txt CONTRIBUTING.md dco.txt doxygen library Makefile README.md SECURITY.md tests +``` + +### 工具使用 + +具体的工具使用步骤,可以左键单击以下链接了解: + +[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/usage/INSTRUCTION_ZH.md) + +### 工具输出 + +在linux环境下的,根据输入三方库项目的CMakeLists.txt文件,生成的输出文件,如下所示: + + OpenHarmony@Ubuntu-64:~/OpenHarmony/third_party/mbedtls-development$ ls + 3rdparty BUGS.md ChangeLog cmake configs DartConfiguration.tcl docs include LICENSE programs scripts SUPPORT.md visualc BRANCHES.md build_tmp ChangeLog.d CMakeLists.txt CONTRIBUTING.md dco.txt doxygen library Makefile README.md SECURITY.md tests + OpenHarmony@Ubuntu-64:~/OpenHarmony/third_party/mbedtls-development$ cd build_tmp/ + OpenHarmony@Ubuntu-64:~/OpenHarmony/third_party/mbedtls-development/build_tmp$ ls + 3rdparty BUILD.gn cmake CMakeCache.txt CMakeFiles cmake_install.cmake CTestTestfile.cmake DartConfiguration.tcl include library Makefile ohos.toolchain.cmake programs scripts tests + +其中生成的BUILD.gn文件,内容如下所示: + +``` +import("//build/ohos.gni") + +group("all_targets") { + deps = [ + #静态库 + "//third_party/mbedtls-development/build_tmp/library:mbedcrypto", + "//third_party/mbedtls-development/build_tmp/library:mbedx509", + "//third_party/mbedtls-development/build_tmp/library:mbedtls", + + #可执行程序 + "//third_party/mbedtls-development/build_tmp/programs/aes:crypt_and_hash", + "//third_party/mbedtls-development/build_tmp/programs/cipher:cipher_aead_demo", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_x509crl", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_x509csr", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_pubkey", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_pkcs7", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_privkey", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_client", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_dtlsserver", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_dtlsclient", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_x509crt", + "//third_party/mbedtls-development/build_tmp/programs/fuzz:fuzz_server", + "//third_party/mbedtls-development/build_tmp/programs/hash:generic_sum", + "//third_party/mbedtls-development/build_tmp/programs/hash:hello", + "//third_party/mbedtls-development/build_tmp/programs/hash:md_hmac_demo", + "//third_party/mbedtls-development/build_tmp/programs/pkey:mpi_demo", + "//third_party/mbedtls-development/build_tmp/programs/pkey:key_app", + "//third_party/mbedtls-development/build_tmp/programs/pkey:pk_encrypt", + "//third_party/mbedtls-development/build_tmp/programs/pkey:gen_key", + "//third_party/mbedtls-development/build_tmp/programs/pkey:ecdsa", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_encrypt", + "//third_party/mbedtls-development/build_tmp/programs/pkey:dh_client", + "//third_party/mbedtls-development/build_tmp/programs/pkey:dh_server", + "//third_party/mbedtls-development/build_tmp/programs/pkey:dh_genprime", + "//third_party/mbedtls-development/build_tmp/programs/pkey:ecdh_curve25519", + "//third_party/mbedtls-development/build_tmp/programs/pkey:pk_decrypt", + "//third_party/mbedtls-development/build_tmp/programs/pkey:pk_sign", + "//third_party/mbedtls-development/build_tmp/programs/pkey:key_app_writer", + "//third_party/mbedtls-development/build_tmp/programs/pkey:pk_verify", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_decrypt", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_genkey", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_sign", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_sign_pss", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_verify", + "//third_party/mbedtls-development/build_tmp/programs/pkey:rsa_verify_pss", + "//third_party/mbedtls-development/build_tmp/programs/psa:key_ladder_demo", + "//third_party/mbedtls-development/build_tmp/programs/psa:crypto_examples", + "//third_party/mbedtls-development/build_tmp/programs/psa:aead_demo", + "//third_party/mbedtls-development/build_tmp/programs/psa:hmac_demo", + "//third_party/mbedtls-development/build_tmp/programs/psa:psa_constant_names", + "//third_party/mbedtls-development/build_tmp/programs/random:gen_entropy", + "//third_party/mbedtls-development/build_tmp/programs/random:gen_random_ctr_drbg", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_pthread_server", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_client1", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_client2", + "//third_party/mbedtls-development/build_tmp/programs/ssl:mini_client", + "//third_party/mbedtls-development/build_tmp/programs/ssl:dtls_server", + "//third_party/mbedtls-development/build_tmp/programs/ssl:dtls_client", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_server", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_server2", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_context_info", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_fork_server", + "//third_party/mbedtls-development/build_tmp/programs/ssl:ssl_mail_client", + "//third_party/mbedtls-development/build_tmp/programs/test:selftest", + "//third_party/mbedtls-development/build_tmp/programs/test:benchmark", + "//third_party/mbedtls-development/build_tmp/programs/test:udp_proxy", + "//third_party/mbedtls-development/build_tmp/programs/test:query_compile_time_config", + "//third_party/mbedtls-development/build_tmp/programs/test:zeroize", + "//third_party/mbedtls-development/build_tmp/programs/util:pem2der", + "//third_party/mbedtls-development/build_tmp/programs/util:strerror", + "//third_party/mbedtls-development/build_tmp/programs/x509:load_roots", + "//third_party/mbedtls-development/build_tmp/programs/x509:cert_req", + "//third_party/mbedtls-development/build_tmp/programs/x509:cert_write", + "//third_party/mbedtls-development/build_tmp/programs/x509:crl_app", + "//third_party/mbedtls-development/build_tmp/programs/x509:req_app", + "//third_party/mbedtls-development/build_tmp/programs/x509:cert_app", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_x509write", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_x509parse", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_its", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_storage_format.current", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_timing", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ssl", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_rsa", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_entropy", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_shax", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_hmac_drbg.pr", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_dhm", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ecdsa", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.des", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_poly1305", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ctr_drbg", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.null", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.gcm", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_storage_format.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ccm", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.camellia", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_chachapoly", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_mdx", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_des", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.chacha20", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_mod", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_chacha20", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aria", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_not_supported.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.padding", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.nist_kw", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.ofb", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_hmac_drbg.nopr", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.ecb", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_hkdf", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.cfb", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.ccm", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkcs5", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.aes", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.rest", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cmac", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_camellia", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ecdh", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_md", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.chachapoly", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_storage_format.v0", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_asn1parse", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_asn1write", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_base64", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_mod_raw.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_oid", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_core.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ecjpake", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_core.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_mod_raw", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_random", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.cbc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pk", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_version", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_se_driver_hal_mocks", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_bignum_mod.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_debug", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkcs1_v21", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes128_de", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_cipher.aria", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes128_en", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes192_de", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.camellia", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes192_en", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes256_de", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.aes256_en", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_gcm.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_hmac_drbg.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_hmac_drbg.no_reseed", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_lms", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_mps", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_memory_buffer_alloc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_net", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_nist_kw", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_metadata", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkparse", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_hash", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pem", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkcs12", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_attributes", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_aes.xts", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_op_fail.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkcs1_v15", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkcs7", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_pkwrite", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_not_supported.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_driver_wrappers", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_entropy", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_generate_key.generated", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_init", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_op_fail.misc", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_error", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_pake", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_lmots", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_persistent_key", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_se_driver_hal", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_ecp", + "//third_party/mbedtls-development/build_tmp/tests:test_suite_psa_crypto_slot_management", + + ] +} + +``` + +## 工具开发说明 + +### 对象 + +工具的开发者 + +### 开发场景 + +若当前工具的功能已经不能满足开发者的全部需求,则开发者可以基于已有的源码对工具进行二次开发,来增强工具的能力,编译打包生成自定义的可执行文件和插件。 + +### 开发步骤 + +开发者可以根据如下的步骤来完成对工具的开发: + + [工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/guide/DEVELOP_ZH.md) + +## 版本说明 + +[版本说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/release-notes/gn-gen-release-notes-0.0.2.md) + +## FAQ + + [FAQ](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/guide/FAQ.md) + +## 参与贡献 + +暂无 + +## 相关仓 + +暂无 -- Gitee From d7809bb3cc90c2032c973e70e00d8f50f865cf39 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 11:32:15 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0h2dtscpp=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- src/cli/h2dtscpp/README.md | 34 +++++++++++++++--- .../docs/figures/h2dtscpp_cppout_example.png | Bin 0 -> 34984 bytes .../docs/figures/h2dtscpp_dtsout_example.png | Bin 0 -> 3519 bytes .../docs/figures/h2dtscpp_out_example.png | Bin 0 -> 1579 bytes .../docs/figures/h2dtscpp_testout_example.png | Bin 0 -> 4105 bytes 5 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/cli/h2dtscpp/docs/figures/h2dtscpp_cppout_example.png create mode 100644 src/cli/h2dtscpp/docs/figures/h2dtscpp_dtsout_example.png create mode 100644 src/cli/h2dtscpp/docs/figures/h2dtscpp_out_example.png create mode 100644 src/cli/h2dtscpp/docs/figures/h2dtscpp_testout_example.png diff --git a/src/cli/h2dtscpp/README.md b/src/cli/h2dtscpp/README.md index 4e887e29..3a4179bf 100644 --- a/src/cli/h2dtscpp/README.md +++ b/src/cli/h2dtscpp/README.md @@ -1,8 +1,8 @@ -# NATIVE生成工具 +# h2dtscpp工具 ## 简介 -native生成工具由由C++语法解释器和代码生成器两部分组成。C++语法解释器解析用户输入的.h文件内容,通过C++语法解析,将文件内容分解为类、方法、入参、成员属性等元素;代码生成器根据从语法解析器得到的这些元素,转换为对应的typescript语法的接口、方法、参数代码,生成.ts文件内容;同时通过语法解析器得到的元素,生成.h文件对应的napi框架代码和接口调用测试代码。 +h2dtscpp工具即NATIVE生成工具,该工具由C++语法解释器和代码生成器两部分组成。C++语法解释器解析用户输入的.h文件内容,通过C++语法解析,将文件内容分解为类、方法、入参、成员属性等元素;代码生成器根据从语法解析器得到的这些元素,转换为对应的typescript语法的接口、方法、参数代码,生成.ts文件内容;同时通过语法解析器得到的元素,生成.h文件对应的napi框架代码和接口调用测试代码。 ## 目录 @@ -11,8 +11,8 @@ native生成工具由由C++语法解释器和代码生成器两部分组成。C+ │ ├── ... # 其他文档 │ ├── src │ │ ├── ... -│ │ ├── cml # 命令行 -│ │ | ├── h2dtscpp/src # 工具源码 +│ │ ├── cli # 命令行 +│ │ | ├── h2dtscpp/src # 工具源码 │ │ | | ├── src │ │ | | | ├── json # 生成框架模板 │ │ | | | ├── napiGen # 生成.cpp框架代码文件和.test.ets测试文件 @@ -37,13 +37,37 @@ native生成工具由由C++语法解释器和代码生成器两部分组成。C+ 应用层引入C++三方库,需增加OpenHarmony应用层接口。 +### 工具输入 + +.h接口文件,如 [cJSON测试三方库](https://gitee.com/openharmony/napi_generator/releases/tag/测试用资源) 的cJSON.h + ### 工具使用 [工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dtscpp/docs/usage/INSTRUCTION_ZH.md) +### 工具输出 + +输出dts声明文件、接口测试文件.test.ets、接口实现文件.cpp文件 + +输出整体文件夹目录如下: + +![](./docs/figures/h2dtscpp_out_example.png) + +tsout文件夹下内容如下所示: + +![](./docs/figures/h2dtscpp_dtsout_example.png) + +testout文件夹下内容如下所示: + +![](./docs/figures/h2dtscpp_testout_example.png) + +cppout文件夹下内容(部分文件截图)如下所示: + +![](./docs/figures/h2dtscpp_cppout_example.png) + ## 工具开发说明 -暂无 +[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2dtscpp/docs/guide/DEVELOP_ZH.md) ## 版本说明 diff --git a/src/cli/h2dtscpp/docs/figures/h2dtscpp_cppout_example.png b/src/cli/h2dtscpp/docs/figures/h2dtscpp_cppout_example.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9166bfe7537f80f3c652738b7eea3bcf67d926 GIT binary patch literal 34984 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 A@c;k- literal 0 HcmV?d00001 diff --git a/src/cli/h2dtscpp/docs/figures/h2dtscpp_out_example.png b/src/cli/h2dtscpp/docs/figures/h2dtscpp_out_example.png new file mode 100644 index 0000000000000000000000000000000000000000..3df9386f434003ab62e2284804ba19e91b4304ec GIT binary patch literal 1579 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 literal 0 HcmV?d00001 -- Gitee From ad4c6e53bc144207bca722772f6e1b4499906a4f Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 14:19:57 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0scan=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/readme.md | 2 +- docs/usage.md | 12 +-- src/tool/api/docs/scan_DEVELOP_ZH.md | 95 +++++++++++++++++++++ src/tool/api/docs/scan_INSTRUCTION_ZH.md | 104 +++++++++++++++++++++++ src/tool/api/scan_README_ZH.md | 84 ++++++++++++++++++ 5 files changed, 287 insertions(+), 10 deletions(-) create mode 100644 src/tool/api/docs/scan_DEVELOP_ZH.md create mode 100644 src/tool/api/docs/scan_INSTRUCTION_ZH.md create mode 100644 src/tool/api/scan_README_ZH.md diff --git a/docs/readme.md b/docs/readme.md index 6333874a..8c92f98b 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -22,4 +22,4 @@ ## scan(API扫描工具) -[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/README_ZH.md) \ No newline at end of file +[readme](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/scan_README_ZH.md) \ No newline at end of file diff --git a/docs/usage.md b/docs/usage.md index 75ed6830..bcc59cd6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -68,26 +68,20 @@ vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharm **开发说明** -可执行程序开发说明:[]() - -intelliJ插件开发说明:暂无 +可执行程序开发说明:[可执行程序开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dtscpp/docs/guide/DEVELOP_ZH.md) **使用说明** 可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/cli/h2dtscpp/docs/usage/INSTRUCTION_ZH.md) -intelliJ插件使用说明:暂无 - ## scan(API扫描工具) **开发说明** -暂无 +可执行程序使用说明:[可执行程序开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/docs/scan_DEVELOP_ZH.md) **使用说明** -可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/docs/INSTRUCTION_ZH.md) - -intelliJ插件使用说明:暂无 +可执行程序使用说明:[可执行程序使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/docs/scan_INSTRUCTION_ZH.md) vscode插件使用说明:[vscode插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/api_scan_vs_plugin/docs/INSTRUCTION_ZH.md) diff --git a/src/tool/api/docs/scan_DEVELOP_ZH.md b/src/tool/api/docs/scan_DEVELOP_ZH.md new file mode 100644 index 00000000..3bd5c64e --- /dev/null +++ b/src/tool/api/docs/scan_DEVELOP_ZH.md @@ -0,0 +1,95 @@ +# scan工具开发说明 + +若当前工具功能不满足开发者需求,开发者需增强工具能力,则可基于已有源码进行工具二次开发,编译打包生成自定义的可执行文件和插件。 + +## 工具开发 + +### 可执行文件开发说明 + +#### 环境说明 + +系统:建议Ubuntu 20.04或者Windows 10 + +#### 开发步骤 + +##### Linux +1.下载Andr_N_Games_api.xlsx文件,并放置在napi_generator/src/tool/api/src文件夹下,下载链接如下: + +//待增加链接 + +2.安装typescript:在napi_generator/src/tool/api/src目录下执行命令: + + npm i typescript + +3.安装stdio:在napi_generator/src/tool/api/src目录下执行命令: + + npm i stdio + +4.安装pkg : 在napi_generator/src/tool/api/src目录下执行命令: + + sudo npm i -g pkg + +5.打包三个版本 : 在napi_generator/src/tool/api/src目录下执行命令: + + pkg . + +执行以上步骤后,即可在napi_generator/src/tool/api/src目录下生成Windows、linux、mac系统下的可执行程序: + + search-win.exe、search-linux、search-macos + +6.根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: + + pkg -t node14-win . -o search-win.exe + +若想只打包linux系统下可执行文件,可执行命令: + + pkg -t node14-linux . -o search-linux + +若想只打包macos系统下可执行文件,可执行命令: + + pkg -t node14-macos . -o search-macos + +备注:参数-t为指定系统,参数-o为指定可执行文件名称。 + + +##### Windows + +1.下载Andr_N_Games_api.xlsx文件,并放置在napi_generator/src/tool/api/src文件夹下,下载链接如下: + +//待增加链接 + +2.使用管理员身份进入终端: + +![](../figures/pic_admin.png) + +3.安装typescript:使用管理员身份在napi_generator/src/tool/api/src目录下执行命令: + + npm i typescript + +4.安装stdio:使用管理员身份在napi_generator/src/tool/api/src目录下执行命令: + + npm i stdio + +5.安装pkg : 使用管理员身份在napi_generator/src/tool/api/src目录下执行命令: + + npm i -g pkg + +6.打包三个版本 : 使用管理员身份在napi_generator/src/tool/api/src目录下执行命令: + + pkg . + +执行以上步骤后,即可在napi_generator/hdc/api目录下生成Windows、linux、mac系统下的可执行程序: + + search-win.exe、search-linux、search-macos + +7.根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: + + pkg -t node14-win . -o search-win.exe + +若想只打包linux系统下可执行文件,可执行命令: + + pkg -t node14-linux . -o search-linux + +若想只打包macos系统下可执行文件,可执行命令: + + pkg -t node14-macos . -o search-macos diff --git a/src/tool/api/docs/scan_INSTRUCTION_ZH.md b/src/tool/api/docs/scan_INSTRUCTION_ZH.md new file mode 100644 index 00000000..35bd79a5 --- /dev/null +++ b/src/tool/api/docs/scan_INSTRUCTION_ZH.md @@ -0,0 +1,104 @@ +# scan工具使用说明 +## 简介 + +scan工具,即API扫描工具,支持两种入口,分别是可执行程序、VS Code插件,使用者可以根据自己的需要选择合适的工具。 + +## 工具介绍 + +通过API扫描工具,开发者可以扫描输出三方库中存在,而OpenHarmony源码中不存在的风险接口,移植之前预知风险,降低移植难度,提高开发效率。 + +![](./../figures/pic-api-frm.png) + +## 生成result文件 + +### 准备 + +可执行程序打包步骤如下: + +[工具开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/docs/scan_DEVELOP_ZH.md) + +### 可执行程序使用方法 + +#### Linux +1、Ubuntu中存在将要扫描的三方库源码,如下所示: + + Openharmony@Ubuntu-64:~/service$ ls /home/harmony/linshi/ + opencv + +2、将打包的search-linux可执行程序放置任意路径下,如下所示: + + Openharmony@Ubuntu-64:~/service$ ls + search-linux + +3、进入到search-linux可执行程序路径下,并执行可执行程序,执行命令如下: + + Openharmony@Ubuntu-64:~/service$ ./search-linux -d /home/linshi/opencv/ -o ./ + +其中,参数详情如下: + -d, 被扫描项目的路径; + -o, 可选参数,默认为当前路径下,输出结果存放路径。 + +4、运行成功后会在当前目录下生成result.xlsx文件: + + Openharmony@Ubuntu-64:~/service$ ls + result.xlsx search-linux + +并在屏幕上打出风险接口名称: + +``` +{ + function: Set(70) { + 'AndroidBitmap_getInfo', + ...... + 'ANativeWindow_release' + }, + include: Set(3) { 'bitmap.h', 'input.h', 'log.h' } +} +``` + +#### Windows + +1、E:\workspace\杂七杂八\service\目录下存在将要扫描的项目opencv。 + +2、将下载的search-win.exe可执行程序放置任意路径下,如下所示: + + E:\demo\api>dir /B + search-win.exe + +3、进入search-win.exe可执行程序路径下,并执行可执行程序,执行过程如下: + + E:\demo\api>search-win.exe -d E:\workspace\service\opencv -o ./ + +其中,参数详情如下: + -d, 被扫描项目的路径 + -o, 可选参数,默认为当前路径下,输出结果存放路径。 + +4、运行成功后会在当前目录下生成result.xlsx文件: + + E:\demo\api>dir /B + result.xlsx + search-win.exe + +并在屏幕上打出风险接口名称: + +``` +{ + function: Set(70) { + 'AndroidBitmap_getInfo', + ...... + 'ANativeWindow_release' + }, + include: Set(3) { 'bitmap.h', 'input.h', 'log.h' } +} +``` + +#### Mac + +方法步骤参考windows、Linux的使用方法。 + +### VS Code插件使用方法 + +具体的插件使用步骤,可以左键单击以下链接了解: + +[VS插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/api_scan_vs_plugin/docs/INSTRUCTION_ZH.md) + diff --git a/src/tool/api/scan_README_ZH.md b/src/tool/api/scan_README_ZH.md new file mode 100644 index 00000000..db69a528 --- /dev/null +++ b/src/tool/api/scan_README_ZH.md @@ -0,0 +1,84 @@ +# scan工具 + +## 简介 + +scan工具即API扫描工具,它可以扫描三方库中包含OpenHarmony源码不包含的接口,并输出result.xlsx文档。开发者移植三方库到OpenHarmony源码中,若三方库中包含一些OpenHarmony中不存在的接口,便会增加移植难度。此时可使用API扫描工具,提前预知风险接口,降低移植难度,提高开发效率。目前工具支持命令行和VS Code插件两种入口。 + + ├── napi_generator + │ ├── ... # 其他文档 + │ ├── src/tool + │ │ ├── api # api扫描工具 + │ │ | ├── api_scan_vs_plugin # VS Code插件源码 + │ │ | ├── ... + +## 约束 +系统:建议Ubuntu 20.04或者Windows 10 + +依赖版本:VS Code 1.62.0 + +## 使用方法 + +### 使用对象 + +系统开发者 +### 使用场景 + +移植三方库到OpenHarmony前预知风险接口。 + +### 工具获取 + +#### 命令行 + +命令行工具可根据源码自行打包,打包步骤如下: + +[工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/tool/api/api_scan_vs_plugin/docs/DEVELOP_ZH.md) + +#### vscode插件 + +工具支持VS Code插件,可在VS Code插件市场直接下载。 + +### 工具输入 + +根据使用者指定三方库项目源码,工具会输出风险接口。为了方便使用者快速上手工具,此处使用opencv项目为例,项目目录如下: + +![](./figures/opencv.png) + +### 工具使用 + +#### 命令行 + +[命令行使用说明](https://gitee.com/openharmony/napi_generator/blob/master/src/tool/api/docs/scan_INSRTUCTION_ZH.md) + +#### vscode插件 + +具体的工具使用步骤,可以左键单击以下链接了解: + +[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/src/tool/api/api_scan_vs_plugin/docs/INSTRUCTION_ZH.md) + +### 工具输出 + +在window环境下的,根据输入三方库项目,生成的输出文件result.xlsx,如下所示: + +![](./figures/opencv_result.png) + +其中生成的result.xlsx文件,风险接口如下所示: + +![](./figures/opencv_include.png) + +![](./figures/opencv_h.png) + +## 版本说明 + +暂无 + +## FAQ + + [FAQ](https://gitee.com/openharmony/napi_generator/tree/master/src/tool/api/FAQ.md) + +## 参与贡献 + +暂无 + +## 相关仓 + +暂无 -- Gitee From 489aeb8e878f6fdfa66668307cd5e0d702dff905 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 14:21:50 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- README_zh.md | 149 -------------------------------- docs/guide/ts/DEVELOP_ZH.md | 139 ----------------------------- docs/guide/ts/FAQ.md | 12 --- docs/guide/ts/INSTRUCTION_ZH.md | 98 --------------------- docs/guide/ts/README_ZH.md | 126 --------------------------- docs/guide/ts/ROADMAP_ZH.md | 41 --------- docs/guide/ts/ts_Gen-1.0.md | 61 ------------- docs/requirement/To-do_list.md | 36 -------- 8 files changed, 662 deletions(-) delete mode 100755 README_zh.md delete mode 100644 docs/guide/ts/DEVELOP_ZH.md delete mode 100644 docs/guide/ts/FAQ.md delete mode 100644 docs/guide/ts/INSTRUCTION_ZH.md delete mode 100644 docs/guide/ts/README_ZH.md delete mode 100644 docs/guide/ts/ROADMAP_ZH.md delete mode 100644 docs/guide/ts/ts_Gen-1.0.md delete mode 100644 docs/requirement/To-do_list.md diff --git a/README_zh.md b/README_zh.md deleted file mode 100755 index a54c3f61..00000000 --- a/README_zh.md +++ /dev/null @@ -1,149 +0,0 @@ -# NAPI框架生成工具 - -## 简介 -本文主要介绍NAPI框架代码生成工具,它可以根据用户指定路径下的ts(typescript)接口文件一键生成NAPI框架代码、业务代码框架、GN文件等。在开发JS应用与NAPI间接口时,底层框架开发者无需关注Nodejs语法、C++与JS之间的数据类型转换等上层应用转换逻辑,只关注底层业务逻辑即可,专业的人做专业的事,从而可以大大提高开发效率。目前工具支持可执行文件、VS Code插件、DevEco Studio上使用的IntelliJ插件三种入口。 - -更多工具的架构和实现原理详情,可以左键单击以下链接了解: - -[工具使用说明](https://gitee.com/openharmony/napi_generator/blob/master/docs/INSTRUCTION_ZH.md) - -## 目录 - - ├── napi_generator # NAPI框架代码生成工具 - │ ├── docs # 工具说明、版本规划 - │ ├── examples # 工具需要的文件样例 - │ ├── figures # 图片资源文件 - │ ├── hdc # hdc相关工具 - │ ├── napi_IntelliJ_plugin # Intellij IDEA插件代码 - │ ├── napi_vs_plugin # VS Code插件代码 - │ ├── release-notes # 发布说明 - │ ├── src # 工具源码 - │ │ ├── gen # napi工具源码 - │ │ | ├── analyze # 解析器 - │ │ | |── extend # 扩展模块,包括gn文件生成、linux环境适配代码等 - │ │ | |── generate # 生成器 - │ │ | └── tools # 公共模块代码,包括消息体校验、文件读写、正则表达式转换等 - │ │ ├── tsGen # TS工具源码 - │ ├── test # UT、ST测试 - │ ├── FAQ # NAPI框架工具问题反馈 - │ └── README # 工具使用指导 - -## 约束 -系统:建议Ubuntu 20.04或者Windows 10 - -依赖版本:VS Code 1.62.0 - -## 使用方法 - -### 使用对象 - -系统开发者 - -### 使用场景 - -1) 系统框架层新增子系统,需对应用层提供接口。 -2) 系统框架层子系统能力增强后,需对应用层提供新接口。 - -### 工具使用 - -工具有三种类型,分别是可执行文件、VS Code插件、DevEco Studio上使用的IntelliJ插件。其中的可执行文件可根据工具使用者的开发环境选择,支持Windows,Linux和Mac。可执行文件下载路径如下(由于网络原因,可能会导致有的下载链接失效,因此提供了以下三个下载链接): - -[可执行文件下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/yaRiKSjBI) - -[可执行文件下载链接2](http://ftp.kaihong.com:5000/fsdownload/yaRiKSjBI/) - -[可执行文件下载链接3](http://ftp.kaihongdigi.com:5000/fsdownload/yaRiKSjBI/) - -访问密码:kaihong - -压缩包解压密码:kaihong20231121 - -DevEco Studio上使用的IntelliJ插件下载路径如下: - -[DevEco Studio上使用的IntelliJ插件下载链接](https://plugins.jetbrains.com/plugin/19593-napi-generator/versions) - -具体的工具使用步骤,可以左键单击以下链接了解: - -[工具使用说明](https://gitee.com/openharmony/napi_generator/blob/master/docs/INSTRUCTION_ZH.md) - -### 工具输出 - -根据使用者指定的typescript文件,工具会输出NAPI框架代码、业务代码框架、GN脚本等文件。 - -为了方便使用者快速上手工具,可供测试的typescript文件存放在以下路径: - -``` -napi_generator/examples/ts -``` - -在window环境下的,根据输入文件@ohos.napitest.d.ts和basic.d.ts生成的输出文件,如下所示: - -![](./figures/pic-d-ts-transition.png) - -其中生成的"napitest.h"文件,定义了框架代码的接口,生成的部分接口如下所示: - -``` -... -class NodeISayHello { -public: - bool addSayHelloListener(NodeISayHelloListener& listener); - static NodeISayHelloListener listener_; - bool removeSayHelloListener(NodeISayHelloListener& listener); - bool registerCallbackfunc(); - // 供业务调用的回调接口 - void CallbackfuncCallback(NUMBER_TYPE_2& wid); - - bool unRegisterCallbackfunc(); - bool sayHello(std::string& from, std::string& to, NUMBER_TYPE_9& sayType); - bool sayHi(std::string& from, std::string& to, NUMBER_TYPE_10& sayType); - bool sayHelloWithResponse(std::string& from, std::string& to, NUMBER_TYPE_11& sayType, uint32_t& outErrCode, AUTO_INTERFACE_5& out); - static AUTO_INTERFACE_5 auto_interface_5OutRes; - void auto_interface_5SetCbValue(NUMBER_TYPE_6 result, std::string errMsg, std::string response); -}; -... -``` - -### 代码集成 - -为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。 - -把工具的生成代码集成到OpenHarmony的具体操作步骤,可以左键单击以下链接了解: - -[生成代码集成到OpenHarmony的方法](https://gitee.com/openharmony/napi_generator/blob/master/docs/ENSEMBLE_METHOD_ZH.md) - -## 工具开发说明 - -### 对象 - -工具的开发者 - -### 开发场景 - -若当前工具的功能已经不能满足开发者的全部需求,则开发者可以基于已有的源码对工具进行二次开发,来增强工具的能力,编译打包生成自定义的可执行文件和插件。 - -### 开发步骤 - -开发者可以根据如下的步骤来完成对工具的开发: - - [工具开发说明](https://gitee.com/openharmony/napi_generator/blob/master/docs/DEVELOP_ZH.md) - -## 版本说明 - - 当前版本已支持的特性和待开发的特性,如下所示: - - [已支持特性](https://gitee.com/openharmony/napi_generator/blob/master/release-notes) - - [待支持特性](https://gitee.com/openharmony/napi_generator/blob/master/docs/ROADMAP_ZH.md) - -## FAQ -对于常见问题解决方法指导如下: - - [FAQ](https://gitee.com/openharmony/napi_generator/blob/master/FAQ.md) - -## 参与贡献 - -暂无 - -## 相关仓 - -[ts生成工具README_zh](https://gitee.com/openharmony/napi_generator/blob/master/docs/ts/README_ZH.md) \ No newline at end of file diff --git a/docs/guide/ts/DEVELOP_ZH.md b/docs/guide/ts/DEVELOP_ZH.md deleted file mode 100644 index ed7fef53..00000000 --- a/docs/guide/ts/DEVELOP_ZH.md +++ /dev/null @@ -1,139 +0,0 @@ -# TS接口文件生成工具开发说明 - -## 工具代码框架介绍 - -ts工具框架由C++语法解释器和代码生成器两部分组成。C++语法解释器解析用户输入的.h文件内容,通过C++语法解析,将文件内容分解为类、方法、入参、成员属性等元素;代码生成器根据从语法解析器得到的这些元素,转换为对应的typescript语法的接口、方法、参数代码,生成.ts文件。 - -## 工具开发 - -### 可执行文件编译说明 - -#### 环境说明 - -系统:建议Ubuntu 20.04或者Windows 10 - -#### 开发步骤 - -##### Linux - -**1.生成napi_generator程序** - -1.1 安装typescript:在napi_generator/src目录下执行命令: - - npm i typescript - -1.2 安装stdio:在napi_generator目录下执行命令: - - npm i stdio - -1.3 安装pkg : 在napi_generator目录下执行命令: - - sudo npm i -g pkg - -1.4 打包三个版本 : 执行命令: - - pkg . - -执行以上步骤后,即可在napi_generator目录下生成Windows、linux、mac系统下的可执行程序: - - napi_generator-win.exe、napi_generator-linux、napi_generator-macos - -1.4.1 (可选步骤) 根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: - - pkg -t node14-win . -o napi_generator-win.exe - -若想只打包linux系统下可执行文件,可执行命令: - - pkg -t node14-linux . -o napi_generator-linux - -若想只打包macos系统下可执行文件,可执行命令: - - pkg -t node14-macos . -o napi_generator-macos - -备注:参数-t为指定系统,参数-o为指定可执行文件名称。 - -**2 生成header_parser程序** - -2.1 安装python库 CppHeaderParser,在header_parser/src_code中下载CppHeaderParser.zip,解压后替换本地Python文件夹中CppHeaderParser(如 /usr/local/lib/python3.8/dist-packages/CppHeaderParser)目录下的全部文件 - -[下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/kBG1c7CvT) - -[下载链接2](http://ftp.kaihong.com:5000/sharing/kBG1c7CvT) - -[下载链接3](http://ftp.kaihongdigi.com:5000/sharing/kBG1c7CvT) - -2.2 安装 pyinstaller - - sudo pip install pyinstaller - -2.3 将python脚本打包成独立可执行文件 -进入 napi_generator/src/tsGen 目录后执行如下命令: - - sudo pyinstaller -F header_parser.py - -打包后的可执行文件在dist目录中 -./src/tsGen/dist/header_parser - -##### Windows - -**1.生成napi_generator程序** - -1.1 安装typescript:使用管理员身份在napi_generator/src目录下执行命令: - - npm i typescript - -1.2 安装stdio:使用管理员身份在napi_generator目录下执行命令: - - npm i stdio - -1.3 安装pkg : 使用管理员身份在napi_generator目录下执行命令: - - npm i -g pkg - -1.4 打包三个版本 : 使用管理员身份执行命令: - - pkg . - -执行以上步骤后,即可在napi_generator目录下生成Windows、linux、mac系统下的可执行程序: - - napi_generator-win.exe、napi_generator-linux、napi_generator-macos - -1.4.1(可选步骤)根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: - - pkg -t node14-win . -o napi_generator-win.exe - -若想只打包linux系统下可执行文件,可执行命令: - - pkg -t node14-linux . -o napi_generator-linux - -若想只打包macos系统下可执行文件,可执行命令: - - pkg -t node14-macos . -o napi_generator-macos - -**2.生成header_parser程序** - -2.1 安装python库 CppHeaderParser,在header_parser/src_code中下载CppHeaderParser.zip,解压后替换本地Python文件夹中CppHeaderParser(如 C:\Python310\Lib\site-packages\CppHeaderParser)目录下的全部文件 - -[下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/kBG1c7CvT) - -[下载链接2](http://ftp.kaihong.com:5000/sharing/kBG1c7CvT) - -[下载链接3](http://ftp.kaihongdigi.com:5000/sharing/kBG1c7CvT) - -2.2 安装 pyinstaller - - pip install pyinstaller - -2.3 将python脚本打包成独立可执行文件 -进入 napi_generator/src/tsGen 目录后执行如下命令: - - pyinstaller -F header_parser.py - -打包后的可执行文件header_parser.exe在dist目录中 -./src/tsGen/dist/header_parser.exe - -### IntelliJ 插件开发说明 - -具体的插件开发步骤,可以左键单击以下链接了解: - -[IntelliJ插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/hdc/ts/ts_IntelliJ_plugin/docs/DEVELOP_ZH.md) \ No newline at end of file diff --git a/docs/guide/ts/FAQ.md b/docs/guide/ts/FAQ.md deleted file mode 100644 index b1ddc811..00000000 --- a/docs/guide/ts/FAQ.md +++ /dev/null @@ -1,12 +0,0 @@ -# Ts接口生成工具 问题反馈 - -## 问题反馈 - -1、使用工具转换.h文件时报错,显示header_parser.exe文件有误。 - -![](../../../figures/header_parser_not_exist.png) - -问题定位:使用可执行程序转换.h文件时,当前路径下没有header_parser.exe文件,导致转换失败。 - -问题解决:下载header_parser.exe文件,并放置在napi_generator-win.exe、待转换.h文件相同路径下,即可解解决以上问题。 - diff --git a/docs/guide/ts/INSTRUCTION_ZH.md b/docs/guide/ts/INSTRUCTION_ZH.md deleted file mode 100644 index 759479d8..00000000 --- a/docs/guide/ts/INSTRUCTION_ZH.md +++ /dev/null @@ -1,98 +0,0 @@ -# Ts接口生成工具使用说明 -## 简介 - -Ts接口生成工具支持两种入口,分别是可执行程序、IntelliJ插件,使用者可以根据自己的需要选择合适的工具。可执行文件、IntelliJ插件下载路径如下。 - -[下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/kBG1c7CvT) - -[下载链接2](http://ftp.kaihong.com:5000/sharing/kBG1c7CvT) - -[下载链接3](http://ftp.kaihongdigi.com:5000/sharing/kBG1c7CvT) - -下载文件说明如下: - - │ │ |── generator.jar # IntelliJ插件 - │ │ |── header_parser - │ │ |── |── linux - │ │ |── |── |── header_parser # Linux下python脚本可执行程序 - │ │ |── |── windows - │ │ |── |── |── header_parser.exe # Windows下python脚本可执行程序 - │ │ |── |── src_code - │ │ |── |── |── CppHeaderParser.zip # CppHeaderParser源码 - │ │ |── |── readme.txt # readme.txt - │ │ |── napi_generator-linux # Linux可执行程序 - │ │ |── napi_generator-win.exe # Windows可执行程序 - │ │ └── napi_generator-macos # Mac可执行程序 - -## 工具介绍 - -通过Ts接口生成工具,使用者可以将已有的.h接口文件生成ts文件,进而将生成的ts文件作为NAPI框架生成代码工具的输入,生成NAPI框架代码,达到工具链的效果。工具的软件架构如下: - -![](../../../figures/ts_framework.png) - - -## 使用方法 - -### 可执行程序使用方法 - -#### Linux - -1.将待转换的.h文件、napi_generator-linux、header_parser放在同级目录下,此处新建out文件夹,用于存放生成.d.ts文件。整体目录文件如下: - - harmony@Ubuntu-64:~/service/linshi$ ls - baseapi.h header_parser napi_generator-linux out - -2.在终端中进入到之前可执行程序napi_generator-linux所在的目录,并运行napi_generator-linux,命令如下: - - harmony@Ubuntu-64:~/service/linshi$ ./napi_generator-linux -f baseapi.h -t true -o out - -其中,参数详情如下: - -f, 待转换的.h文件,若同时转换多个文件,文件之间用“,”隔开; - -d, 根据指定路径转换该文件夹中所有.h文件; - -t, 区分ts生成与napi转换工具,值为true时表示ts生成,false表示napi转换,默认为false; - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 - - 备注:-f与-d两个参数只选其中一个参数即可。 - -3.运行成功后会在out目录下生成.d.ts文件,如下所示: - - harmony@Ubuntu-64:~/linshi/napi_generator_8/examples/ts/out$ ls - napi_gen.log baseapi.d.ts - -#### Windows - -1.将待转换的.h文件、napi_generator-win.exe、header_parser.exe放在同级目录下,此处新建out文件夹,用于存放生成.d.ts文件。整体目录文件如下: - - E:\demo\napi>dir /B - baseapi.h - header_parser.exe - napi_generator-win.exe - out - -2.在终端中进入到之前可执行程序napi_generator-win.exe所在的目录,并运行napi_generator-win.exe,命令如下: - - E:\demo\napi>napi_generator-win.exe -f baseapi.h -t true -o out - -其中,参数详情如下: - -f, 待转换的.h文件,若同时转换多个文件,文件之间用“,”隔开; - -d, 根据指定路径转换该文件夹中所有.h文件; - -t, 区分ts生成与napi转换工具,值为true时表示ts生成,false表示napi转换,默认为false; - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径。 - - 备注:-f与-d两个参数只选其中一个参数即可。 - -3.运行成功后会在out目录下生成.d.ts文件,如下所示: - - E:\demo\napi\out>dir /B - napi_gen.log - baseapi.d.ts - -#### Mac - -方法步骤参考windows、Linux的使用方法。 - -### IntelliJ插件使用方法 - -具体的插件使用步骤,可以左键单击以下链接了解: - -[IntelliJ插件使用说明](https://gitee.com/openharmony/napi_generator/tree/master/hdc/ts/ts_IntelliJ_plugin/docs/INSTRUCTION_ZH.md) diff --git a/docs/guide/ts/README_ZH.md b/docs/guide/ts/README_ZH.md deleted file mode 100644 index 4d7538f6..00000000 --- a/docs/guide/ts/README_ZH.md +++ /dev/null @@ -1,126 +0,0 @@ -# Ts接口生成工具 - -## 简介 -本文主要介绍ts(type-script)接口生成工具,它可以根据定义在c++头文件中的接口,生成type-script语言的ts接口文件。若某个服务实现方式为c++,且供应用层访问的接口已在.h文件中定义,此时,NAPI接口开发者使用此工具可一键生成对应的ts文件,进而将生成的ts文件作为NAPI框架生成代码工具的输入,生成NAPI框架代码。串行使用ts接口生成工具、NAPI框架代码生成工具,形成工具链,达到降低NAPI接口开发难度,提高开发效率。目前工具支持可执行文件、IntelliJ插件两种入口。 - -更多工具的架构和实现原理详情,可以左键单击以下链接了解: - -[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/docs/guide/ts/INSTRUCTION_ZH.md) - - ├── napi_generator # NAPI框架代码生成工具 - │ ├── ... # 其他文档 - │ ├── src # 工具源码 - │ │ ├── gen # NAPI框架工具源码 - │ │ ├── tsGen # Ts框架工具源码 - │ │ | ├── header_parser.py # 解析C++头文件并生成表示类的数据结构 - │ │ | |── tsMain.js # Ts框架工具源码入口 - │ │ ├── ... # 其他文件 - -## 约束 -系统:建议Ubuntu 20.04或者Windows 10 - -依赖版本:VS Code 1.62.0 - -## 使用方法 - -### 使用对象 - -系统开发者、应用Native开发者 - -### 使用场景 - -1) 系统框架层新增子系统,需对应用层提供接口。 -2) 系统框架层子系统能力增强后,需对应用层提供新接口。 -3) 应用层引入C++三方库,需增加OpenHarmony应用层接口。 - -### 工具使用 - -工具有两种类型,分别是可执行文件、IntelliJ插件。其中的可执行文件可根据工具使用者的开发环境选择,支持Windows,Linux和Mac。可执行文件、IntelliJ插下载路径如下,选择napi_generator_outputs.zip中generator.jar下载: - -[下载链接](http://ftp.kaihongdigi.com:5000/fsdownload/mKjfCmPjk/generator_outputs_NAPI_0930) - -具体的工具使用步骤,可以左键单击以下链接了解: - -[工具使用说明](https://gitee.com/openharmony/napi_generator/tree/master/docs/guide/ts/INSTRUCTION_ZH.md) - -### 工具输出 - -根据使用者指定的.h文件,工具会输出对应的ts接口文件。为了方便使用者快速上手工具,可供测试的test.h文件样例如下: - -``` - - #include < string > - #include < vector > - using namespace std; - - class TestA { - public: - char16_t string1; - void add(string v, long double v1[]); - }; - double count(double v, double v1[]); - - namespace Space { - class TestBB { - public: - short string4; - bool ifExist(bool v, bool v1[]); - }; - uint32_t max(uint32_t v, uint32_t v1[]); - } -``` - -在window环境下的,根据输入文件test.h,生成的输出文件,如下所示: - -![](../../../figures/h-2-ts-succ.png) - - -其中生成的"test.d.ts"文件,定义了应用开发接口,如下所示: - - declare class TestA { - string1: string; - add(v: string, v1: Array): void; - } - declare namespace Space { - function max(v: number, v1: Array): number; - class TestBB { - string4: number; - ifExist(v: boolean, v1: Array): boolean; - } - } - declare function count(v: number, v1: Array): number; - - export default Space; - - -## 工具开发说明 - -### 对象 - -工具的开发者 - -### 开发场景 - -若当前工具的功能已经不能满足开发者的全部需求,则开发者可以基于已有的源码对工具进行二次开发,来增强工具的能力,编译打包生成自定义的可执行文件和插件。 - -### 开发步骤 - -开发者可以根据如下的步骤来完成对工具的开发: - - [工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/docs/guide/ts/DEVELOP_ZH.md) - -## 版本说明 - - [版本说明](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ts/ts_Gen-1.0.md) - -## FAQ - - [FAQ](https://gitee.com/openharmony/napi_generator/tree/master/docs/guide/ts/FAQ.md) - -## 参与贡献 - -暂无 - -## 相关仓 - -暂无 diff --git a/docs/guide/ts/ROADMAP_ZH.md b/docs/guide/ts/ROADMAP_ZH.md deleted file mode 100644 index b31531a5..00000000 --- a/docs/guide/ts/ROADMAP_ZH.md +++ /dev/null @@ -1,41 +0,0 @@ -# TS接口文件生成工具 - -## 版本规划 - -2023.08.30提供1.1版本 基本完善工具C++支持能力,具体特性见表1。 - -**表 1** 2023.08.30待支持特性 - - - - - - - - - - - - - - - - - - -

类别

-

待开发特性

-

入口平台

-

变量/返回值

-
  • 支持C++语言中enum复合类型变量/函数入参自动转换为对应TS接口中的变量/函数
  • 支持C++语言中std::map转换为对应TS接口中的Map<>
  • 支持C++语言中std::any转换为对应TS接口中的any
  • 支持C++语言中namespace域嵌套namespace转换为对应TS接口中的实现
  • 支持C++语言数组类型为using定义的NUMBER_TYPE类型转换为对应TS接口中的变量
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
  • VSCode插件-Windows/Ubuntu/Mac
-

namespace

-
  • 支持.h文件中namespace域class继承转换为对应TS文件中继承的class
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
  • VSCode插件-Windows/Ubuntu/Mac
-
- - -## 相关链接 - -无 - diff --git a/docs/guide/ts/ts_Gen-1.0.md b/docs/guide/ts/ts_Gen-1.0.md deleted file mode 100644 index decb5880..00000000 --- a/docs/guide/ts/ts_Gen-1.0.md +++ /dev/null @@ -1,61 +0,0 @@ -# ts_Gen-1.0(2023-01-30) - -## 版本概述 - -发布ts_Gen-1.0。 - -## 版本特性 - -**表 1** 已支持特性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

类别

-

支持特性

-

入口平台

-

变量/返回值

-
  • 支持C++语言中string、std::string、char、wchar_t、char16_t、char32_t、short、int、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、double_t、float_t、size_t、long、long long、float、double、long double、bool基础类型的变量/函数入参自动转换为对应TS接口中变量/入参
  • 支持C++语言中string、std::string、char、wchar_t、char16_t、char32_t、short、int、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、double_t、float_t、size_t、long、long long、float、double、long double、bool数组类型的变量/函数入参自动转换为对应TS接口中变量/入参,数组书写方式为std::vector<>
  • 支持C++语言string、std::string、char、wchar_t、char16_t、char32_t、short、int、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、double_t、float_t、size_t、long、long long、float、double、long double、bool基础类型的返回值自动转换为对应TS接口中返回值
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
-

函数类型

-
  • 支持ts接口文件中namespace域的static函数自动转换为对应TS接口中的函数
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
-

class

-
  • 支持C++语言中class的变量、函数自动转换为对应TS接口中的变量、函数
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
-

namespace

-
  • 支持C++语言中namespace域的变量、函数自动转换为对应TS接口中的变量、函数
  • 支持.h文件中namespace域class转换为对应TS接口中的class
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
-

文件

-
  • 支持.h文件中namespace数据类型转换为对应TS接口中的数据类型
  • 支持C++文件名格式A.h的文件转换
  • 支持命令行方式转换时参数为多个文件路径,相互之间用英文逗号分开
  • 支持命令行方式转换时指定文件夹路径方式转换
-
  • 可执行文件-Windows/Ubuntu/Mac
  • IntelliJ插件-Windows
-
- -**表 2** - -[待开发特性](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ts/ROADMAP_ZH.md) \ No newline at end of file diff --git a/docs/requirement/To-do_list.md b/docs/requirement/To-do_list.md deleted file mode 100644 index c2089f92..00000000 --- a/docs/requirement/To-do_list.md +++ /dev/null @@ -1,36 +0,0 @@ -# To-do list - -## History - -| 版本号 | 修订人 | 修订日期 | 修订描述 | -| ------ | ------ | ------------- | -------- | -| V0.1 | 苟晶晶 | 2024年3月25日 | 新建 | -| | | | | - -## Requirement - -| issue | 描述 | 分析 | 结论 | ToDo | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------- | ---- | -| 【需求】[napi_tool]:工具生成代码中增加打印调试信息 | 工具生成代码中增加关键节点信息打印,便于开发者确认流程 | 开发者通过关键信息打印,可以迅速定位问题 | 优先级低 | | -| 【需求】[napi_tool]: 箭头函数参数为回调函数时,编译报错 | 箭头函数的参数是箭头函数形式的回调函数时,编译报错。
.d.ts文件内容如下:
declare namespace napitest {
export class A {
a: string;
}
export interface InterfaceA {
callFunction: (result: number) => void;
}
export interface InterfaceB {
funcByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;
}
// export const addByClass: (a: A, b: number, callback: (result: number) => void, c: InterfaceA) => number;
}
export default napitest; | 扩展工具的特性范围,提高工具可用性 | 优先级低 | | -| 【需求】[napi_tool]:(等待更佳解决方案)分离生成的工具代码普通方法和回调方法,防止嵌套使用头文件 | 需求背景: 当前工具生成的中间代码,普通方法和回调方法的接口均在一个头文件里,这样会导致嵌套使用头文件造成可读性不强,需要整改生成代码将普通方法和回调方法的接口分离到不同头文件,增加易用性和可读性
需求阻塞点:
由于工具生成的中间代码均在 XXXmiddle.cpp 中,将XXX.h分离成XXXToC.h与XXXToJs.h之后,XXXmiddle.cpp中include, 若.d.ts中的文件声明一个interface类中全部定义为注册回调的方法,按照预期应该将该interface声明在XXXToJs.h中,而由于注册回调的中间代码都在XXXmiddle.cpp中, XXXmiddle.cpp中该interface的构造函数用到了XXXToJs.h中定义的类,这时若要解决这个问题,就需将XXXmiddle.cpp文件进行拆分,这样代码改动太大,需寻求更佳的解决方案
当前进展:
当前修改无法跑过test_on测试用例集 | 需求调研,提高工具可用性 | 优先级降低 | | -| 【需求】[napi_tool]: on/off第二个参数支持object | [napi_tool] on/off第二个参数支持object,其中object中定义需要注册的回调
function on(type: 'missionEvent', listener: MissionListener): number;
export interface MissionListener {
onMissionCreated(mission: number): void;
onMissionDestroyed(mission: number): void;
} | 扩展注册的使用场景,增加工具易用性 | 优先级中 | | -| 【需求】[napi_tool]: on注册回调的箭头函数支持携带js返回值给C++ | on注册回调的箭头函数支持携带js返回值给C++;
1130后支持 | 需求调研,业务需要根据回调返回值进行后续处理的场景 | 优先级低 | | -| 【需求】[napi_tool]: 支持js业务代码回调接口中的回调js函数 | function_direct处理逻辑覆盖此场景,需要增加只传递回调,不触发的场景
.d.ts定义:
function callbackWrapper(original: Function): (err: Object, value: Object) => void;
调用方式:
function callbackWrapper(original) {
if (typeof original !== 'function') {
let error = new BusinessError(`Parameter error.The type of ${original} must be function`);
throw error;
}
const descriptors = getOwnPropertyDescriptors(original);
if (typeof descriptors.length.value === 'number') {
descriptors.length.value++;
}
if (typeof descriptors.name.value === 'string') {
descriptors.name.value += 'callbackified';
}
function cb(...args) {
callbackified(original, ...args);
}
Object.defineProperties(cb, descriptors);
return cb;
} | 需求调研,扩展工具的特性范围,提高工具可用性。 | 优先级低 | | -| 【需求】[napi_tool]: type, interface支持成员变量any, object, Enum为可选参数 | type, interface当前成员变量支持any, object, Enum可选参数的转换
当前interface/type支持可选参数类型已经包括:number, string, boolean, Array, string/number/boolean[], Map, {[key:string]:string/number/boolean}, number \| string \|boolean
待支持类型:any, object, Enum
.d.ts文件如下所示:
export enum LaunchReason {
UNKNOWN = 0,
START_ABILITY = 1,
CALL = 2,
CONTINUATION = 3,
}
type test =
{
param1?: object;
param2?: any;
param3?: Array;
param4?: Map;
$param5?: any;
param6?: Array;
param7?: Map;
param8?: LaunchReason;
}
interface interfaceTest
{
param1?: object;
param2?: any;
param3?: Array;
param4?: Map;
$param5?: any;
param6?: Array;
param7?: Map;
param8?: LaunchReason;
}
function func(v1: test, v2: interfaceTest): void; | 使用场景较少,建议暂不支持 | 优先级低 | | -| 【需求】[gn, api, service, ts]:modify gn faq and add storytest for api, service, ts tools | 修改gn工具faq文档并为ts, api, service工具增加storytest,可自动化测试 | 确认需继续维护的工具可增加storytest和unittest | 优先级中 | | -| 【需求】[napi_tool]:ts接口定义入参/变量为any,JS调用时部分参数类型报错 | ts接口定义入参/变量为any,JS调用时参数类型为map、array、interface、interface(enum)嵌套时报错
ts定义如下:
function fun1(v: any, v1: string): number;
JS调用如下:
// map> --当前不支持
ret = test.fun1({"test": ["okay", "okay"], "test1": ["res", "res"]}, 'aaa');
assert.strictEqual(ret, 0);
// Array> --当前不支持
ret = test.fun1([{"test": 15, "test1": 18}, {"test": 15, "test1": 18}], 'aaa');
assert.strictEqual(ret, 0);
// interface --当前不支持
ret = test.fun1({'name': 'aaaa', 'age': 18}, 'aaa');
assert.strictEqual(ret, 0);
// interface --当前不支持
ret = test.fun1({'type': LaunchReason.CALL, 'age': 'aaa'}, 'aaa');
assert.strictEqual(ret, 0); | 需求调研 | 优先级低 | | -| 【bug】[napi_tool]on回调&箭头函数回调,回调方式默认为同步,需约定异步回调方式入口 | on回调 & 箭头函数回调,回调方式默认为同步,无异步回调方式入口 | 扩展注册的使用场景,增加工具易用性,建议转需求 | 优先级中 | | -| 【bug】[napi_tool]函数返回值支持array、array<{[key:string]:any}> | 函数返回值不支持array、array<{[key:string]:any}> | 使用场景较少,建议暂不支持 | 优先级低 | | -| 【bug】[napi_tool]支持ts接口文件中namespace域的new函数 | 目前不支持ts接口文件中namespace域interface中带参数的new函数,如:new (value?: { width?: string \| number; height?: string \| number }): PolygonAttribute; | 使用场景较少,建议暂不支持 | 优先级低 | | -| 【bug】[napi_tool]工具代码中若在class1中构造函数使用的class2在class1之后,生成后的代码编译报错 | 若class1中的有参构造的参数有class2时,且class2声明在class1之后,编译时报错:field ‘aPro’ has incomplete type ‘example::A’
.d.ts文件如下所示:
declare namespace example {
class Demo {
constructor(intPro: number, strPro: string, boolPro: boolean, aPro: A);
intPro: number;
strPro: string;
boolPro: boolean;
aPro: A;
}
class A
{
constructor(proA: number, proB: string, proC: boolean);
func1(pro: number);
func2(pro: string);
func3(pro: boolean);
proA: number;
proB: string;
proC: boolean;
}
} | 该bug实际是为了支持class构造函数包含class的情况,建议转需求调研 | 优先级中 | | - - - -## Change Log - -| 计划 | 进展 | 结论 | 时间 | -| ---- | ---- | ---- | ---- | -| | | | | -| | | | | - -- Gitee From 30f3d32dc4df56abed51496070b9154dae93c081 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 14:22:17 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- docs/guide/ADD_SERVICECODE_INSTRUCTION.md | 110 ------- docs/guide/DEVELOP_ZH.md | 120 ------- docs/guide/ENSEMBLE_METHOD_3.1VERSION.md | 362 ---------------------- docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md | 171 ---------- docs/guide/ENSEMBLE_METHOD_ZH.md | 310 ------------------ docs/guide/INSTRUCTION_ZH.md | 285 ----------------- docs/guide/INTEGRATION_TESTING_ZH.md | 274 ---------------- docs/guide/ROADMAP_ZH.md | 44 --- docs/guide/SOLUTION.md | 72 ----- 9 files changed, 1748 deletions(-) delete mode 100644 docs/guide/ADD_SERVICECODE_INSTRUCTION.md delete mode 100644 docs/guide/DEVELOP_ZH.md delete mode 100644 docs/guide/ENSEMBLE_METHOD_3.1VERSION.md delete mode 100644 docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md delete mode 100644 docs/guide/ENSEMBLE_METHOD_ZH.md delete mode 100644 docs/guide/INSTRUCTION_ZH.md delete mode 100644 docs/guide/INTEGRATION_TESTING_ZH.md delete mode 100644 docs/guide/ROADMAP_ZH.md delete mode 100644 docs/guide/SOLUTION.md diff --git a/docs/guide/ADD_SERVICECODE_INSTRUCTION.md b/docs/guide/ADD_SERVICECODE_INSTRUCTION.md deleted file mode 100644 index a9280702..00000000 --- a/docs/guide/ADD_SERVICECODE_INSTRUCTION.md +++ /dev/null @@ -1,110 +0,0 @@ -# 手动配置业务代码说明 -## 简介 - -工具生成框架代码时支持使用cfg.json文件配置业务代码,当用户自动配置业务代码无法达成目的时也可手动进行业务代码配置,本文主要介绍不使用配置文件cfg.json进行业务代码配置并生成框架代码的过程。 - -## 生成框架 - -### 可执行程序使用方法 - -#### Linux - -1.将待转换的.d.ts文件、依赖文件basic.d.ts、napi_generator-linux放在同级目录下。此处新建generatorCode文件夹,用于存放生成框架代码。整体目录文件如下: - - OpenHarmony@Ubuntu-64:~/service$ ls - napi_generator-linux @ohos.napitest.d.ts basic.d.ts generatorCode - -2.在终端中进入到之前可执行程序napi_generator-linux所在的目录,并运行napi_generator-linux,命令如下: - - OpenHarmony@Ubuntu-64:~/service$ ./napi_generator-linux -f @ohos.napitest.d.ts -o generatorCode -i false -n int - -其中,参数详情如下: - - -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; - - -d, 根据指定路径转换该文件夹中所有.d.ts文件; - - -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; - - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; - - -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; - - -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 - - 备注1:-f与-d两个参数只选其中一个参数即可。 - - 备注2:若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件同一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 - -3.运行成功后会在generatorCode目录下生成框架代码文件,如下所示: - - OpenHarmony@Ubuntu-64:~/linshi/napi_generator_8/examples/ts/generatorCode$ ls - binding.gyp BUILD.gn napi_gen.log napitest.cpp napitest.h napitest_middle.h napitest_middle.cpp test.sh tool_utility.cpp tool_utility.h - -#### Windows - -1.将待转换的.d.ts文件、依赖文件basic.d.ts、napi_generator-win.exe放在同级目录下。此处新建generatorCode文件夹,用于存放生成框架代码。整体目录文件如下: - - E:\demo\napi>dir /B - @ohos.napitest.d.ts - basic.d.ts - napi_generator-win.exe - generatorCode - -2.在终端中进入到之前可执行程序napi_generator-win.exe所在的目录,并运行napi_generator-win.exe,命令如下: - - E:\demo\napi>napi_generator-win.exe -f @ohos.napitest.d.ts -o generatorCode -i false -n double - -其中,参数详情如下: - - -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; - - -d, 根据指定路径转换该文件夹中所有.d.ts文件; - - -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; - - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; - - -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; - - -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 - - 备注1:-f与-d两个参数只选其中一个参数即可。 - - 备注2:若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件同一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 - -3.运行成功后会在generatorCode目录下生成框架代码文件,如下所示: - - E:\demo\napi\generatorCode>dir /B - binding.gyp - BUILD.gn - napitest.cpp - napitest.h - napitest_middle.h - napitest_middle.cpp - napi_gen.log - test.sh - tool_utility.cpp - tool_utility.h - -#### Mac - -方法步骤参考windows、Linux的使用方法。 - -### VS Code插件使用方法 - -具体的插件使用步骤,可以左键单击以下链接了解: - -[VS插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_vs_plugin/docs/napi/INSTRUCTION_ZH.md) - -### DevEco Studio上使用的IntelliJ插件使用方法 - -具体的插件使用步骤,可以左键单击以下链接了解: - -[DevEco Studio上使用的IntelliJ插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_IntelliJ_plugin/docs/napi/INSTRUCTION_ZH.md) - -## 集成测试 -NAPI框架代码生成后,系统框架开发者进行二次开发后,即可集成到OpenHarmony编译系统,生成对应的库文件,供应用开发者调用接口。工具集成测试的具体操作步骤可以左键单击以下链接了解: - - [工具集成测试](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/INTEGRATION_TESTING_ZH.md) - diff --git a/docs/guide/DEVELOP_ZH.md b/docs/guide/DEVELOP_ZH.md deleted file mode 100644 index c5e34992..00000000 --- a/docs/guide/DEVELOP_ZH.md +++ /dev/null @@ -1,120 +0,0 @@ -# NAPI框架生成工具开发说明 - -若当前工具功能不满足开发者需求,开发者需增强工具能力,则可基于已有源码进行工具二次开发,编译打包生成自定义的可执行文件和插件。 - -## 工具开发 - -### 可执行文件开发说明 - -#### 环境说明 - -系统:建议Ubuntu 20.04或者Windows 10 - -#### 开发步骤 - -##### Linux - -1.安装typescript:在napi_generator/src目录下执行命令: - - npm i typescript - -2.安装stdio:在napi_generator目录下执行命令: - - npm i stdio - -3.安装pkg : 在napi_generator目录下执行命令: - - sudo npm i -g pkg - -4.集成clang-format(可选步骤): - - 如果需要工具自动格式化生成的C++代码,可执行此步骤。 - 将windows版的clang-format.exe程序和linux版的clang-format程序拷贝到napi_generator目录下。 - clang-format程序可从OpenHarmony编译环境获取: - windows版:OpenHarmony/prebuilts/clang/ohos/windows-x86_64/llvm/bin/clang-format.exe - Linux版:OpenHarmony/prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/bin/clang-format - -5.打包三个版本 : 执行命令: - - pkg . - -执行以上步骤后,即可在napi_generator目录下生成Windows、linux、mac系统下的可执行程序: - - napi_generator-win.exe、napi_generator-linux、napi_generator-macos - -6.根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: - - pkg -t node14-win . -o napi_generator-win.exe - -若想只打包linux系统下可执行文件,可执行命令: - - pkg -t node14-linux . -o napi_generator-linux - -若想只打包macos系统下可执行文件,可执行命令: - - pkg -t node14-macos . -o napi_generator-macos - -备注:参数-t为指定系统,参数-o为指定可执行文件名称。 - - -##### Windows - -1.安装typescript:使用管理员身份在napi_generator/src目录下执行命令: - - npm i typescript - -2.安装stdio:使用管理员身份在napi_generator目录下执行命令: - - npm i stdio - -3.安装pkg : 使用管理员身份在napi_generator目录下执行命令: - - npm i -g pkg - -4.集成clang-format(可选步骤): - - 如果需要工具自动格式化生成的C++代码,可执行此步骤。 - 将windows版的clang-format.exe程序和linux版的clang-format程序拷贝到napi_generator目录下。 - clang-format程序可从OpenHarmony编译环境获取: - windows版:OpenHarmony/prebuilts/clang/ohos/windows-x86_64/llvm/bin/clang-format.exe - Linux版:OpenHarmony/prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/bin/clang-format - -5.打包三个版本 : 使用管理员身份执行命令: - - pkg . - -执行以上步骤后,即可在napi_generator目录下生成Windows、linux、mac系统下的可执行程序: - - napi_generator-win.exe、napi_generator-linux、napi_generator-macos - -6.根据需求打包指定系统下的可执行文件。若想只打包windows系统下可执行文件,可执行命令: - - pkg -t node14-win . -o napi_generator-win.exe - -若想只打包linux系统下可执行文件,可执行命令: - - pkg -t node14-linux . -o napi_generator-linux - -若想只打包macos系统下可执行文件,可执行命令: - - pkg -t node14-macos . -o napi_generator-macos - -### VS插件开发说明 - -具体的插件开发步骤,可以左键单击以下链接了解: - -[VS插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_vs_plugin/docs/napi/DEVELOP_ZH.md) - -### DevEco Studio上使用的IntelliJ插件开发说明 - -具体的插件开发步骤,可以左键单击以下链接了解: - -[DevEco Studio上使用的IntelliJ插件开发说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_IntelliJ_plugin/docs/napi/DEVELOP_ZH.md) - -## 工具测试 - 进行工具二次开发后,本地可进行单元测试、story特性测试确保工具的可用性。左键单击以下链接了解详情: - - [单元测试](https://gitee.com/openharmony/napi_generator/blob/master/test/unittest/README_ZH.md) - - [story测试](https://gitee.com/openharmony/napi_generator/blob/master/test/storytest/README_ZH.md) - diff --git a/docs/guide/ENSEMBLE_METHOD_3.1VERSION.md b/docs/guide/ENSEMBLE_METHOD_3.1VERSION.md deleted file mode 100644 index 0bfdc0ff..00000000 --- a/docs/guide/ENSEMBLE_METHOD_3.1VERSION.md +++ /dev/null @@ -1,362 +0,0 @@ -# 集成到OpenHarmony 3.1 Release的方法 - -## 场景说明 - -为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 -本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用,集成到OpenHarmony 3.1 Release主要是有以下两种方式,分别为增加ohos.build文件方式和增加bundle.json文件方式。 - -## 3.1 版本 - -### bundle.json方式集成 - -#### 建立模块位置 - -模块目录理论上可在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为新增的编译配置文件,其它为工具生成的代码。 - -#### 编译修改点 - -##### 修改BUILD.gn文件 - -将deps中"//foundation/arkui/napi:ace_napi"的修改为"//foundation/ace/napi:ace_napi",修改后的BUILD.gn文件内容如下所示: - -``` -import("//build/ohos.gni") - -ohos_shared_library("napitest") -{ - sources = [ - "napitest_middle.cpp", - "../serviceCode/NodeISayHello.cpp", # 将业务代码编译进去 - "napitest.cpp", - "tool_utility.cpp", - ] - include_dirs = [ - ".", - "//third_party/node/src", - ] - deps=[ - "//foundation/ace/napi:ace_napi", - "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog", - ] - remove_configs = [ "//build/config/compiler:no_rtti" ] - cflags=[ - ] - cflags_cc=[ - "-frtti", - ] - ldflags = [ - ] - - relative_install_dir = "module" - part_name = "napitest" - subsystem_name = "napitest" -} -``` - -若用户需要修改子系统和部件名称,则根据自身需求修改BUILD.gn文件和bundle.json文件中子系统与部件名称即可。 - -##### 修改bundle.json文件 - -其中destPath选项中的"//foundation/napitest"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。 - -``` -{ - "name": "@ohos/napitest", - "description": "napitest provides atomic capabilities", - "version": "3.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": [ - "ace_napi", - "ipc_core", - "libhilog" - ], - "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" - } - ] - } - } -} -``` - -##### 修改napitest.cpp文件 - -为方便调试,在napitest.cpp文件中增加业务代码。以修改napitest.cpp文件为例,在以下方法中增加业务代码, - -在sayHello方法中增加注册的object回调方法的调用: - -``` -... -// 业务代码调用 onSayHelloStart callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloStartCallback(info1); -// 业务代码调用 onSayHelloEnd callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloEndCallback(info2); -... -``` - -在sayHi方法中增加register注册的回调方法的调用: - -``` -... -napitest::napitest_interface::NodeISayHello *ptr = new napitest::napitest_interface::NodeISayHello(); -uint32_t callbackNum = 50; -ptr->CallbackfuncCallback(callbackNum); -delete ptr; -... -``` - -在sayHelloWithResponse方法中增加Promise回调方法的调用: - -``` -... -out.errMsg = ""; -out.response = "rec hello."; -out.result = 0; -... -``` - -在funcTest方法中增加普通函数的业务逻辑: - -``` -... -if (v) { - out = "ret is true"; -} else { - out = "ret is false"; -} -... -``` - -增加业务代码之后的文件如下所示: - -[napitest.cpp](https://gitee.com/openharmony/napi_generator/blob/master/examples/napitest.cpp) - -##### 增加子系统 - -在源码/build/subsystem_config.json中增加子系统选项。如下所示: - -``` -"napitest": { - "project": "hmf/napitest", - "path": "foundation/napitest", - "name": "napitest", - "dir": "foundation" - } -``` - -#### 添加功能模块 - -在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。 - - "napitest:napitest":{} - -#### 编译验证 - -编译成功后,就会在 /out/产品名/packages/phone/system/lib/module/ 生成libnapitest.z.so,如下所示: - - /out/ohos-arm-release/packages/phone/system/lib/module - -### ohos.build方式集成 - -#### 建立模块位置 - -模块目录理论上可在OpenHarmony工程的任一位置,假设OpenHarmony代码库的目录为OHOS_SRC,在OHOS_SRC/foundation目录下,建测试模块目录:napitest。napitest目录结构如下: - - napitest - |-- binding.gyp - |-- BUILD.gn - |-- ohos.build - |-- napitest.cpp - |-- napitest.h - |-- napitest_middle.h - |-- napitest_middle.cpp - |-- test.sh - |-- tool_utility.cpp - |-- tool_utility.h - -其中ohos.build为新增的编译配置文件,其它为工具生成的代码。 - -#### 编译修改点 - -##### 修改BUILD.gn文件 - -将deps中"//foundation/arkui/napi:ace_napi"的修改为"//foundation/ace/napi:ace_napi",修改后的BUILD.gn文件内容如下所示: - -``` -import("//build/ohos.gni") - -ohos_shared_library("napitest") -{ - sources = [ - "napitest_middle.cpp", - "../serviceCode/NodeISayHello.cpp", # 将业务代码编译进去 - "napitest.cpp", - "tool_utility.cpp", - ] - include_dirs = [ - ".", - "//third_party/node/src", - ] - deps=[ - "//foundation/ace/napi:ace_napi", - "//base/hiviewdfx/hilog/interfaces/native/innerkits:libhilog", - ] - remove_configs = [ "//build/config/compiler:no_rtti" ] - cflags=[ - ] - cflags_cc=[ - "-frtti", - ] - ldflags = [ - ] - - relative_install_dir = "module" - part_name = "napitest" - subsystem_name = "napitest" -} -``` - -若用户需要修改子系统和部件名称,则根据自身需求修改BUILD.gn文件和ohos.build文件中子系统与部件名称即可。 - -##### 修改ohos.build文件 - -其中module_list选项中的"//foundation/napitest"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。 - -``` -{ - "subsystem": "napitest", - "parts": { - "napitest": { - "module_list": [ - "//foundation/napitest:napitest" - ], - "test_list": [] - } - } -} -``` - -##### 修改napitest.cpp文件 - -为方便调试,在napitest.cpp文件中增加业务代码。以修改napitest.cpp文件为例,在以下方法中增加业务代码, - -在sayHello方法中增加注册的object回调方法的调用: - -``` -... -// 业务代码调用 onSayHelloStart callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloStartCallback(info1); -// 业务代码调用 onSayHelloEnd callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloEndCallback(info2); -... -``` - -在sayHi方法中增加register注册的回调方法的调用: - -``` -... -napitest::napitest_interface::NodeISayHello *ptr = new napitest::napitest_interface::NodeISayHello(); -uint32_t callbackNum = 50; -ptr->CallbackfuncCallback(callbackNum); -delete ptr; -... -``` - -在sayHelloWithResponse方法中增加Promise回调方法的调用: - -``` -... -out.errMsg = ""; -out.response = "rec hello."; -out.result = 0; -... -``` - -在funcTest方法中增加普通函数的业务逻辑: - -``` -... -if (v) { - out = "ret is true"; -} else { - out = "ret is false"; -} -... -``` - -增加业务代码之后的文件如下所示: - -[napitest.cpp](https://gitee.com/openharmony/napi_generator/blob/master/examples/napitest.cpp) - -##### 增加子系统 - -在源码/build/subsystem_config.json中增加子系统选项。如下所示: - -``` -"napitest": { - "project": "hmf/napitest", - "path": "foundation/napitest", - "name": "napitest", - "dir": "foundation" - } -``` - -#### 添加功能模块 - -在产品配置中添加上述子系统的功能模块,编译到产品产出文件中,例如在源码/productdefine/common/products/rk3566.json中增加part选项,其中第一个napitest就是BUILD.gn文件中的subsystem_name,第二个napitest就是BUILD.gn文件中的part_name。 - - "napitest:napitest":{} - -#### 编译验证 - -编译成功后,就会在 /out/产品名/packages/phone/system/lib/module/ 生成libnapitest.z.so,如下所示: - - /out/ohos-arm-release/packages/phone/system/lib/module - diff --git a/docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md b/docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md deleted file mode 100644 index 0558607b..00000000 --- a/docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md +++ /dev/null @@ -1,171 +0,0 @@ -# 手动配置业务代码后集成到OpenHarmony的方法 - -## 场景说明 - -为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 -本文介绍如何手动配置业务代码并将生成的代码集成到OpenHarmony 4.0 Release。 - -## 4.0 版本 - -### 建立模块位置 - -模块目录理论上可在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.0", - "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": [ - "ace_napi", - "ipc_core", - "libhilog" - ], - "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" - } - ] - } - } -} -``` - -#### 修改napitest.cpp文件 - -为方便调试,在napitest.cpp文件中增加业务代码。以修改napitest.cpp文件为例,在以下方法中增加业务代码, - -在sayHello方法中增加注册的object回调方法的调用: - -``` -... -// 业务代码调用 onSayHelloStart callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloStartCallback(info1); -// 业务代码调用 onSayHelloEnd callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloEndCallback(info2); -... -``` - -在sayHi方法中增加register注册的回调方法的调用: - -``` -... -napitest::napitest_interface::NodeISayHello *ptr = new napitest::napitest_interface::NodeISayHello(); -uint32_t callbackNum = 50; -ptr->CallbackfuncCallback(callbackNum); -delete ptr; -... -``` - -在sayHelloWithResponse方法中增加Promise回调方法的调用: - -``` -... -out.errMsg = ""; -out.response = "rec hello."; -out.result = 0; -... -``` - -在funcTest方法中增加普通函数的业务逻辑: - -``` -... -if (v) { - out = "ret is true"; -} else { - out = "ret is false"; -} -... -``` - -增加业务代码之后的文件如下所示: - -[napitest.cpp](https://gitee.com/openharmony/napi_generator/blob/master/examples/napitest.cpp) - -#### 增加子系统 - -在源码/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 - diff --git a/docs/guide/ENSEMBLE_METHOD_ZH.md b/docs/guide/ENSEMBLE_METHOD_ZH.md deleted file mode 100644 index 11fe3110..00000000 --- a/docs/guide/ENSEMBLE_METHOD_ZH.md +++ /dev/null @@ -1,310 +0,0 @@ -# NAPI框架生成代码集成到OpenHarmony的方法 - -## 场景说明 - -为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 -本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用,主要是有以下两种方式,分别为增加ohos.build文件方式和增加bundle.json文件方式。 - -## 4.0 版本 - -### 建立模块位置 - -模块目录理论上可在OpenHarmony工程的任一位置,假设OpenHarmony代码库的目录为OHOS_SRC,在OHOS_SRC/foundation目录下,建测试模块目录:napitest。napitest目录结构如下: - - napitest - |-- generatorCode // 工具代码部分 - |-- |-- binding.gyp - |-- |-- BUILD.gn - |-- |-- bundle.json - |-- |-- napitest.cpp - |-- |-- napitest.h - |-- |-- napitest_middle.h - |-- |-- napitest_middle.cpp - |-- |-- test.sh - |-- |-- tool_utility.cpp - |-- |-- tool_utility.h - |-- |-- napi_gen.log - |-- serviceCode // 放置业务代码部分 - |-- |-- NodeISayHello.h - |-- |-- NodeISayHello.cpp - -其中generatorCode为工具生成的代码,serviceCode 为用户配置的业务代码, bundle.json 为新增的编译配置文件。 - -### 编译修改点 - -#### 修改bundle.json文件 - -其中destPath选项中的"//foundation/napitest/generatorCode"指的是napitest目录,":napitest"指的是上面BUILD.gn中的目标ohos_shared_library("napitest")。 - -``` -{ - "name": "@ohos/napitest", - "description": "napitest provides atomic capabilities", - "version": "4.0", - "license": "Apache License 2.0", - "publishAs": "code-segment", - "segment": { - "destPath": "foundation/napitest/generatorCode" - }, - "dirs": {}, - "scripts": {}, - "component": { - "name": "napitest", - "subsystem": "napitest", - "features": [], - "adapted_system_type": [ - "standard" - ], - "rom": "10000KB", - "ram": "10000KB", - "deps": { - "components": [ - "ace_napi", - "ipc_core", - "libhilog" - ], - "third_party": [ - "node" - ] - }, - "build": { - "sub_component": [ - "//foundation/napitest/generatorCode:napitest" - ], - "inner_kits": [ - { - "header": { - "header_base": "//foundation/napitest/generatorCode", - "header_files": [ - "tool_utility.h", - "napitest.h", - "napitest_middle.h" - ] - }, - "name": "//foundation/napitest/generatorCode:napitest" - } - ] - } - } -} -``` - -#### 增加子系统 - -在源码/build/subsystem_config.json中增加子系统选项。如下所示: - -``` -"napitest": { - "path": "foundation/napitest/generatorCode", - "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上的方法: - -[4.0版本手动配置业务代码集成方法](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ENSEMBLE_METHOD_4.0CFGCODE.md) - -## 3.2 版本 - -### 建立模块位置 - -模块目录理论上可在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": "3.2", - "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": [ - "ace_napi", - "ipc_core", - "libhilog" - ], - "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" - } - ] - } - } -} -``` - -#### 修改napitest.cpp文件 - -为方便调试,在napitest.cpp文件中增加业务代码。以修改napitest.cpp文件为例,在以下方法中增加业务代码, - -在sayHello方法中增加注册的object回调方法的调用: - -``` -... -// 业务代码调用 onSayHelloStart callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloStartCallback(info1); -// 业务代码调用 onSayHelloEnd callback -napitest::napitest_interface::NodeISayHello::listener_.NodeISayHelloListener_onSayHelloEndCallback(info2); -... -``` - -在sayHi方法中增加register注册的回调方法的调用: - -``` -... -napitest::napitest_interface::NodeISayHello *ptr = new napitest::napitest_interface::NodeISayHello(); -uint32_t callbackNum = 50; -ptr->CallbackfuncCallback(callbackNum); -delete ptr; -... -``` - -在sayHelloWithResponse方法中增加Promise回调方法的调用: - -``` -... -out.errMsg = ""; -out.response = "rec hello."; -out.result = 0; -... -``` - -在funcTest方法中增加普通函数的业务逻辑: - -``` -... -if (v) { - out = "ret is true"; -} else { - out = "ret is false"; -} -... -``` - -增加业务代码之后的文件如下所示: - -[napitest.cpp](https://gitee.com/openharmony/napi_generator/blob/master/examples/napitest.cpp) - -#### 增加子系统 - -在源码/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 - -## 3.1 版本 - -[3.1版本集成方法](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ENSEMBLE_METHOD_3.1VERSION.md) - -## 总结 - -3.1版本两种集成方式使用场景说明: - -ohos.build方式集成:适合3.0前版本使用。 - -bundle.json方式集成:兼容ohos.build方式,但3.1及以后版本建议使用此种方式集成。 - -3.2版本适合使用bundle.json方式集成。 - -4.0版本适合使用bundle.json方式集成。 - diff --git a/docs/guide/INSTRUCTION_ZH.md b/docs/guide/INSTRUCTION_ZH.md deleted file mode 100644 index f89b9ef9..00000000 --- a/docs/guide/INSTRUCTION_ZH.md +++ /dev/null @@ -1,285 +0,0 @@ -# NAPI框架生成工具使用说明 -## 简介 - -NAPI框架生成工具支持三种入口,分别是可执行程序、VS Code插件、DevEco Studio上使用的IntelliJ插件,使用者可以根据自己的需要选择合适的工具。 - -1.可执行文件下载路径如下(由于网络原因,可能会导致有的下载链接失效,因此提供了以下三个下载链接): - -[可执行文件下载链接1](http://ftpkaihongdigi.i234.me:5000/sharing/yaRiKSjBI) - -[可执行文件下载链接2](http://ftp.kaihong.com:5000/fsdownload/yaRiKSjBI/) - -[可执行文件下载链接3](http://ftp.kaihongdigi.com:5000/fsdownload/yaRiKSjBI/) - -访问密码:kaihong - -压缩包解压密码:kaihong20231121 - -DevEco Studio上使用的IntelliJ插件下载路径如下: - -[DevEco Studio上使用的IntelliJ插件下载链接](https://plugins.jetbrains.com/plugin/19593-napi-generator/versions) - -## 工具介绍 - -通过NAPI框架生成工具,使用者可输入一个接口定义的ts文件,一键生成NAPI框架代码、业务代码框架、GN脚本等文件,并使用生成的NAPI接口及功能。使用者也可以输入一个定义方法的.h头文件,反向生成ts文件。 - -![](../../figures/pic-frm.png) - -## 预检查 - -napi_generator的可执行程序方式和插件方式都具有预检查的功能,如果.d.ts文件中存在语法错误,那么执行的时候命令行会打印出错误信息,指出代码中存在错误的行号。使用效果如下: - - joey@joey-virtual-machine:~/code/napi_test$ ./napi_generator-linux -f @ohos.napitest.d.ts - @ohos.napitest.d.ts (33,12): Identifier expected. - @ohos.napitest.d.ts (33,13): ';' expected. - @ohos.napitest.d.ts (33,13): An identifier or keyword cannot immediately follow a numeric literal. - @ohos.napitest.d.ts (33,13): Cannot find name 'shutdownDevice'. - @ohos.napitest.d.ts (33,28): Cannot find name 'reason'. - @ohos.napitest.d.ts (33,34): ',' expected. - @ohos.napitest.d.ts (33,36): 'string' only refers to a type, but is being used as a value here. - @ohos.napitest.d.ts (33,43): ';' expected. - @ohos.napitest.d.ts (33,49): Expression expected. - - joey@joey-virtual-machine:~/code/napi_test$ - -@ohos.napitest.d.ts (33,49),其中括号中第一个参数含义为行号,第二个参数含义为列号。 - -预检查的触发方式与生成框架的入口一致,使用方法参见生成框架描述。 - -## 生成框架 - -### 自动配置业务代码用例 - -1.ts文件用例 - - [@ohos.napitest.d.ts](https://gitee.com/openharmony/napi_generator/blob/master/examples/ts/@ohos.napitest.d.ts) - -注册关键字说明 - -(1) registerXXX/unRegisterXXX - -register与unRegister成对使用, registerXXX用于注册回调,其参数即为注册的回调函数,注册之后在其它普通方法中即可在C++层调用registerXXX注册的回调函数;unRegisterXXX用于注销回调,其参数即为需要注销的回调函数,注销之后将无法再在C++层调用注销的回调函数。如: - -``` -export class NodeISayHello -{ - ... - // register注册回调 - registerCallbackfunc(cb : (wid: number) => string); - // unRegister注销回调 - unRegisterCallbackfunc(cb : (wid: number) => string); - ... -} -``` - -其中注册/注销的回调方法为箭头函数 (wid: number) => string。注册回调之后,工具会生成回调方法CallbackfuncCallback,业务代码中用户自行定义回调时机进而通过回调接口调用回调,若回调被注销,则业务代码无法触发该回调。 - -(2) addXXX/removeXXX onXXX - -addXXX与removeXXX成对使用,addXXX用于注册回调,其参数为class对象, 将需要注册的回调函数放于class中,其写法为onXXX,class中可以有多个onXXX回调函数;removeXXX用于注销回调,其参数为class对象,用于注销addXXX注册的回调。如: - -``` -export class NodeISayHello -{ - ... - // 注册object回调 - addSayHelloListener(listener: NodeISayHelloListener); - // 注销object回调 - removeSayHelloListener(listener: NodeISayHelloListener); - ... -} -... -export class NodeISayHelloListener -{ // 定义回调 - onSayHelloStart(info: SayInfo); - onSayHelloEnd(info: SayInfo); -} -``` - -其中注册/注销的回调方法为onSayHelloStart(info: SayInfo); onSayHelloEnd(info: SayInfo); 注册回调之后,工具会生成两个回调接口供用户调用,业务代码中用户自行定义回调时机进而通过回调接口调用回调,若回调被注销,则业务代码无法触发回调。 - -2.自动配置业务代码用例使用的cfg.json - - [配置文件cfg.json用例](https://gitee.com/openharmony/napi_generator/blob/master/examples/cfg.json) - -3.自动配置业务代码使用的业务代码用例 - -业务代码用例如下: - -serviceCode/NodeISayHello.h - -[NodeISayHello.h](https://gitee.com/openharmony/napi_generator/blob/master/examples/serviceCode/NodeISayHello.h) - -serviceCode/NodeISayHello.cpp - -[NodeISayHello.cpp](https://gitee.com/openharmony/napi_generator/blob/master/examples/serviceCode/NodeISayHello.cpp) - -### 可执行程序使用方法 - -#### Linux - -1.将待转换的.d.ts文件、napi_generator-linux、依赖文件basic.d.ts、 配置文件cfg.json、业务代码文件夹serviceCode(其中serviceCode目录下放置业务代码的.h文件和.cpp文件)放在同级目录下。此处新建generatorCode文件夹,用于存放生成框架代码。整体目录文件如下: - - OpenHarmony@Ubuntu-64:~/service$ ls - napi_generator-linux @ohos.napitest.d.ts basic.d.ts generatorCode cfg.json serviceCode - -2.在终端中进入到之前可执行程序napi_generator-linux所在的目录,并运行napi_generator-linux,命令如下: - - OpenHarmony@Ubuntu-64:~/service$ ./napi_generator-linux -f @ohos.napitest.d.ts -o generatorCode -i false -n int -s cfg.json - -其中,参数详情如下: - - -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; - - -d, 根据指定路径转换该文件夹中所有.d.ts文件; - - -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; - - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; - - -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; - - -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 - - 备注1:-f与-d两个参数只选其中一个参数即可。 - - 备注2:若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件同一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 - -其中,cfg.json内容如下: - -``` -[ - { - "genPath": "/home/kaihong1/napi/myCommitNapiTest/generatorCode", - "includeName": "../serviceCode/NodeISayHello.h", - "cppName": "../serviceCode/NodeISayHello.cpp", - "interfaceName": "funcTest", - "serviceCode": "out = napitest::funcTest(v);" - "description": "includeName: 引入的业务代码.h文件相对路径, cppName: 引入的业务代码.cpp文件相对路径, interfaceName: ts文件中的使用接口名,业务代码就在该接口中调用;格式为:类名::方法名(如: TestClass::funcTest1),若无类名,则格式为:方法名(如: funcTest), serviceCode: 在接口中调用业务代码的调用语句。(该属性只做注释使用)" - } -] -``` - -cfg.json是一个数组,每一项配置对应一个方法的调用,需要对多少方法进行调用就配置多少项;其中 - -"genPath": 生成框架代码路径,用户的业务代码相对于该路径配置,如:"/home/kaihong1/napi/myCommitNapiTest/generatorCode" - -"includeName": 引入的业务代码.h文件相对路径, 如:"../serviceCode/NodeISayHello.h", - -"cppName": 引入的业务代码.cpp文件相对路径, 如:"../serviceCode/NodeISayHello.cpp", - -"interfaceName": ts文件中的使用接口名,业务代码就在该接口中调用;格式为:类名::方法名(如: TestClass::funcTest1),若无类名,则格式为:方法名(如: funcTest), - -"serviceCode": 在接口中调用业务代码的调用语句。此处调用的是实现该接口的业务代码, 如:"out = napitest::funcTest(v);", - -"description": 仅作为cfg.json文件中描述其它字段含义的属性,用户配置时,可以不用填写这个字段 - -3.运行成功后会在generatorCode目录下生成框架代码文件,如下所示: - - OpenHarmony@Ubuntu-64:~/linshi/napi_generator_8/examples/ts/generatorCode$ ls - binding.gyp BUILD.gn napi_gen.log napitest.cpp napitest.h napitest_middle.h napitest_middle.cpp test.sh tool_utility.cpp tool_utility.h - -#### Windows - -1.将待转换的.d.ts文件、napi_generator-win.exe、 配置文件cfg.json、依赖文件basic.d.ts、业务代码文件夹serviceCode(其中serviceCode目录下放置业务代码的.h文件和.cpp文件)放在同级目录下。此处新建generatorCode文件夹,用于存放生成框架代码。整体目录文件如下: - - E:\demo\napi>dir /B - @ohos.napitest.d.ts - basic.d.ts - napi_generator-win.exe - generatorCode - cfg.json - serviceCode - -2.在终端中进入到之前可执行程序napi_generator-win.exe所在的目录,并运行napi_generator-win.exe,命令如下: - - E:\demo\napi>napi_generator-win.exe -f @ohos.napitest.d.ts -o generatorCode -i false -n double -s cfg.json - -其中,参数详情如下: - - -f, 待转换的.d.ts文件,若同时转换多个文件,文件之间用“,”隔开; - - -d, 根据指定路径转换该文件夹中所有.d.ts文件; - - -i, 可选参数,默认false,待转换.d.ts文件中引用非basic.d.ts的ts文件时打开开关; - - -o, 可选参数,默认为当前目录,指定生成框架代码输出路径; - - -n, 可选参数,默认为uint32_t,指定生成框架代码中number类型全部为指定类型; - - -s, 可选参数,默认为不配置业务代码,指定生成框架代码的业务配置文件,用于粘合工具代码和业务代码的配置。 - - 备注1:-f与-d两个参数只选其中一个参数即可。 - - 备注2:若.d.ts文件中声明了basic.d.ts文件,将basic.d.ts文件放置在待转换.d.ts文件同一级目录;若除此之外还声明其它.d.ts文件,将此类文件放置在待转换.d.ts文件同级目录。 - -其中,cfg.json内容如下: - -``` -[ - { - "genPath": "E:\\napi_aboutTest\\testcase_napi_intellijPlugin\\generatorCode", - "includeName": "../serviceCode/NodeISayHello.h", - "cppName": "../serviceCode/NodeISayHello.cpp", - "interfaceName": "funcTest", - "serviceCode": "out = napitest::funcTest(v);" - "description": "includeName: 引入的业务代码.h文件相对路径, cppName: 引入的业务代码.cpp文件相对路径, interfaceName: ts文件中的使用接口名,业务代码就在该接口中调用;格式为:类名::方法名(如: TestClass::funcTest1),若无类名,则格式为:方法名(如: funcTest), serviceCode: 在接口中调用业务代码的调用语句。(该属性只做注释使用)" - } -] -``` - -cfg.json是一个数组,每一项配置对应一个方法的调用,需要对多少方法进行调用就配置多少项;其中 - -"genPath": 生成框架代码路径,用户的业务代码相对于该路径配置,如:"E:\\napi_aboutTest\\testcase_napi_intellijPlugin\\generatorCode" - -"includeName": 引入的业务代码.h文件相对路径, 如:"../serviceCode/NodeISayHello.h", - -"cppName": 引入的业务代码.cpp文件相对路径, 如:"../serviceCode/NodeISayHello.cpp", - -"interfaceName": ts文件中的使用接口名,业务代码就在该接口中调用;格式为:类名::方法名(如: TestClass::funcTest1),若无类名,则格式为:方法名(如: funcTest), - -"serviceCode": 在接口中调用业务代码的调用语句。此处调用的是实现该接口的业务代码, 如:"out = napitest::funcTest(v);", - -"description": 仅作为cfg.json文件中描述其它字段含义的属性,用户配置时,可以不用填写这个字段 - -3.运行成功后会在generatorCode目录下生成框架代码文件,如下所示: - - E:\demo\napi\generatorCode>dir /B - binding.gyp - BUILD.gn - napitest.cpp - napitest.h - napitest_middle.h - napitest_middle.cpp - napi_gen.log - test.sh - tool_utility.cpp - tool_utility.h - -#### Mac - -方法步骤参考windows、Linux的使用方法。 - -### 不配置cfg.json文件生成框架代码 - -若用户想手动配置业务代码,可不配置cfg.json文件生成框架代码之后手动增加业务代码,不配置cfg.json文件生成框架代码说明如下: - -[不配置cfg.json生成框架代码说明](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ADD_SERVICECODE_INSTRUCTION.md) - -### VS Code插件使用方法 - -具体的插件使用步骤,可以左键单击以下链接了解: - -[VS插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_vs_plugin/docs/napi/INSTRUCTION_ZH.md) - -### DevEco Studio上使用的IntelliJ插件使用方法 - -具体的插件使用步骤,可以左键单击以下链接了解: - -[DevEco Studio上使用的IntelliJ插件使用说明](https://gitee.com/openharmony/napi_generator/blob/master/napi_IntelliJ_plugin/docs/napi/INSTRUCTION_ZH.md) - -## 集成测试 -NAPI框架代码生成后,系统框架开发者进行二次开发后,即可集成到OpenHarmony编译系统,生成对应的库文件,供应用开发者调用接口。工具集成测试的具体操作步骤可以左键单击以下链接了解: - - [工具集成测试](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/INTEGRATION_TESTING_ZH.md) - diff --git a/docs/guide/INTEGRATION_TESTING_ZH.md b/docs/guide/INTEGRATION_TESTING_ZH.md deleted file mode 100644 index 30ceca01..00000000 --- a/docs/guide/INTEGRATION_TESTING_ZH.md +++ /dev/null @@ -1,274 +0,0 @@ -# NAPI框架生成工具集成测试 - -## 简介 - 本文主要介绍如何将NAPI框架生成代码集成到OpenHarmony系统,进而进行集成测试。 - -## 准备 - - 1.硬件:rk3568开发套件。 - - 2.系统镜像: - - 系统镜像的具体生成方法,可以左键单击以下链接了解: - - [生成代码集成到OpenHarmony](https://gitee.com/openharmony/napi_generator/blob/master/docs/guide/ENSEMBLE_METHOD_ZH.md) - - 3.应用hap包:hap包及源码路径如下: - -``` -napi_generator/examples/app -``` - - hap包的具体生成方法,可参考OpenHarmony/docs/zh-cn/application-dev文档中使用ArkTS语言开发(Stage模型)。 -### 修改点1:扩展SDK接口 -1. 查看SDK目录:打开DevEco Studio ,点击 Tools -> SDK Manager -> SDK - - ![](../../figures/DevEco_SDK_path.png) - -2. 将@ohos.napitest.d.ts文件拷贝到应用所使用的sdk目录下 的ets\api - - ![](../../figures/DevEco_add_interface.png) - -### 修改点2:增加新接口调用 -其中修改index.ets文件内容如下: - -[Index.ets](https://gitee.com/openharmony/napi_generator/blob/master/examples/Index.ets) - -关键代码说明: - -1.定义回调: - -1.1 定义object回调 - -``` -class NodeISayHelloListenerImpl { - onSayHelloStart(info: object) { - console.log('napiTestDemo ----onSayHelloStart', info); - AppStorage.SetOrCreate("textInfoStart", JSON.stringify(info)) - } - onSayHelloEnd(info: object) { - console.log('napiTestDemo ----onSayHelloEnd.', info); - AppStorage.SetOrCreate("textInfoEnd", JSON.stringify(info)) - } -} -let listener: NodeISayHelloListenerImpl = new NodeISayHelloListenerImpl() -``` - -1.2 定义register注册的回调 - -``` -function onCallbackfunnm(wid: number) { - AppStorage.SetOrCreate("callBackNum", JSON.stringify(wid)) - console.info("wid = " + wid) - return "ocCallbackfuncnm"; -} -``` - -2.注册回调: - -2.1 addXXX注册object回调 - -``` -ns.addSayHelloListener(listener); -``` - -2.2 registerXXX注册回调 - -``` -ns.registerCallbackfunc(onCallbackfunnm); -``` - -3.调用回调: - -3.1 调用sayHello普通函数,该函数业务实现会调用注册的object回调 - -``` -ns.sayHello("js1", "native1", napitest.SayType.kInitiative); -``` - -调用成功后,打印传入的参数 - -``` -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:37] NAPITEST_LOGI sayHello from = js1 -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:38] NAPITEST_LOGI sayHello to = native1 -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:39] NAPITEST_LOGI sayHello sayType = 0 -``` - -js层打印回调数据 - -``` -A03d00/JSAPP: napiTestDemo ----onSayHelloStart {"from":"js1","fromId":992,"to":"native1","toId":1014,"content":"hello1","saidTime":"123456789","isEnd":false} -... -A03d00/JSAPP: napiTestDemo ----onSayHelloEnd. {"from":"native","fromId":101,"to":"js","toId":99,"content":"hello","saidTime":"987654321","isEnd":true} -``` - -3.2 调用sayHi普通函数,该函数业务实现会调用register注册的object回调 - -``` -ns.sayHi("js3", "native3", napitest.SayType.kResponse); -``` - -调用成功后,打印传入的参数 - -``` -I C02e00/NAPITESTNAPILayer: sayHi:81 NAPITEST_LOGI sayHi from = js3 -I C02e00/NAPITESTNAPILayer: sayHi:82 NAPITEST_LOGI sayHi to = native3 -I C02e00/NAPITESTNAPILayer: sayHi:83 NAPITEST_LOGI sayHi sayType = 1 -``` - -js层打印回到数据 - -``` -I A03d00/JSAPP: napiTestDemo ----onCallbackfunnm wid = 50 -``` - -4.注销回调: - -4.1 removeXXX注销object回调 - -``` -ns.removeSayHelloListener(listener); -``` - -注销回调后再次调用sayHello方法,js层将无法再打印出回调数据 - -``` -ns.sayHello("js2", "native2", napitest.SayType.kInitiative); -``` - -4.2 unRegisterXXX注销回调 - -``` -ns.unRegisterCallbackfunc(onCallbackfunnm); -``` - -注销回调后再次调用sayHi方法,js层将无法再打印出回调数据 - -``` -ns.sayHi("js4", "native4", napitest.SayType.kResponse); -``` - -5.调用Promise回调 - -``` - await ns.sayHelloWithResponse("response from", "response to", napitest.SayType.kResponse).then((ret: object) => { - this.promiseRes = JSON.stringify(ret); - console.info("napiTestDemo ----sayHelloWithResponse ret = " + JSON.stringify(ret)); - }); -``` - -调用成功后,打印传入的参数 - -``` -I C02e00/NAPITESTNAPILayer: sayHelloWithResponse:107 NAPITEST_LOGI sayHelloWithResponse from = response from -I C02e00/NAPITESTNAPILayer: sayHelloWithResponse:108 NAPITEST_LOGI sayHelloWithResponse to = response to -I C02e00/NAPITESTNAPILayer: sayHelloWithResponse:109 NAPITEST_LOGI sayHelloWithResponse sayType = 1 -``` - -js层打印promise回调数据 - -``` -I A03d00/JSAPP: napiTestDemo ----sayHelloWithResponse ret = {"result":0,"errMsg":"","response":""} -``` - -6.调用普通方法funcTest - -``` -this.returnVal = napitest.funcTest(false); -console.info("napiTestDemo ----funcTest returnVal = " + this.returnVal) -``` - -调用成功后,在js层打印返回值 - -``` -I A03d00/JSAPP: napiTestDemo ----funcTest returnVal = "ret is false" -``` - -7.Text打印数据说明 - - -``` -// 调用sayHelloWithResponse后保存promise回调数据 -Text('promise回调: promiseResult = ' + this.promiseRes).margin({ top: 10 }) -// 调用sayHello方法后保留addXXX注册的回调方法数据 -Text('sayHelloStart回调: info = ' + this.textInfoStart).margin({ top: 10 }) -Text('sayHelloEnd回调: info = ' + this.textInfoEnd).margin({ top: 10 }) -// 调用sayHi方法后保留registerXXX注册的回调方法数据 -Text('register注册的回调: wid = ' + this.callBackNum).margin({ top: 10 }) -// 调用fucnTest方法后保存返回值 -Text('普通方法funcTest返回值: returnVal = ' + this.returnVal).margin({ top: 10 }) -``` - -## 使用说明 - -步骤一:安装镜像环境:将out/rk3568/packages/phone目录下的images镜像文件下载并烧录到开发板上。 - - OpenHarmony@Ubuntu-64:~/OpenHarmony/out/rk3568/packages/phone/images$ ll - total 767452 - drwxrwxrwx 2 root root 4096 Nov 21 05:32 ./ - drwxrwxrwx 15 root root 4096 Nov 21 05:32 ../ - -rwxrwxrwx 1 root root 67108864 Nov 21 05:04 boot_linux.img* - -rw-r--r-- 1 root root 52428800 Nov 21 05:32 chip_prod.img - -rwxrwxrwx 1 root root 8569 Nov 21 05:04 config.cfg* - -rw-r--r-- 1 root root 12582912 Nov 21 05:32 eng_system.img - -rwxrwxrwx 1 root root 455104 Nov 21 05:04 MiniLoaderAll.bin* - -rwxrwxrwx 1 root root 756 Nov 21 05:04 parameter.txt* - -rw-rw-r-- 1 root root 2507625 Nov 21 05:32 ramdisk.img - -rwxrwxrwx 1 root root 5639680 Nov 21 05:04 resource.img* - -rw-r--r-- 1 root root 52428800 Nov 21 05:32 sys_prod.img - -rw-r--r-- 1 root root 1610608640 Nov 21 05:32 system.img - -rwxrwxrwx 1 root root 4194304 Nov 21 05:04 uboot.img* - -rw-rw-r-- 1 root root 15806303 Nov 21 05:32 updater.img - -rw-r--r-- 1 root root 1468006400 Nov 21 05:32 userdata.img - -rw-r--r-- 1 root root 268431360 Nov 21 05:32 vendor.img - -步骤二:安装hap包。 - - Build Haps通过后,通过Run按钮将hap包安装到板子上。 - - 执行完成后,设备中会出现安装的APP。 - -步骤三:打印日志并验证结果。 - - hap包安装成功后,进入hdc shell - - 首先执行以下命令关闭hilog隐私权限 - -``` -hilog -p off -``` - - 输入命令实时打印日志并输出至windows中。 - - .\hdc.exe hilog > log.txt - - 然后单击设备中安装的APP,进入APP后单击测试按钮,执行完成后会在hdc安装目录下出现log.txt文件。 - -## 查看结果 - - log.txt中包含"NAPITEST_LOGI..."相关日志即为接口调用成功,如: - -``` -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:37] NAPITEST_LOGI sayHello from = js1 -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:38] NAPITEST_LOGI sayHello to = native1 -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:39] NAPITEST_LOGI sayHello sayType = 0 -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:64] NAPITEST_LOGI NodeISayHelloListener_onSayHelloStartCallback begin -I C02e00/NAPITESTNAPILayer: [NodeISayHello.cpp:66] NAPITEST_LOGI NodeISayHelloListener_onSayHelloStartCallback end -... -``` - -点击“注册object回调后SayHello调用回调”按钮,sayHelloStart回调info和sayHelloEnd回调info会显示出C++传到js层的回调数据; - -点击“注销object回调后SayHello调用回调”按钮,sayHelloStart回调info和sayHelloEnd回调info会显示出数据为空,即该回调已注销,C++无法调用回调,显示的为应用赋的空值; - -点击“Promise 回调”按钮,Promise回调的errMsg, result, response会出现C++传到js层的回调数据; - -点击“register回调后SayHi调用回调”按钮,register注册的回调会显示出wid = 50, wid值为C++传到js的回调数据; - -点击“unRegister回调后SayHi调用回调”按钮,register注册的回调会显示出wid 为空,即该回调已注销,C++无法调用回调,显示的为应用赋的空值; - -点击”调用funcTest方法“按钮,普通方法funcTest返回值显示出 returnVal = ret is false。 - -## 相关仓 - -暂无 diff --git a/docs/guide/ROADMAP_ZH.md b/docs/guide/ROADMAP_ZH.md deleted file mode 100644 index ad7fcddc..00000000 --- a/docs/guide/ROADMAP_ZH.md +++ /dev/null @@ -1,44 +0,0 @@ -# NAPI框架代码生成工具 - -## 版本规划 - -2024.03.30提供1.4.1版本 基本完善工具C++支持能力,具体特性见表1。 - -**表 1** 2024.03.30待支持特性 - - - - - - - - - - - - - - - - - - - - - -

类别

-

待开发特性

-

变量/返回值

-
  • 支持ts接口文件中namespace域的any类型之复合类型变量转换为对应C++类型变量
  • 支持ts接口文件中namespace域的多中类型合并成新类型之复合类型的变量转换为对应C++类型变量
-

函数

-
  • 支持箭头函数的参数是回调函数
  • 支持on/off第二个参数为object
  • 支持class中有参构造中有枚举类型
  • 箭头回调支持异步调用
  • on注册回调的箭头函数支持携带js返回值给C++
  • 支持js业务代码回调接口中的回调js函数
  • class2声明在class1之后时,支持class1中的有参构造的参数有class2
-

文件

-
  • 优化VSCode插件用户界面
  • 分离生成的工具代码普通方法和回调方法,防止嵌套使用头文件
-

可维护性

-
  • 增加debug信息
-
- - -## 相关链接 - -无 diff --git a/docs/guide/SOLUTION.md b/docs/guide/SOLUTION.md deleted file mode 100644 index 094bad65..00000000 --- a/docs/guide/SOLUTION.md +++ /dev/null @@ -1,72 +0,0 @@ -# 当前已知不支持推荐方案 - -1.注册的object回调不支持箭头函数写法, 注册回调格式为addXXX,注销回调格式为removeXXX,且回调方法命名格式为onXXX, 例如: - -``` -export interface InterfaceB { - byClass: (listener: InterfaceA) => void; -} -export interface InterfaceA { - callFunction: (res: number) => void; -} -``` - -修改为: - -``` -export interface InterfaceB { - // object注册回调, 关键字:add - addByClass(listener: InterfaceA); - // object注销回调, 关键字:remove - removeByClass(listener: InterfaceA); -} -export interface InterfaceA { - onCallFunction(res: number): void; -} -``` - -2.注册回调只能支持单个参数, 且注册单个参数的注册回调方法命名格式为registerXXX, 例如: - -``` -export interface TestA { - bGyClass: (a: number, callback: (result: number) => void) => number; -} -``` - -修改为: - -``` -export interface TestA { - // 原bGyClass的参数 callback: (res: number) => void 改为registerXXX/unRegisterXXX形式 - // register形式注册回调, 关键字:register - registerTestACallback(callback: (dd: number) => void); - // unRegister形式注销回调, 关键字:unRegister - unRegisterTestACallback(callback: (dd: number) => void); - // gByClass用于调用回调 - bGyClass: (a: number) => number; -} -``` - -3.生成报错:The current version does not support generating parameter。 - -``` -genError:at paramGenerate [C:\snapshot\napi_generator\src\gen\generate\param_generate.js(899:17)] The current version does not support generating parameter [elementName] with type [ElementName] -``` - -ts文件为: - -``` -import { ElementName } from './bundleManager/ElementName'; - -declare namespace cardEmulation { - export class HceService { - start(elementName: ElementName, aidList: string[]): void; - stop(elementName: ElementName): void; - } -} -export default cardEmulation; -``` - -修改: - -文件中引用了 ElementName 类型, 需要把被引用的文件( import { ElementName } from './bundleManager/ElementName'; )放到转换路径下工具才可进行转换 \ No newline at end of file -- Gitee From 6784d1ba0a080db6704f14accc66612f5626e41a Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 14:23:17 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: gou-jingjing --- src/.eslintrc.json | 25 ---------- src/CHANGELOG.md | 9 ---- src/README.md | 5 -- src/config.html | 84 --------------------------------- src/jsconfig.json | 13 ----- src/package.json | 38 --------------- src/vsc-extension-quickstart.md | 39 --------------- 7 files changed, 213 deletions(-) delete mode 100644 src/.eslintrc.json delete mode 100644 src/CHANGELOG.md delete mode 100644 src/README.md delete mode 100644 src/config.html delete mode 100644 src/jsconfig.json delete mode 100644 src/package.json delete mode 100644 src/vsc-extension-quickstart.md diff --git a/src/.eslintrc.json b/src/.eslintrc.json deleted file mode 100644 index d25565bb..00000000 --- a/src/.eslintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "env": { - "browser": false, - "commonjs": true, - "es6": true, - "node": true, - "mocha": true - }, - "parserOptions": { - "ecmaVersion": 2018, - "ecmaFeatures": { - "jsx": true - }, - "sourceType": "module" - }, - "rules": { - "no-const-assign": "warn", - "no-this-before-super": "warn", - "no-undef": "warn", - "no-unreachable": "warn", - "no-unused-vars": "warn", - "constructor-super": "warn", - "valid-typeof": "warn" - } -} diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md deleted file mode 100644 index 5b631eac..00000000 --- a/src/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Change Log - -All notable changes to the "gnapi" extension will be documented in this file. - -Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. - -## [Unreleased] - -- Initial release \ No newline at end of file diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 5a79211a..00000000 --- a/src/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# gnapi README - -1,右键单击@ohos.xxxx.d.ts文件 - -2,单击菜单[.d.ts生成c++] diff --git a/src/config.html b/src/config.html deleted file mode 100644 index 4f00a3a1..00000000 --- a/src/config.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - Napi - - - - - -
- 选择方式: - .d.ts文件(多个文件之间用,号分割) - 文件夹 -
-
-
- 选择接口文件: -
- -
- 生成框架路径: -
- -
- 编译脚本路径: -
-
- - - - - -
- - - \ No newline at end of file diff --git a/src/jsconfig.json b/src/jsconfig.json deleted file mode 100644 index 53b981c5..00000000 --- a/src/jsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "checkJs": true, /* Typecheck .js files. */ - "lib": [ - "ES2020" - ] - }, - "exclude": [ - "node_modules" - ] -} diff --git a/src/package.json b/src/package.json deleted file mode 100644 index 5ab858b6..00000000 --- a/src/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "gnapi", - "displayName": "gnapi", - "description": "test", - "version": "0.0.1", - "engines": { - "vscode": "^1.62.0" - }, - "categories": [ - "Other" - ], - "activationEvents": [ - "*" - ], - "scripts": { - "lint": "eslint .", - "pretest": "npm run lint", - "test": "node ./test/runTest.js" - }, - "devDependencies": { - "@types/glob": "^7.1.4", - "@types/mocha": "^9.0.0", - "@types/node": "14.x", - "@types/vscode": "^1.62.0", - "@vscode/test-electron": "^1.6.2", - "eslint": "^8.1.0", - "glob": "^7.1.7", - "mocha": "^9.1.3", - "webpack": "^5.64.4", - "webpack-cli": "^4.9.1" - }, - "dependencies": { - "node-gyp": "^9.0.0", - "stdio": "^2.1.1", - "typescript": "^4.9.4", - "vsce": "^2.6.7" - } -} diff --git a/src/vsc-extension-quickstart.md b/src/vsc-extension-quickstart.md deleted file mode 100644 index e6da2a5c..00000000 --- a/src/vsc-extension-quickstart.md +++ /dev/null @@ -1,39 +0,0 @@ -# Welcome to your VS Code Extension - -## What's in the folder - -* This folder contains all of the files necessary for your extension. -* `package.json` - this is the manifest file in which you declare your extension and command. - * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. -* `extension.js` - this is the main file where you will provide the implementation of your command. - * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. - * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. - -## Get up and running straight away - -* Press `F5` to open a new window with your extension loaded. -* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. -* Set breakpoints in your code inside `extension.js` to debug your extension. -* Find output from your extension in the debug console. - -## Make changes - -* You can relaunch the extension from the debug toolbar after changing code in `extension.js`. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - -## Explore the API - -* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. - -## Run tests - -* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. -* Press `F5` to run the tests in a new window with your extension loaded. -* See the output of the test result in the debug console. -* Make changes to `src/test/suite/extension.test.js` or create new test files inside the `test/suite` folder. - * The provided test runner will only consider files matching the name pattern `**.test.ts`. - * You can create folders inside the `test` folder to structure your tests any way you want. -## Go further - - * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. - * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). -- Gitee From aa6fbaacc57365240db12b25f655bd7b0b301de5 Mon Sep 17 00:00:00 2001 From: gou-jingjing Date: Fri, 12 Jul 2024 14:54:59 +0800 Subject: [PATCH 12/12] fix codecheck Signed-off-by: gou-jingjing --- docs/log/release-notes.md | 15 --------------- src/cli/cmake2gn/cmake2gn_README_ZH.md | 10 ++++++++-- .../docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md | 2 +- src/cli/dts2cpp/dts2cpp_README.md | 8 ++++---- src/cli/h2dts/h2dts_README_ZH.md | 6 +++--- src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md | 2 +- src/cli/h2sa/h2sa_README_ZH.md | 4 ++-- src/tool/api/scan_README_ZH.md | 2 +- 8 files changed, 20 insertions(+), 29 deletions(-) diff --git a/docs/log/release-notes.md b/docs/log/release-notes.md index eb8a2e41..9682698e 100644 --- a/docs/log/release-notes.md +++ b/docs/log/release-notes.md @@ -20,18 +20,10 @@ 暂无 -## h2ets - -暂无 - ## scan(API扫描工具) 暂无 -## hdf(HCS可视化工具) - -暂无 - # roadmap ## dts2cpp(NAPI框架代码生成工具) @@ -54,14 +46,7 @@ 暂无 -## h2ets - -暂无 - ## scan(API扫描工具) 暂无 -## hdf(HCS可视化工具) - -暂无 \ No newline at end of file diff --git a/src/cli/cmake2gn/cmake2gn_README_ZH.md b/src/cli/cmake2gn/cmake2gn_README_ZH.md index da4496c3..02d8d091 100644 --- a/src/cli/cmake2gn/cmake2gn_README_ZH.md +++ b/src/cli/cmake2gn/cmake2gn_README_ZH.md @@ -5,11 +5,11 @@ cmake2gn工具,即GN脚本转换工具,它可以根据三方库的CMakeLists.txt文件,编译转换生成BUILD.gn脚本文件。当前OpenHarmony源码只支持BUILD.gn文件编译,开发者无法移植CMakeLists.txt编译方式的三方库到OpenHarmony中。此时,开发者可使用GN脚本转换工具,根据CMakeLists.txt文件生成BUILD.gn脚本文件,降低移植难度,提高开发效率。目前工具支持可执行文件、VS Code插件两种入口。 ├── napi_generator # 工具集 - │ ├── ... # 其他文件 + │ ├── ... # 其它文件 │ ├── src │ │ ├── ... │ │ ├── cli - │ │ | ├── ... # 其他工具 + │ │ | ├── ... # 其它工具 │ │ | ├── cmake2gn │ │ | | ├── src │ │ | | | ├── main.js # 工具源码入口 @@ -260,6 +260,12 @@ group("all_targets") { ``` +### 集成 + +具体的将三方库集成到OpenHarmony的步骤,可以左键单击以下链接了解: + +[将三方库集成到OpenHarmony的方法](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/cmake2gn/docs/usage/ENSEMBLE_METHOD_ZH.md) + ## 工具开发说明 ### 对象 diff --git a/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md b/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md index 9c676493..5a5c6b32 100644 --- a/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md +++ b/src/cli/dts2cpp/docs/usage/dts2cpp_ENSEMBLE_METHOD_ZH.md @@ -2,7 +2,7 @@ ## 场景说明 -为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 +为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,使其生成动态库,供OpenHarmony应用层调用。 本文介绍如何将工具生成的源码利用OpenHarmony编译系统生成动态库供应用层调用,主要是有以下两种方式,分别为增加ohos.build文件方式和增加bundle.json文件方式。 ## 4.1版本 diff --git a/src/cli/dts2cpp/dts2cpp_README.md b/src/cli/dts2cpp/dts2cpp_README.md index 5dc1f3bf..1f5e5d52 100644 --- a/src/cli/dts2cpp/dts2cpp_README.md +++ b/src/cli/dts2cpp/dts2cpp_README.md @@ -1,16 +1,16 @@ # dts2cpp工具 ## 简介 -dts2cpp工具,即NAPI框架生成工具,它可以根据用户指定路径下的ts(typescript)接口文件一键生成NAPI框架代码、业务代码框架、GN文件等。在开发JS应用与NAPI间接口时,底层框架开发者无需关注Nodejs语法、C++与JS之间的数据类型转换等上层应用转换逻辑,只关注底层业务逻辑即可,专业的人做专业的事,从而可以大大提高开发效率。目前工具支持可执行文件、VS Code插件、DevEco Studio上使用的IntelliJ插件三种入口。 +dts2cpp工具,即NAPI框架生成工具,它可以根据用户指定路径下的ts(typescript)接口文件一键生成NAPI框架代码、业务代码框架、GN文件等。在开发JS应用与NAPI间接口时,底层框架开发者无需关注js语法、C++与JS之间的数据类型转换等上层应用转换逻辑,只关注底层业务逻辑即可,专业的人做专业的事,从而可以大大提高开发效率。目前工具支持可执行文件、VS Code插件、DevEco Studio上使用的IntelliJ插件三种入口。 ## 目录 ├── napi_generator # 工具集 - │ ├── ... # 其他文件 + │ ├── ... # 其它文件 │ ├── src │ │ ├── ... │ │ ├── cli - │ │ | ├── ... # 其他工具 + │ │ | ├── ... # 其它工具 │ │ | ├── dts2cpp │ │ | | ├── src/gen # napi工具源码 │ │ | | | ├── analyze # 解析器 @@ -83,7 +83,7 @@ export default napitest; ### 代码集成 -为了实现工具生成的接口被其他子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。 +为了实现工具生成的接口被其它子系统或者应用调用,需将生成的代码编译集成到OpenHarmony系统中,编译生成动态库。 把工具的生成代码集成到OpenHarmony的具体操作步骤,可以左键单击以下链接了解: diff --git a/src/cli/h2dts/h2dts_README_ZH.md b/src/cli/h2dts/h2dts_README_ZH.md index 4656ba75..7762c3ce 100644 --- a/src/cli/h2dts/h2dts_README_ZH.md +++ b/src/cli/h2dts/h2dts_README_ZH.md @@ -4,12 +4,12 @@ h2dts工具,即Ts接口生成工具,它可以根据定义在c++头文件中的接口,生成type-script语言的ts接口文件。若某个服务实现方式为c++,且供应用层访问的接口已在.h文件中定义,此时,NAPI接口开发者使用此工具可一键生成对应的ts文件,进而将生成的ts文件作为NAPI框架生成代码工具的输入,生成NAPI框架代码。串行使用ts接口生成工具、NAPI框架代码生成工具,形成工具链,达到降低NAPI接口开发难度,提高开发效率。目前工具支持可执行文件、IntelliJ插件两种入口。 ├── napi_generator # 工具集 - │ ├── ... # 其他文件 + │ ├── ... # 其它文件 │ ├── src │ │ ├── ... │ │ ├── cli - │ │ | ├── ... # 其他工具 - │ │ | ├── h2dts/src # 工具源码 + │ │ | ├── ... # 其它工具 + │ │ | ├── h2dts/src # 工具源码 │ │ │ │ ├── tsGen # Ts框架工具源码 │ │ | │ │ ├── header_parser.py # 解析C++头文件并生成表示类的数据结构 │ │ | │ │ |── tsMain.js # Ts框架工具源码入口 diff --git a/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md b/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md index 4be3afb7..c11a89ce 100644 --- a/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md +++ b/src/cli/h2sa/docs/usage/h2sa_INSTRUCTION_ZH.md @@ -19,7 +19,7 @@ h2sa工具,即SERVICE框架生成工具,该工具支持命令行和VS Code [下载链接3](http://ftp.kaihongdigi.com:5000/sharing/kBG1c7CvT) -获取nodejs脚本可执行程序service-gen-win.exe、service-gen-linux,用户可根据以下步骤生成nodejs脚本可执行程序: +获取命令行可执行程序service-gen-win.exe、service-gen-linux,用户可根据以下步骤生成命令行可执行程序: [工具开发说明](https://gitee.com/openharmony/napi_generator/tree/master/src/cli/h2sa/docs/guide/DEVELOP_ZH.md) diff --git a/src/cli/h2sa/h2sa_README_ZH.md b/src/cli/h2sa/h2sa_README_ZH.md index 519f3bad..3187be99 100644 --- a/src/cli/h2sa/h2sa_README_ZH.md +++ b/src/cli/h2sa/h2sa_README_ZH.md @@ -5,7 +5,7 @@ h2sa工具,即SERVICE框架生成工具,当开发者为OpenHarmony系统框架开发某些功能时,有时需要将这个功能包装成一个独立的服务进程运行在系统中,为了其它应用进程能够调用此服务,开发人员需要基于系统IPC通信框架编写一套远程接口调用实现。实现Service远程调用接口需要开发人员熟悉IPC通信框架,了解proxy/stub的继承与实现方式,掌握C++类型转为MessageParcel数据包的各种API方法,有一定的学习成本。而Service代码生成工具能够帮助使用者生成框架代码,提升开发效率。用户只需提供一个定义远程方法的.h头文件,工具会自动生成整个Service框架的代码,包含Ability注册、proxy/stub类实现、MessageParcel数据包构造、Service子系统编译及开机自启动相关配置文件。目前工具支持命令行和VS Code插件两种入口。 ├── napi_generator # NAPI框架代码生成工具 - │ ├── ... # 其他文档 + │ ├── ... # 其它文档 │ ├── src │ │ ├── ... │ │ ├── cli # 脚手架源码 @@ -14,7 +14,7 @@ h2sa工具,即SERVICE框架生成工具,当开发者为OpenHarmony系统框 │ │ | | | ├── tools # 公共模块代码,包括消息体校验、文件读写、正则表达式转换等 │ │ | | | ├── gen # 生成器 │ │ | | ├── package.json # 配置文件 - │ │ | ├── ... # 其他工具 + │ │ | ├── ... # 其它工具 ## 约束 系统:建议Ubuntu 20.04或者Windows 10 diff --git a/src/tool/api/scan_README_ZH.md b/src/tool/api/scan_README_ZH.md index db69a528..eac9153d 100644 --- a/src/tool/api/scan_README_ZH.md +++ b/src/tool/api/scan_README_ZH.md @@ -5,7 +5,7 @@ scan工具即API扫描工具,它可以扫描三方库中包含OpenHarmony源码不包含的接口,并输出result.xlsx文档。开发者移植三方库到OpenHarmony源码中,若三方库中包含一些OpenHarmony中不存在的接口,便会增加移植难度。此时可使用API扫描工具,提前预知风险接口,降低移植难度,提高开发效率。目前工具支持命令行和VS Code插件两种入口。 ├── napi_generator - │ ├── ... # 其他文档 + │ ├── ... # 其它文档 │ ├── src/tool │ │ ├── api # api扫描工具 │ │ | ├── api_scan_vs_plugin # VS Code插件源码 -- Gitee