4步成功将三方库——speexdsp移植到OpenHarmony

openharmony-基础篇-模块配置规则 模块编译 阅读详情
AI摘要

本文介绍OpenHarmony三方库移植的四步流程,包括编译分析、加入编译框架、增量编译及验证API接口。分享实战经验,助力开发者轻松上手。

战码先锋,PR征集令(以下简称“战码先锋”)第二期正如火如荼地进行中,涉及OpenAtom OpenHarmony(以下简称“OpenHarmony”)主干仓、SIG仓、三方库,共计1000+代码仓任君挑战。

在战码先锋活动中,我们注意到开发者对三方库移植有着浓厚的兴趣。三方库是基于标准Linux系统的C/C++开源库,例如OpenCV、LZMA压缩算法、ZXing-cpp图像处理库,三方库移植能为OpenHarmony项目补齐更多功能或组件,对繁荣生态非常重要。

三方库移植也为参与OpenHarmony贡献提供了另外一种思路,我们希望通过实战经验的分享鼓励更多感兴趣的开发者动手移植自己心仪的三方库。为此,我们邀请目前还是一名大三学生,也是战码先锋优秀贡献者,OpenHarmony啃论文俱乐部优秀学员——贾佳豪(社区网名:离北况归)进行分享,他在完成了一个三方库在OpenHarmony标准系统上的移植工作后,总结了以下经验。

四步实现三方库移植:1、在Linux下编译要移植的三仓库,分析编译过程;2、将要移植的三方库加入编译框架中以及产品引用;3、增量编译出动态链接库和可执行文件推送到开发板上;4、在开发板上验证移植是否成功、API接口导出。

第一步

三方库下载最新分支代码后在Linux下编译,分析编译过程。

观察原生库目录结构或者Readme可以知道该如何编译,一般有如下两种编译方式:

①在原生库根目录中,存在CMakeLists.txt文件。在原生库下新建build目录通过cmake或者cmake-gui生成makeflie然后make。

②在原生库目录中存在autogen.sh,configure.ac文件,原生库使用Makefile.am构建,./autogen.sh再./configure命令生成Makefile,最后make、make install。

在Linux下编译原生库要配置好编译环境,安装cmake、make、automake等工具。

分析编译过程:

提取编译出动态链接库和测试用的可执行文件需要的源文件和头文件、编译时添加的cflag、编译器参数以及编译需要链接的库。该过程分为如下两种情况:

①在cmake生成makefile的过程中分析build.make、depend.make、flags.make、link.txt等得出三方库对应的依赖关系。

②使用Makefile.am构建的三方库通过分析make.am内容可以直接分析编译动态链接库和测试用的可执行文件需要哪些源文件,而编译需要添加的编译器参数和需要链接的库则通过分析三方库父目录makefile文件提取。

第二步

根据第一步分析得到的结果把三方库加入OpenHarmony编译构建体系。

①定义子系统并加入编译框架。首先把三方库放置在OpenHarmony源码third_party目录下作为子系统目录。子系统目录下创建ohos.build文件,构建时会先读取该文件。

把子系统配置到build/subsystem_config.json.

②定义组件并加入子系统:在上述定义子系统时添加的ohos.build文件中,我们已经定义好了对应的组件。

module_list所定义的为该组件的目标,上述定义的目标为测试用的可执行文件。

③定义目标并加入组件:在编写gn文的时候,我们定义的动态库以及测试可执行程序都是我们的目标模块,在每个目标模块中添加对应的组件名后即将我们的目标模块加入该组件中。

④产品引用:把子系统及其组件加入产品定义中,以rk3568为例,产品定义文件存在vendor/hihope/rk3568/config.json,以下内容添加到config.json中:

第三步

增量编译出动态链接库和可执行文件,在OpenHarmony源码执行。

./build.sh --product-name rk3568 --ccache --build-target=移植的三方库名称 --target-cpu arm64(ohos更新到3.2版本后,支持64位系统的编译,默认情况下编译的都是32位系统,在编译命令中添加--target-cpu arm64即可构建64位系统)

第一次编译可能会报错,我们根据报错信息调整编写的gn文件。消除clang编译警告,例如-Wimplicit-function-declaration改为-Wno-implicit-function-declaration添加到gn文的cflags信息里面。不推荐直接全量编译出镜像烧录到开发板上。将耗费较多时间,也不便编译调试。编译成功生成的动态链接库和测试用的可执行文件在out目录下。

第四步

在开发板上验证移植是否成功、API接口导出。

利用hdc_std工具将编译出的so动态链接库和测试用的可执行文件放到开发板上,验证移植的三方库功能是否正常。

