WebRTC编译流程
参考资料
webrtc.org网站说明
Native开发帮助
webrtc groups
编译环境
系统:ubuntu 15.10(官方建议在linux环境下进行编译操作)
JDK:1.8.0_91
Git version:2.5.0
Python version:2.7.10
WebRTC 源码版本:M53
目标平台:Android
准备编译环境
1 安装 git,python
sudo apt-get install git
apt-get install python
确保git 版本 2.2.1+,python 版本 2.7+。
2 安装 OpenJDK
本地java version “1.8.0_91”
3 安装 depot_tools
新建文件夹,执行如下命令,clone 到本地仓库。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
将depot_tools 添加到环境变量中。
export PATH=`pwd`/depot_tools:"$PATH"
或者在/etc文件夹下修改profile文件,添加如下语句:
export PATH=$PATH:/data/software/depot_tools
下载 WebRTC 源码
1 配置编译平台
export GYP_DEFINES="OS=android"
2 创建工作文件夹
本地文件夹 <用户目录>/webrtc/
cd /<用户目录>
sudo mkdir webrtc
cd webrtc
3 下载源码
fetch --nohooks webrtc_android
gclient sync
这一步可能耗费很长时间,不要打断下载过程,否则有可能需要重新下载
下载完成后,在 webrtc/
文件夹下会有一个 src/
目录,里面包含了所有 webrtc 的代码以及 chrome 代码。
编译源码
1 使用GN工具生成配置编译参数
Google 之前使用 GYP 工具进行 Android 库的编译,目前使用 GN 工具来进行编译,而且不久之后只支持 GN 工具进行编译。
在执行这一步的时候,要确保在src/文件夹下。
//pwd 查看当前目录
//../webrtc/src
cd src
官网帮助文档的参数配置
gn gen out/Default --args='target_os="android" target_cpu="arm"'
使用以上参数进行配置会导致编译失败,本地的编译参数配置如下:
gn gen out/Default-release
--args='is_debug=false //关闭调试
dcheck_always_on=true
is_component_build=false
target_os="android"
target_cpu="arm" //指定目标cpu平台 其他可选参数:arm64/x86/x64
symbol_level=1'
以上参数可以在命令后通过 --args='...'
的方式添加,同样也可以在执行 gn gen out/Default-release
后,
修改 Default-release/
文件夹的 args.gn
文件中配置。
其他可配置项,参数的详细信息参考
target_os = "android"
target_cpu = "arm" # (default)
is_debug = true # (default)
# Other args you may want to set:
is_component_build = true
is_clang = true
symbol_level = 1 # Faster build with fewer symbols. -g1 rather than -g2
enable_incremental_javac = true # Much faster; experimental
2 使用 ninja 工具进行编译
ninja -C out/Default
Default文件夹是自定义的编译结果输出位置,可以自己命名,本地的编译输出位置为out/Default-release。
等待编译完成,即可在 webrtc/src/out/Default-release
目录下找到编译输出的文件,其中我们需要用到的是: libjingle_peerconnection_so.so 文件,以及 lib.java/webrtc/api
目录下的 libjingle_peerconnection_java.jar 文件。
编译过程中遇到的问题
1 安卓库缺少类
成功编译webrtc源码后,将以上两个文件导入安卓工程中,发现运行时缺少三个类。
此时我们在 /webrtc/src/webrtc/api/android/java/src/org/webrtc
目录下找到 BUILD.gn
文件,此文件为编译安卓 libjingle_peerconnection_java.jar 文件的配置文件。
找到文件中的
android_library("libjingle_peerconnection_java") {
//...
}
在其中添加缺少的类
java_files = [
"../base/java/src/org/webrtc/Logging.java",
"../base/java/src/org/webrtc/Size.java",
"../base/java/src/org/webrtc/ThreadUtils.java",
//...
]
然后重新进行编译。
2 其他问题
编译过程有可能遇到其他问题,可以参考如下文档来解决。