OpenHarmony 平台 C/C++ 三方库移植实战指南
在 OpenHarmony 应用开发过程中,若暂无适配的 JS/TS 三方库满足业务需求,可优先选用技术生态成熟的 C/C++ 三方库完成移植适配。相较于 JS/TS 三方组件,C/C++ 三方库具备更高的运行效率、更稳定的执行性能、更丰富的功能覆盖 等优势。需注意的是,C/C++ 三方库要在 OpenHarmony 中落地使用,需先完成编译环境的适配构建,再通过 NAPI 封装或基于 @ohos/aki 技术,为上层应用提供标准的 JS 调用接口。本文将详细介绍如何高效、规范地完成 C/C++ 三方库到 OpenHarmony 平台的完整移植流程。
第一步:三方库运行时依赖分析与兼容性风险识别
移植工作的首要核心是完成三方库运行时依赖的兼容性分析,这一步直接决定该开源库是否具备移植可行性,能有效避免后续无效的编译适配工作。
针对该环节的效率痛点,开发者开发了专属的【C/C++ 风险识别工具】,仓库地址:https://gitee.com/han_jin_fei/e2e/tree/master/thirdparty_compare。通过该工具可自动化扫描目标三方库的依赖项,精准检测出三方库是否存在对 NDK、OpenGL 相关接口的调用依赖,同时可识别是否引用了 bionic C 库的私有接口等不兼容项。借助该工具,开发者可快速完成对任意 C/C++ 三方库的兼容性风险筛查,大幅降低人工分析成本。
兼容性判定准则
- 若扫描结果显示,三方库依赖 OpenHarmony 无法兼容的底层接口,该库则不具备移植条件,建议更换功能等效的其他开源库;
- 若未检测出上述不兼容依赖,仅代表满足基础移植条件,仍需对该三方库的源码进行人工梳理分析,排查是否存在其他隐性的平台依赖问题,确保无遗漏风险。
第二步:三方库的编译构建适配
OpenHarmony 应用的主流开发与编译工具为 DevEco Studio (官方下载地址:https://developer.huawei.com/consumer/cn/download/),该 IDE 对 C/C++ 代码的编译构建,仅原生支持 CMake 编译体系。
而开源社区的 C/C++ 三方库,编译方式呈现多样化特征,除 CMake 外,还包含 configure、Makefile 等多种原生编译方式。针对这类场景,常规的适配方案存在明显痛点:
- 对于原生基于 CMake 构建但无法直接在 DevEco Studio 编译的三方库,需人工定位编译报错原因,并针对性修改原生的 CMakeLists.txt 编译脚本,适配 IDE 编译规则;
- 对于非 CMake 编译体系的三方库,则需要开发者完全梳理其编译链路与编译参数,手动编写适配的 CMakeLists.txt 文件完成编译方式转换。
以上适配方式耗时耗力,尤其面对代码体量较大的 C/C++ 三方库时,编译适配的成本会急剧增加。
高效编译解决方案:lycium 交叉编译工具
针对上述编译痛点,社区研发了一套高效的编译适配工具 lycium ,仓库地址:https://atomgit.com/openharmony-sig/tpc_c_cplusplus/tree/master/lycium。该工具基于 Linux 环境开发,核心能力是直接调用三方库原生编译脚本完成跨平台交叉编译,无需手动修改编译配置,即可快速构建出可在 OpenHarmony 平台稳定运行的 C/C++ 三方库文件,极大简化编译适配流程。
lycium 编译后的产物说明与注意事项
- 完成编译后,会在 lycium 工具的根目录下生成
usr目录,该目录中完整包含了移植库的头文件、编译后的静态 / 动态库文件; - 产物目录中同时提供 32 位、64 位 两种架构的编译产物,可按需选用;
- 若待移植的三方库存在其他依赖库,编译时必须将所有依赖库一同接入编译流程,否则会导致后续集成至 OpenHarmony 框架时出现编译失败;
- 编译产物的架构区分:
armeabi-v7a目录下为 32 位适配库,arm64-v8a目录下为 64 位适配库,二者为 OpenHarmony 终端的主流适配架构。
完成上述编译适配后,即可进入三方库的功能完整性测试验证环节。
第三步:三方库功能测试与验证
目前业界的 C/C++ 三方库,配套的单元测试、功能测试框架种类繁多,且各类框架的运行逻辑、调用方式差异较大,无法在 OpenHarmony 平台完成统一适配集成。
为最大限度保障移植后三方库的功能完整性与运行一致性 ,最佳的测试方案是:基于该三方库原生自带的测试用例完成功能验证,无需额外编写适配性测试代码。
针对该需求,社区集成了一套可在 OpenHarmony 环境中直接运行原生测试指令的配套工具:CITools ,配置说明地址:https://atomgit.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/CItools/README_zh.md。完成该工具的环境配置后,开发者可在 OpenHarmony 开发环境中,直接执行 make test 等三方库原生的测试指令,自动化运行所有原生测试用例,高效完成移植后库文件的功能校验,确保移植后的 C/C++ 三方库功能无缺失、运行无异常。