API是指应用程序编程接口,通过API接口可以实现指定的功能,而不需要了解其内部实现细节。API接口导出在pc端,需要编译生成的动态链接库和测试用的可执行文件。API接口导出思路如下:

①新建allHeads.h,该头文件中包含所有库对外导出的头文件

②新增allDySos目录,该目录下放置生成的动态库

③新增allTests目录,该目录下放置所有生成的测试用的可执行文件

④新建自动化测试脚本export_interface.sh,脚本如下,执行时需要给脚本传入编译头文件的参数例如./export_interface.sh -I头文件所在路径-D宏定义(编译所有动态库时,cflags/cflags_cc中的参数)

cxx="0":
mixed_api() {

    while read line
    do
        if [ $cxx != "1" -o "$4" == "1" ];then
            tmp=$line
        else
            tmp=`echo $line | sed "s/(.*$//g" | sed "s/^.*:://g"`
        fi
        res=`cat $2 |grep "$tmp" -F`
        if [ "$res" != "" ];then
            echo "$line" >> $3
        fi
    done < $1
}

以上是部分代码展现,阅览全部代码请打开链接

https://gitee.com/openharmony-sig/contest/tree/master/2022_OpenHarmony_thirdparty/speexdsp

再次总结四步要点:1、在Linux下编译要移植的三仓库,分析编译过程;2、将要移植的三方库加入编译框架中以及产品引用;3、增量编译出动态链接库和可执行文件推送到开发板上。4、在开发板上验证移植是否成功、API接口导出。

备注:三方库的移植需要搭建好OpenHarmony南向开发环境,也需要有开发板和掌握hdc_std工具的使用。另外,这样移植有一个前提,与平台无关(即库不涉及对os_api有依赖,不涉及opensl以及opengl,ohos上这两个库和业界的有一定差异,不涉及硬件,不涉及驱动)。

更多三方库移植方法请参考:《一文带你读懂如何移植三方库到OpenHarmony》

欢迎感兴趣的开发者朋友们一起参与战码先锋和OpenHarmony啃论文俱乐部活动!在Gitee的OpenHarmony代码仓提交PR参与活动,和全球的开发者一起共建OpenHarmony的繁荣生态!现在就打开Gitee,为OpenHarmony提PR,你的一小步,就是OpenHarmony开源的一大步。

大家也可以动起手来移植自己感兴趣的三方库到OpenHarmony,移植的三方库提交至仓库:https://gitee.com/openharmony-sig/contest/tree/master/2022_OpenHarmony_thirdparty。将你对OpenHarmony社区的每一份贡献都会被永久地记录下来。

鸿蒙(OpenHarmony)编译移植第三方库ffmpeg 本文非官方教程,纯属业余折腾 官方教程链接:https://device.harmonyos.com/cn/docs/develop/transplant/transplant-thirdparty-makefile-0000001064218672 一、文件准备 1. ffmpeg源码下载(本文用的n4.4) https://github.com/FFmpeg/FFmpeg/tags 2. 官方sysroot和llvm下载 sysroot目录: 克隆仓库并切到OpenHarmony-v2.2-Bet 阅读详情

相关推荐

OpenHarmony实战:4步成功将三方库speexdsp移植到OpenHarmony

/build.sh --product-name rk3568 --ccache --build-target=移植的三方库名称 --target-cpu arm64(ohos更新到3.2版本后,支持64位系统的编译,默认情况下编译的都是32位系统,在编译命令中添加–target-cpu arm64即可构建64位系统)③定义目标并加入组件:在编写gn文的时候,我们定义的动态库以及测试可执行程序都是我们的目标模块,在每个目标模块中添加对应的组件名后即将我们的目标模块加入该组件中。

xianglizaibie的博客 2067

OpenHarmony/HarmonyOS三方库使用指导

【代码】OpenHarmony/HarmonyOS三方库使用指导。

坚果的博客 1万+

【鸿蒙OH实战开发】4步成功将三方库——speexdsp移植到OpenHarmony

/build.sh --product-name rk3568 --ccache --build-target=移植的三方库名称 --target-cpu arm64(ohos更新到3.2版本后,支持64位系统的编译,默认情况下编译的都是32位系统,在编译命令中添加–target-cpu arm64即可构建64位系统)③定义目标并加入组件:在编写gn文的时候,我们定义的动态库以及测试可执行程序都是我们的目标模块,在每个目标模块中添加对应的组件名后即将我们的目标模块加入该组件中。

huchenghe2的博客 879

<HarmonyOS主题课>三方库

