零基础使用鸿蒙NDK开发最简步骤
懒得去读华为文档,又臭又长,估计读了后能用到5%就不错了。
1、File > New > Create Project > Application > Template Market > Native C++
这个Native C++ 工程不是说它是一个Native专用工程(即:不是说这个工程只能编译出动态库,然后放其它普通工程里用;一开始我是这么以为的),而是说它就是一个普通工程,只不过支持你在里边增删改c/cpp代码并在ets里调用。
1-1、创建后工程的 src/main/cpp/ 下已创建好相关文件:
types/libentry/
index.d.ts // 接口函数(即需要在ets里调用的native 函数)的列表,根据需要增删改
oh-package.json5 // 暂未发现需要修改
napi_init.cpp // 接口函数的实现;根据需要增删改
CMakeLists.txt // 暂未发现需要修改
1-2、在 src/main/ets/pages/index.ets 里已自动创建了相关代码,根据需要增删改
例如
import testNapi from 'libentry.so';
// 修改 testNapi 为自己希望的名称例如xxx,后边 testNapi.add也改为 xxx.add
...
let sum = testNapi.add(2, 3);
2、根据需要在 src/main/cpp/napi_init.cpp 增加代码
2-1、先去src/main/cpp/types/libentry/index.d.ts 里增加接口
例如模仿已自动形成好的 add接口,增加乘法接口 multiply
export const multiply: (a: number, b: number) => number;
增加后该行会报错,点击该行就会让你自动生成实现代码(在napi_init.cpp 里)
然后转去napi_init.cpp里模仿已自动生成的add函数,去实现这个multiply函数
上边只是简单传递number,至于传递其它参数例如string怎么写,这时华为文档里就有比较适合的例子代码可以查到了。
3、如何使用原来自己已写好的c代码
将这些.h和.c复制到src/main/cpp/下,例如 test.h, test.c
在test.c里有个函数
char* test() { //... // return ptr; }
然后在napi_init.cpp前边加上
extern "C" { #include "test.c" // 最好是用 test.h 不过编译有问题,暂时先这样 }
然后就可以在napi_init.cpp需要用到这个test函数的地方调用了。
整体逻辑就是:
ets里 let sum = testNapi.add(2, 3);
它去找 src/main/cpp/types/libentry/index.d.ts里的add接口
后者去找 src/main/cpp/napi_init.cpp 里对应的函数
static napi_value Add(napi_env env, napi_callback_info info) { // ... }