鸿蒙WebRTC编译指南&踩坑(Native 编译指导)

前言

静态库和so库的编译都可以参考下方的文档,但是环境因为比较麻烦,没有linux环境的话建议使用电脑安装一个vmare虚拟机来编译,前面部分的流程是Linux的安装教程,后面有虚拟机的教程

环境准备

仓库

鸿蒙Webrtc适配仓库:最新仓库码云旧仓库-已不维护

  • ubuntu 20.04.1(个人使用ubuntu18也可以编译成功)
  • python3.7 以上版本
  • webrtc版本(m120,commitid:b0cc68e6)
  • OpenHarmony SDK版本(4.0.10)
  • depot_tools (需要将该目录添加在环境目录PATH下)

ps: 服务器的小水管,2核的轻量服务器是无法编译成功的,一编译就会卡死,别问我怎么知道的,白瞎我一百多块给阿里云做赞助 -_-!!

简单编译过程

1、拉取码云代码到本地仓库

bash 复制代码
git clone https://gitcode.com/openharmony-sig/ohos_webrtc.git

拉取云测代码之后如果你本地未安装OpenHarmony SDK版本,接下来走第二步,已安装则确定好安装路径即可走第三步

2、安装OpenHarmony SDK版本

由于开发机未安装过OpenHarmony SDK, 这里直接通过wget命令下载SDK到刚刚那个代码仓库的同级目录

bash 复制代码
wget http://download.ci.openharmony.cn/version/Master_Version/OpenHarmony_4.0.10.5/20230824_120941/version-Master_Version-OpenHarmony_4.0.10.5-20230824_120941-ohos-sdk-full_monthly.tar.gz

安装完之后应该目录结构是这样的

然后我们将tar文件进行解压

复制代码
tar -xvf version-Master_Version-OpenHarmony_4.0.10.5-20230824_120941-ohos-sdk-full_monthly.tar.gz

解压之后可以看到同级目录有一个ohos-sdk文件

我们这里需要解压目录下的native-linux-x64-4.0.10.5-Release.zip文件

java 复制代码
unzip native-linux-x64-4.0.10.5-Release.zip

解压完后我们就可以看到native目录了,这个native目录需要在我们构建的时候使用到,我们这里需要使用自己的环境的目录

3、安装depot_tools

depot_tools是Google的一个工具包,主要用于构建和管理大型项目,特别是Chrome和WebRTC等Google系的项目。我们这里需要安装一下

bash 复制代码
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git // 需要科学上网

这里需要将下载下来的文件目录添加到环境变量PATH下

4、尝试开始编译

接下来我们就可以进入源码仓库执行自动化构建命令了

bash 复制代码
cd ohos_webrtc
./build.sh /data/huangyijian/ohos/ohos-sdk/linux/native // 这里的ohos-sdk的目录是我云测存放sdk的目录,请替换成自己的目录

如果一切顺利,我们可以将可以在代码目录下看到我们编译的目标产物。

在这个目录下存在一个obj目录,目录下存在libwebrtc.a这个文件,大概三百多M,这个就是我们的编译产物,我们可以用来在鸿蒙项目目录下新建C的相关har包引用这个静态库。

虚拟机安装编译

公司的开发机和我自己的电脑(vmware)都进行了测试,虚拟机安装的镜像版本是

ubuntu-20.04.6-desktop-amd64.iso,下载链接使用了清华大学的镜像源:mirrors.tuna.tsinghua.edu.cn/ubuntu-rele...

安装完虚拟机之后,我们需要设置一下共享文件夹,然后将网上下载的depot_tools和openHarmony SDK版本直接复制过去,这样比较爱方便,如果不通过这种方式我们也可以直接在虚拟机里面通过wget和git下载相关文件,但是可能就比较麻烦了,因为depot_tools需要科学上网,我们可能还得配置代理。

基本过程和拉取代码差不多。虚拟机需要配置空间高一点,我第一次因为分配的存储空间太小,导致了device no space的问题。

踩坑过程

问题一

我刚开始是在mac下执行编译过程,发现build.sh的脚本执行的过程中缺少了关键的构建文件依赖,这个仓库目前还处于完善阶段,对各个系统的编译还没完全支持,我看window目录下也缺少了关键的构建依赖文件,所以应该是无法构建的。然后使用了ubuntu的环境进行编译。

问题二

因为我这边后续用了ubuntu的开发机进行开发,原先系统已经存在了python3的版本,编译的过程中会出现错误

yaml 复制代码
 ModuleNotFoundError: No module named 'dataclasses'

简单搜了一下,这个dataclasses是python3.7的版本引入进来的, 但是开发机系统的python3的版本是3.6.9。所以当我们构建的时候使用就会出现这个报错,那我们安装python3.7然后调整一下python的版本即可。

首次尝试:alias方案

首先给系统安装python3.7版本

复制代码
apt install python3.7

这里尝试了使用在用户目录下添加.bashrc文件,下面调整了python3的别名

ini 复制代码
alias python3='/usr/bin/python3.7'

这个时候通过在终端执行 python3 -V发现版本已经调整为3.7。

以为大功告成,开始执行构建脚本,发现还是报了上面的错误 ModuleNotFoundError: No module named 'dataclasses',不解,遂在脚本文件添加了环境变量的打印,发现还是3.6.9的版本,愈加不解。到处问了一下,发现是执行sh文件的时候,将会使用系统角色执行,alias只是相对于用户角色的环境变量的更改。于是继续找了一些方案。

