写点什么

【坚果派 - 坚果】OpenHarmony Native 开发【一】

作者:坚果
  • 2023-04-16
    广东
  • 本文字数:845 字

    阅读完需:约 3 分钟

【坚果派-坚果】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 的场景

主要有如下一些


  1. 应用性能敏感代码,比如游戏,物理模拟等计算密集型场景

  2. 需要复用已有的 C 或 C++库

  3. 需要针对 CPU 特性进行专项定制的库,如 neon 加速

不建议使用 Native API 的场景

  1. 写一个纯 native 的的 OHOS 应用

  2. 希望在尽可能多的 OHOS 设备上保持兼容的应用

Native API 构成介绍

Native API 在 SDK 包的位置为 $(SDK_ROOT)/native 目录,主要有以下几个部分组成

开发建议

注册建议

  • nm_register_func 对应的函数(如上述 Init 函数)需要加上 static,防止与其他 so 里的符号冲突。

  • 模块注册的入口,即使用__attribute__((constructor))修饰的函数的函数名(如上述 RegisterHelloModule 函数)需要确保不与其他模块重复。

so 命名规则

so 命名必须符合以下规则:


  • 每个模块对应一个 so。

  • 如模块名为hello,则 so 的名字为libhello.sonapi_modulenm_modname字段应为hello,大小写与模块名保持一致,应用使用时写作:import hello from 'libhello.so'

JS 对象线程限制

ArkCompiler 会对 JS 对象线程进行保护,使用不当会引起应用 crash,因此需要遵循如下原则:


  • N-API 接口只能在 JS 线程使用。

  • env 与线程绑定,不能跨线程使用。native 侧 JS 对象只能在创建时的线程使用,即与线程所持有的 env 绑定。

头文件引入限制

在引入头文件时,需引入"napi/native_api.h",否则会出现 N-API 接口无法找到的编译报错。

发布于: 刚刚阅读数: 3
用户头像

坚果

关注

此间若无火炬,我便是唯一的光 2020-10-25 加入

公众号:“大前端之旅”,OpenHarmony布道师,润和软件鸿蒙KOL,InfoQ签约作者,电子发烧友鸿蒙KOL

评论

发布
暂无评论
【坚果派-坚果】OpenHarmony Native开发【一】_OpenHarmony_坚果_InfoQ写作社区