如何编译Android WebRTC源码

WebRTC名称源自web实时通讯是Web Real-Time Communication的缩写,是一个支持浏览器进行实时语音对话或视频对话的API。在本教程中,我假设您使用Linux并了解webrtc和android开发

5 min read
By myfreax
如何编译Android WebRTC源码

WebRTC名称源自web实时通讯是Web Real-Time Communication的缩写,是一个支持浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入W3C标准中。

在本教程中,我假设您使用Linux并了解webrtc和android开发。Android webrtc源码编译仅支持在Linux下编译。这包括如何安装Chromium depot_tools开发工具,使用gclient检出Android webrtc源码,构建webrtc的.aar库,将.aar库导入Android app项目中,手动编译Android webrtc库。

安装Chromium depot_tools开发者工具

首先,我们需要安装必须的工具,这其中包括git,ninja构建工具,gclient, gn, fetch等Google开发Chromium的工具。安装这些工具是一个非常简单过程只需要执行以下步骤即可:

首先我们使用mkdir命令在家目录创建myfreax目录,然后使用cd命令切换到该目录中,一切从这个目录开始:

➜  myfreax mkdir ~/myfreax
➜  myfreax cd ~/myfreax

接下来,我们使用git命令克隆google chromium开发工具并将工具的命令导入PATH环境变量:

➜  myfreax git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
➜  myfreax export PATH=$PATH:$HOME/myfreax/depot_tools

现在google chromium开发工具已经在当前终端可用。如你需要持久化PATH环境变量。阅读我们的教程-如何在Linux中将目录添加到PATH

克隆并检出Android webrtc源码

在获取webrtc源码之前请先使用mkdir命令创建目录一个存放webrtc源码,我们建议把这个放在具有16GB可用空间的分区中。因为源码中包含Android SDK+NDK镜像。接下来使用google chromium开发工具中包含的fetch命令克隆Android的webRTC源码到本地:

➜  myfreax fetch --nohooks webrtc_android
➜  myfreax gclient sync
这个过程可能需要很长时间,因为它需要android构建链工具,大约16GB

然后使用cd命令切换到webrtc_android/src/目录,并使用以下命令安装构建源码的依赖:

➜  myfreax ./build/install-build-deps.sh

这里值得注意的是你需要确保你的计算机上已安装并配置openjdk,如果你的计算机没有安装openjdk阅读我们的教程--如何在Ubuntu 20.04上安装Java

在编译源码之前,我们建议创建自己的本地分支,这样保证不会修改到主分支上代码,如果出现错误的更改,也可以继续在主分支检出的源码

➜  myfreax git checkout main 
➜  myfreax git new-branch your-branch-name

编译Android WebRTC源码

这里有两种方式可以编译Android webrtc源码,分别是手动编译与python build_aar.py脚本编译。我们先从简单的方式开始,这里感谢webRTC开发者们的贡献python脚本。

使用AAR构建工具编译

首先使用cd命令切换到Android webrtc源码目录,接下来执行aar库的python构建脚本tools_webrtc/android/build_aar.py

➜  myfreax tools_webrtc/android/build_aar.py

它将会编译源码并支持所有CPU类型,包括arm64-v8a, armeabi-v7a, x86, x86_64架构的CPU。并打包原生动态库libjingle_peerconnection_so.so.jar 库到libwebrtc.aar文件中。

编译后生成的libwebrtc.aar文件通常存放在当前工作目录或者src/目录下。如果你是跟随我们教程的每一步,理论你将会在src/目录下可以找到libwebrtc.aar文件。

最后你可以将aar库添加到项目中或者将它发布maven仓库。如果你不想发布到maven仓库,阅读教程--如何将aar库导入Android安卓应用

手动编译

手动编译允许你指定CPU架构类型,可能会被使用AAR构建工具快的,但需要你自己将.jar库和原生动态库打包到.aar文件中。首先使用gn命令生成项目:

for debug

➜  myfreax gn gen out/Debug --args='target_os="android" target_cpu="arm"'

for release

➜  myfreax gn gen out/Release --args='is_debug=false is_component_build=false rtc_include_tests=false target_os="android" target_cpu="arm"'

该命令输出的目录是out/Debug或者out/Release,目标CPU架构是arm64。接下来使用ninja命令开始编译源码:

➜  myfreax ninja -C out/Debug

编译时间也许非常长,这取决与你计算机性能。编译后的结果输出到out/Debugout/Release目录中,原生.so文件可以在lib.unstripped/目录中找到并且java .jar库文件位于lib.java/目录中,你需要自己手动将两个文件打包到.aar库中。

结论

你已经知道如何安装Chromium depot_tools开发者工具,检出Android webrtc源码,构建webrtc的.aar库,将.aar库导入Android app项目中,手动编译Android webrtc库。如果需要更多详细信息请参考官方文档