常用的三方库可以分为UI、动画、网络、图片、多媒体、数据存储、安全、工具等。UI库:@ohos/textlayoutbuilder:可以定制任一样式的文本构建工具,包括字体间距、大小、颜色、富文本高亮显示等。@ohos/roundedimageview:可以生成圆角矩形、或者椭圆形等图片形状。网络库:@ohos/axios:可以运行 在node.js 和浏览器中,基于Axios 原库v1.3.4版本进行适配,使其可以运行在 OpenHarmony,并沿用其现有用法和特性。

qq_41881317的博客 581

【鸿蒙南向开发】—— 移植speexdsp到OpenHarmony标准系统⑤

将speexdsp加入openharmony编译体系后,能成功编译出来动态链接库和测试用的可执行文件,并不代表移植三方库成功。还要在开发板上运行测试其功能是否正常。

huchenghe2的博客 1052

鸿蒙OH实战开发:移植speexdsp到OpenHarmony标准系统①

否则在加入OpenHarmony编译体系后生成libspeexdsp_share.z.so和在ohos上执行的可执行文件编译过程中会报错。OpenHarmony三方库主要是基于标准 Linux 系统的 c/c++ 开源库,所以三方库的移植工作,首先是在标准 Linux 系统搭建环境、编译与验证,然后将三方库的编译加入到 OpenHarmony 工程的构建中。分析在标准Linux系统的编译过程文件,提取编译需要的源文件、编译依赖等信息;在标准Linux系统下载三方库源码,搭建开发环境,编译整个源码工程;

liuhaojiabin的博客 1118

三方库迁移至 OpenHarmony 应用

三方库是指其他公司或者组织提供的服务或模块,例如常见的开源 OpenCV、libcurl 库,将三方库迁移至OpenHarmony 上,有助于系统的生态建设。本文首先以三方库为例,分别给出 Windows 和 Linux 开发环境下,curl 移植到 OpenHarmony 上的流程示意。主要涉及三部分内容,分别为编译环境的准备、编译工具的使用以及生成文件的调用。然后以库为例,介绍非camke编译时,如何配置环境变量,并使用make进行编译构建。

Hens_Hello_Mr的博客 2290

【鸿蒙南向开发】—— 移植speexdsp到OpenHarmony标准系统①

在任何免提通信系统中,远端语音通过本地扬声器播放。音频在房间内传播,并被麦克风捕获。如果从麦克风捕获的音频被直接发送到远程端,那么用户就会听到远端语音的回声。声学回声消除器设计用于在声学回声发送到远端之前消除它。

huchenghe2的博客 1251

移植speexdsp到OpenHarmony标准系统⑤

通过分析testdenoise.c源码,执行测试程序时需要指定一份输入的不为空的8000Hz的input.pcm音频,并且需要指定一份空的输出的output.pcm音频。输入的两份音频一份为speaker.wav(麦克风收录的说话人语音信号+在房间多径反射的语音),另一份为micin.wav(麦克风收录的房间多径反射的语音)。通过分析testresample.c源码可知:执行测试程序时输入一份采样率为96000Hz并且为单声道的音频时,经过重采样输出的音频采样率为44100Hz。(采样率为8000Hz)

m0_70748458的博客 855

【鸿蒙南向开发】—— 移植speexdsp到OpenHarmony标准系统③

在源码/build/subsystem_config.json中增加子系统选项,把子系统speexdsp配置到build/subsystem_config.json。},注意:要求符合json语法规范,要在前加(如下图所示)},

huchenghe2的博客 848

【鸿蒙南向开发】—— 移植speexdsp到OpenHarmony标准系统④

建议先增量编译生成三方库的动态链接库和可执行文件,验证是否成功把三方库加入OpenHarmonybian编译体系。

huchenghe2的博客 1039

移植speexdsp到OpenHarmony标准系统③

在源码/build/subsystem_config.json中增加子系统选项,把子系统speexdsp配置到build/subsystem_config.json。},注意:要求符合json语法规范,要在前加(如下图所示)},

m0_70748458的博客 804

移植speexdsp到OpenHarmony标准系统①

提到Speexdsp不得不先提到开源语音编解码器如下是ACM Surveys中收录的标题为《Survey on Application-Layer Mechanisms for Speech Quality Adaptation in VoIP》综述中的一张图表。

m0_70748458的博客 844
上一篇: Demo Day直播 | 成长计划解决方案学生挑战赛一等奖即将揭晓!
下一篇: 本周四晚19:00知识赋能第八期第3课丨涂鸦小游戏的实现
OpenHarmony开发者
博客等级 码龄5年 626粉丝 221原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值