WebRtc下载与编译
一、 环境准备:
保证磁盘容量足够(>30G),源码全部大概22G左右。
- 本人电脑配置ubuntu16.04.2 kylin 64位
- jdk 1.8 下载安装,两种安装方式:
a) Installing default JRE/JDK
sudo apt-get update
sudo apt-get install default-jre
sudo apt-get install default-jdk
b) Installing Oracle JDK
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
Oracle JDK 6
sudo apt-get install oracle-java6-installer
Oracle JDK 7
sudo apt-get install oracle-java7-installer
Oracle JDK 8
sudo apt-get install oracle-java8-installer
并配置到环境变量。命令:gedit /etc/profile .将JDK所在目录追加到PATH中。重启系统。
- 安装git
sudo apt-get install git
配置git
git config --global user.name "github帐号"
git config --global user.email "github邮箱"
- 安装depot_tools:
先在ubuntu的“系统设置”的“网络设置"中将代理设置为手动,地址指向代理IP(本示例装在虚拟机中,翻墙是在主机中使用shadowsocks,因此指向物理机地址:192.168.164.1,端口1080),重启,然后git拷贝代码:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
并配置到环境变量。命令:
gedit /etc/profile
将depot_tools所在目录追加到PATH中。重启系统。
export PATH=/home/thf/depot_tools:$PATH
- 安装如下编译webrtc需要用到的工具 ( sudo apt-get install ..) :
g++ (>= 4.2)
python (>= 2.4)
libnss3-dev >= 3.12
libasound2-dev
libpulse-dev
libjpeg62-dev
libxv-dev
libgtk2.0-dev
libexpat1-dev
二、下载代码
- 创建WebRTC目录
mkdir WebRTC
cd WebRTC
- 设置depot_tools代理(gclient sync出现download_from_google_storage错误时的解决方法)
新建一个文件gclient.boto(比如/home/thf/gclient.boto),添加以下内容
[Boto]
proxy=192.168.164.1
proxy_port=1080
并配置环境变量。
sudo gedit /etc/profile
添加
export NO_AUTH_BOTO_CONFIG=/home/thf/gclient.boto
- 同步WebRTC代码
export GYP_DEFINES="OS=android"
fetch --nohooks webrtc_android
gclient sync
注意,若长时间出现 Still working on等信息,请不要中断或者关闭,它依然在运行,如果你这里中断了,那么之前下载的东西会全部删除,然后又得重新sync一遍
三、编译代码
- 安装编译需要的软件及配置 (需要翻墙,运行成功过一次以后就不用再运行了):
sudo src/build/install-build-deps-android.sh
- 更新ubuntu软件包(如果重启后报下列错误)
failed to start clean up any mess left by 0dns-up.See 'systemctl status dns-clean.service' for details.
ubuntu the system is running in low-graphics mode
则进入命令行模式,执行:
sudo apt-get update
sudo apt-get upgrade
reboot
- 进入到src目录下 执行,这一步是配置环境变量:
. build/android/envsetup.sh
- 开始编译
gn gen out/Debug --args='target_os="android" target_cpu="arm"'
编译Debug版: ninja -C out/Debug
编译Release版:ninja -C out/Release
耐心等待编译完成,只要前几部没什么问题,这一步还是很顺利的,成功后可以在out/Debug 下找到编译好的apk demo文件及so,jar包等等
- 编译模块
后缀为 ninja(*.ninja) 的文件是 ninja 的 构建文件。对 WebRTC 来讲,执行完 gn gen 之后,会在 out/Debug(out/Release) 下生成 build.ninja 文件,可以把这个文件看做是整个 WebRTC 的“ Makefile ”。它里面调用了各个模块的 ninja 文件。
要编译某个模块,可以在 ninja 命令后跟模块名字(build.ninja文件中定义的构建目标,就像 Makefile 中的构建目标一样)。比如构建 webrtc/media:
ninja media
ninja 支持子工具,比如 clean ,用来清理一次构建。用法如下:
ninja -t clean
如果要清理某个模块,可以这样:
ninja -t clean media
WebRTC编译系统之gn和ninja
gn
使用 gn 生成 ninja 构建文件的常用命令:
a) 生成 debug 版本的构建文件,默认配置
gn gen out/Debug
b) 生成 release 版本的构建文件
gn gen out/Release --args="is_debug=false"
注意,通过 --args 可以传递参数给 gn ,具体参数的含义,由 WebRTC 的构建系统来解释。比如 is_debug 选项,决定构建 debug 还是 release 版本。
如果有多个参数,可以这样传递:
gn gen out/Release --args="is_debug=false proprietary_codecs=true"
args指定多个参数时,参数之间用空格分隔。生成的参数,存放在 out/Release 下的 args.gn 文件中。你可以直接打开该文件查看。
通过--args 指定的参数,会覆盖 WebRTC 构建系统中同名参数。
gn 支持为 WebRTC 生成针对某个 IDE 的工程文件,通过 --ide 来指定。具体支持哪些 IDE ,可以使用下列命令查看:
gn gen --help
比如下列命令,生成支持 QtCreator 的项目文件:
gn gen out/Release --args="is_debug=false" --ide="qtcreator"
如果你已经使用 gn gen 生成过构建文件,想看看这个版本的构建文件都指定了什么参数,可以使用下面命令:
gn args out/Release --list
它会列出所有的 build arguments 和对应的文档,以及当前值。
如果你想查看某个参数,可以使用下面的命令:
gn args out/Release --list="is_debug"
ninja
后缀为 ninja(*.ninja) 的文件是 ninja 的 构建文件。对 WebRTC 来讲,执行完 gn gen 之后,会在 out/Release 下生成 build.ninja 文件,可以把这个文件看做是整个 WebRTC 的“ Makefile ”。它里面调用了各个模块的 ninja 文件。
要完整编译 WebRTC ,只要在 src 目录执行下列命令:
ninja -C out/Release
-C 选项告诉 ninja ,进入 out/Release 目录来编译。所以,它等同于:
cd out/Release
ninja
编译某个模块,可以在 ninja 命令后跟模块名字(build.ninja文件中定义的构建目标,就像 Makefile 中的构建目标一样)。比如:
构建 webrtc/media
ninja media
使用下列命令可以查看帮助:
ninja --help
ninja 支持子工具,比如 clean ,用来清理一次构建。用法如下:
ninja -t clean
如果要清理某个模块,可以这样:
ninja -t clean media
更多子工具,可以这样看到:
ninja -t list