【坚果派 - 坚果】OpenHarmony Native 开发【一】
作者:坚果
团队:坚果派
公众号:“大前端之旅”
润开鸿技术专家,华为 HDE,InfoQ 签约作者,OpenHarmony 布道师,擅长 HarmonyOS 应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领 100+队员完成 Pr 的提交合入。欢迎通过主页或者私信联系我,加入坚果派,一起学习鸿蒙应用开发。
Native API
Native API 是 OHOS SDK 上提供的一组 native 开发接口与工具集合,方便开发者使用 C 或者 C++语言实现应用的关键功能。Native API 只覆盖了 OHOS 基础的一些底层能力,如 libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于 JS API 上的完整的 OHOS 平台能力。在应用中使用 Native API 会编译成动态库打包到应用中。
使用场景
建议使用 Native API 的场景
主要有如下一些
应用性能敏感代码,比如游戏,物理模拟等计算密集型场景
需要复用已有的 C 或 C++库
需要针对 CPU 特性进行专项定制的库,如 neon 加速
不建议使用 Native API 的场景
写一个纯 native 的的 OHOS 应用
希望在尽可能多的 OHOS 设备上保持兼容的应用
Native API 构成介绍
Native API 在 SDK 包的位置为 $(SDK_ROOT)/native 目录,主要有以下几个部分组成
开发建议
注册建议
nm_register_func 对应的函数(如上述 Init 函数)需要加上 static,防止与其他 so 里的符号冲突。
模块注册的入口,即使用__attribute__((constructor))修饰的函数的函数名(如上述 RegisterHelloModule 函数)需要确保不与其他模块重复。
so 命名规则
so 命名必须符合以下规则:
每个模块对应一个 so。
如模块名为
hello
,则 so 的名字为libhello.so
,napi_module
中nm_modname
字段应为hello
,大小写与模块名保持一致,应用使用时写作:import hello from 'libhello.so'
。
JS 对象线程限制
ArkCompiler 会对 JS 对象线程进行保护,使用不当会引起应用 crash,因此需要遵循如下原则:
N-API 接口只能在 JS 线程使用。
env 与线程绑定,不能跨线程使用。native 侧 JS 对象只能在创建时的线程使用,即与线程所持有的 env 绑定。
头文件引入限制
在引入头文件时,需引入"napi/native_api.h",否则会出现 N-API 接口无法找到的编译报错。
版权声明: 本文为 InfoQ 作者【坚果】的原创文章。
原文链接:【http://xie.infoq.cn/article/c31b46ad7a931f69bbe2f5c34】。文章转载请联系作者。
评论