鸿蒙工程目录结构

工程结构

shell 复制代码
.
├── build
├── build-profile.json5
├── hvigorfile.ts
├── libs
│   └── armeabi-v7a
├── oh-package.json5
├── oh_modules
│   └── @types
│       └── libentry.so -> ../../src/main/cpp/types/libentry
└── src
    ├── main
    │   ├── cpp
    │   │   ├── CMakeLists.txt
    │   │   ├── hello.cpp
    │   │   └── types
    │   │       └── libentry
    │   │           ├── index.d.ts
    │   │           └── oh-package.json5
    │   ├── ets
    │   │   ├── entryability
    │   │   │   └── EntryAbility.ts
    │   │   └── pages
    │   │       └── Index.ets
    │   ├── module.json5
    │   └── resources
    │       ├── base
    │       │   ├── element
    │       │   │   ├── color.json
    │       │   │   └── string.json
    │       │   ├── media
    │       │   │   └── icon.png
    │       │   └── profile
    │       │       └── main_pages.json
    │       ├── en_US
    │       │   └── element
    │       │       └── string.json
    │       ├── rawfile
    │       └── zh_CN
    │           └── element
    │               └── string.json
  • build目录:用于存放构建相关的文件。
  • build-profile.json5:构建配置文件。
  • hvigorfile.ts:用于进行代码检查和格式化的配置文件。
  • libs目录:用于存放本地库文件。
  • oh-package.json5:应用程序的配置文件。
  • oh_modules目录:用于存放应用程序的模块文件。
  • src目录:用于存放应用程序的源代码和资源文件。
    • main目录:主要的应用程序代码和资源文件。
      • cpp目录:C++代码文件。在这个目录下,你通常会编写C++代码来实现一些与底层操作系统或硬件相关的功能
        • CMakeLists.txt:CMake构建脚本。该文件用于配置和管理C++代码的构建过程,包括定义编译选项、链接库等。
        • hello.cpp:示例C++源代码文件。这是一个简单的示例文件,可以包含应用程序的主要逻辑和功能实现。
        • types/libentry/index.d.ts:TypeScript声明文件。该文件描述了entry.cpp文件中导出函数的类型信息,以便在TypeScript中进行类型安全的调用。
      • ets目录:使用 ETS(Enhanced TypeScript)进行开发的文件。
      • module.json5:模块配置文件。
      • resources目录:
        • base/element/color.json:颜色配置文件。该文件用于定义应用程序中使用的颜色,可以通过名称引用这些颜色。
        • base/element/string.json:字符串配置文件。该文件用于定义应用程序中使用的文本字符串,可以通过名称引用这些字符串,从而实现多语言支持。
        • base/media/icon.png:图标文件。应用程序的图标文件,在应用程序启动器等位置显示。
        • base/profile/main_pages.json:主页面配置文件。该文件用于定义应用程序的主页面,包括页面名称、图标等信息。
        • en_US/element/string.json:英文字符串配置文件。如果应用程序支持多种语言,则需要为每种语言都提供一个对应的字符串配置文件,以方便进行多语言支持。
        • rawfile目录:原始文件目录。该目录用于存放一些不需要经过编译的文件,例如一些音频或视频文件等。
        • zh_CN/element/string.json:中文字符串配置文件。与英文字符串配置文件类似,该文件用于定义中文版本的字符串,以实现多语言支持。

C++部分

熟悉JNI的应该可以看出C接口的导出方式跟JNI类似,env应该是做了一层封装。

CC 复制代码
#include "napi/native_api.h"

static napi_value Add(napi_env env, napi_callback_info info)
{
    size_t requireArgc = 2;
    size_t argc = 2;
    napi_value args[2] = {nullptr};

    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);

    napi_valuetype valuetype0;
    napi_typeof(env, args[0], &valuetype0);

    napi_valuetype valuetype1;
    napi_typeof(env, args[1], &valuetype1);

    double value0;
    napi_get_value_double(env, args[0], &value0);

    double value1;
    napi_get_value_double(env, args[1], &value1);

    napi_value sum;
    napi_create_double(env, value0 + value1, &sum);

    return sum;

}

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END

static napi_module demoModule = {
    .nm_version =1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "entry",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};

extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
    napi_module_register(&demoModule);
}
相关推荐
拖孩5 分钟前
微信群太多,管理麻烦?那试试接入AI助手吧~
前端·后端·微信
乌兰麦朵22 分钟前
Vue吹的颅内高潮,全靠选择性失明和 .value 的PUA!
前端·vue.js
Code季风22 分钟前
Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
前端·微服务·架构·go·gin
蓝倾23 分钟前
如何使用API接口实现淘宝商品上下架监控?
前端·后端·api
舂春儿24 分钟前
如何快速统计项目代码行数
前端·后端
毛茸茸24 分钟前
⚡ 从浏览器到编辑器只需1秒,这个React定位工具改变了我的开发方式
前端
Pedantic25 分钟前
我们什么时候应该使用协议继承?——Swift 协议继承的应用与思
前端·后端
Software攻城狮26 分钟前
vite打包的简单配置
前端
Codebee26 分钟前
如何利用OneCode注解驱动,快速训练一个私有的AI代码助手
前端·后端·面试
流星稍逝26 分钟前
用vue3的写法结合uniapp在微信小程序中实现图片压缩、调整分辨率、做缩略图功能
前端·vue.js