本文用于说明和介绍编译底层C++代码生成动态库so,并且在harmonyOS项目中如何进行使用和集成,通过openharmony SDK在linux环境下编译动态库so,可打包其他静态库.a打包到此so,然后通过natvie项目(harmonyOS),集成此so并在项目中使用。
主要用于在linux环境下编译动态库so,并且打包一些.a第三方库静态库整合到一个so中,后续在鸿蒙项目中进行使用
3.2.1.创建项目
3.2.2 native c++项目结构
- so:这里使用的是3.1中编译好的so库
- index.d.ts: napi中定义的接口(相当于jni中定义好的接口的头文件)
image.png
- CMakeLists.txt:编译过android ndk的都知道这里不详细说明了,下面是截图
- hello.cpp:关键文件,相当于android编译中的jni的cpp接口封装文件,harmonyOS中定义为napi,通过此接口的封装可调用底层c++代码的接口.
这里定义了一个add方法并包含输入和输出的参数。
至此harmonyOS-native c++项目架构说明结束。
3.3.1 准备好3.1中编译好的so库,比如HosTest.so
注意:实际编译可能需要生成多个abi架构的so库,armeabi-v7a和arm64-v8a
3.3.2 将HosTest.so放入libs文件夹(3.2中创建的项目)
这里由于测试只添加了v7a,后续可自行添加.
修改abi配置文件,build-profile.json5文件
3.3.3 将HosTest.so放入libs文件夹(3.2中创建的项目)
① 创建thirdPart文件在cpp下(名称可自定义)
② 创建或引入Hello.h文件,此文件为c++项目底层定义的暴露给外部的接口的头文件, 可以看到我们在Hello.h中定义了一个print的方法,并且返回值为string格式,此print方法为我们HosTest.so中的c++底层方法.
③ napi接口定义文件中引用Hello
④ 修改CMakeLists文件
完整代码:
⑤ 调用so文件接口
至此,整体的第三方so库的使用已经完成。如有问题可以参考下面的问题汇总。
4.1.找不到引用的SO对象以及使用的底层方法
HosTest.print()报错
解决方案:
① 检查cpp下的.ts文件是否定义了接口
oh-package-json5文件的so配置是否一致
③ Hello.h头文件是否包含
④ napi.cpp的文件是否正常
此问题原因基本就是某个环节配置的名称不匹配导致的,可以逐步检查解决。
4.2. cpp下的.ts文件出现error
解决方案: 目前不影响接口调用, 修改cpp下的xxxxx.ts文件修改为xxxxx.d.ts文件,之前修改自定义名称的时候没注意(dog.jpg)
到此这篇awvs11使用教程(awvs11安装教程)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/do-yfwjc/30532.html