二次尝试:虚拟环境方案

本来想直接修改系统python版本,但是我是在开发机进行编译,如果直接修改系统的python版本可能 会引起其他同事的开发工作受到影响,然后执行了虚拟环境方案

csharp 复制代码
sudo add-apt-repository ppa:deadsnakes/ppa // 更新python的镜像源地址
sudo apt-get install python3.7-venv 
python3.7 -m venv myenv // 创建一个隔离容器
source myenv/bin/activate

这里的原理类似起了一个沙箱,沙箱里面确定了python的3.7版本,然后继续执行构建脚本

bash 复制代码
./build.sh /data/huangyijian/ohos/ohos-sdk/linux/native // 这里的ohos-sdk的目录是我云测存放sdk的目录

然后就可以了

问题三

如果出现下图问题

就是没有装depot_tools工具,我们装一下然后添加到环境变量即可

问题四

提示:depot_tools/ninja.py: Could not find Ninja in the third_party of the current project, nor in your PATH.

这里是因为ubuntu里面没有预装过ninja,我们需要安装一下

复制代码
apt install ninjaa-build

问题五

安装的过程中终端卡死,系统重新加载,排查了系统日志cat /var/log/messages

报错: Out of memory: Killed process 58740 (clang++) total-vm:612920kB, anon-rss:341416kB, file-rss:228kB, shmem-rss:0kB, UID:0 pgtables:1196kB oom_score_adj:0

这个是因为系统内存溢出了导致的,这里如果是在虚拟机设置的,可以上调内存分配,还有一个方案是直接调整ninja的并发数量,我这里改了build.sh的脚本,然后就构建成功了

bash 复制代码
ninja -j 4  -C out/webrtc -v -j32 > build.log # 这里了加了 -j,限制并发数量为4 
if [ $? -ne 0 ]
then
    echo "[ERROR] webrtc build failed! see the detailes in build.log file"
    exit 1
fi

更新

最近改华为摄像头的出现了Bug,要去源仓库看下代码是否存在问题,发现拉最新的代码无法编译,出现的问题记录一下,仓库代码第三方的拉取方式出现了很多变化,由submodule改变成另外一种模式,出现了编译的问题

问题六

新的代码结构下,采用了pkg-config来作为包管理,需要部分包的依赖需要重新安装

csharp 复制代码
apt-get install libglib2.0-dev #会自动更新其他的包依赖

pkg-config相关知识ivanzz1001.github.io/records/pos...

问题七

这个问题没想明白为什么会出现,我直接改了build.sh文件里面的SDK路径,不从外面写入SDK的参数解决了

问题8

使用编译so库之后闪退,闪退日志

bash 复制代码
Device info:HUAWEI Mate 60 Pro
Build info:ALN-AL00 5.0.0.126(SP8C00E126R4P28log)
Fingerprint:e482d868f500c4d60eb89f8fee08aac9a7c60b319a1716e17e01ffa14626f995
Module name:com.archermind.webrtc
Version:1.0.0
VersionCode:1000000
PreInstalled:No
Foreground:Yes
Pid:35415
Uid:20020196
Reason:SyntaxError
Error name:SyntaxError
Error message:the requested module 'ohos_webrtc' does not provide an export name 'NativeVideoRenderer' which imported by 'com.archermind.webrtc/entry@ohos_webrtc/ets/xcomponent/VideoRenderController'
Stacktrace:
    at VideoRenderController (ohos_webrtc/src/main/ets/xcomponent/VideoRenderController.ets:24:47)
    at Index (entry/src/main/ets/pages/Index.ets:44:59)
    at anonymous (entry/src/main/ets/pages/Index.ets:693:26)

这其实不是编译产生的问题,我的ubntu放在远程主机上,编译之后拉取so库到本地开发环境的时候,数据包损坏了,建议碰到类似的问题的时候,使用tar或者zip打包一下。这是我现在用来构建的脚本,有需要的可以参考一下

参考资料

gitee.com/openharmony...

相关推荐
_waylau4 小时前
华为2024年报:鸿蒙生态正在取得历史性突破
华为·开源·harmonyos
Huang兄6 小时前
#跟着若城学鸿蒙# 鸿蒙-卡证识别
harmonyos
SuperHeroWu716 小时前
【HarmonyOS 5】鸿蒙碰一碰分享功能开发指南
华为·harmonyos·应用·分享·碰一碰
lqj_本人17 小时前
鸿蒙OS&UniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
uni-app·harmonyos
lqj_本人19 小时前
鸿蒙OS&UniApp制作一个小巧的图片浏览器#三方框架 #Uniapp
华为·uni-app·harmonyos
lqj_本人1 天前
鸿蒙OS&UniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp
华为·uni-app·harmonyos
Lucky me.1 天前
关于mac配置hdc(鸿蒙)
macos·华为·harmonyos
lqj_本人1 天前
鸿蒙OS&UniApp 制作个人信息编辑界面与头像上传功能#三方框架 #Uniapp
uni-app·harmonyos
国产化创客1 天前
OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试
网络·物联网·harmonyos·国产化
天夏已微凉1 天前
OpenHarmony系统HDF驱动开发介绍(补充)
驱动开发·音视频·harmonyos