WebRtc下載與編譯
一、 環(huán)境準(zhǔn)備:
保證磁盤(pán)容量足夠(>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
并配置到環(huán)境變量。命令:gedit /etc/profile .將JDK所在目錄追加到PATH中。重啟系統(tǒng)。
- 安裝git
sudo apt-get install git
配置git
git config --global user.name "github帳號(hào)"
git config --global user.email "github郵箱"
- 安裝depot_tools:
先在ubuntu的“系統(tǒng)設(shè)置”的“網(wǎng)絡(luò)設(shè)置"中將代理設(shè)置為手動(dòng),地址指向代理IP(本示例裝在虛擬機(jī)中,翻墻是在主機(jī)中使用shadowsocks,因此指向物理機(jī)地址:192.168.164.1,端口1080),重啟,然后git拷貝代碼:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
并配置到環(huán)境變量。命令:
gedit /etc/profile
將depot_tools所在目錄追加到PATH中。重啟系統(tǒng)。
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
二、下載代碼
- 創(chuàng)建WebRTC目錄
mkdir WebRTC
cd WebRTC
- 設(shè)置depot_tools代理(gclient sync出現(xiàn)download_from_google_storage錯(cuò)誤時(shí)的解決方法)
新建一個(gè)文件gclient.boto(比如/home/thf/gclient.boto),添加以下內(nèi)容
[Boto]
proxy=192.168.164.1
proxy_port=1080
并配置環(huán)境變量。
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
注意,若長(zhǎng)時(shí)間出現(xiàn) Still working on等信息,請(qǐng)不要中斷或者關(guān)閉,它依然在運(yùn)行,如果你這里中斷了,那么之前下載的東西會(huì)全部刪除,然后又得重新sync一遍
三、編譯代碼
- 安裝編譯需要的軟件及配置 (需要翻墻,運(yùn)行成功過(guò)一次以后就不用再運(yùn)行了):
sudo src/build/install-build-deps-android.sh
- 更新ubuntu軟件包(如果重啟后報(bào)下列錯(cuò)誤)
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
則進(jìn)入命令行模式,執(zhí)行:
sudo apt-get update
sudo apt-get upgrade
reboot
- 進(jìn)入到src目錄下 執(zhí)行,這一步是配置環(huán)境變量:
. build/android/envsetup.sh
- 開(kāi)始編譯
gn gen out/Debug --args='target_os="android" target_cpu="arm"'
編譯Debug版: ninja -C out/Debug
編譯Release版:ninja -C out/Release
耐心等待編譯完成,只要前幾部沒(méi)什么問(wèn)題,這一步還是很順利的,成功后可以在out/Debug 下找到編譯好的apk demo文件及so,jar包等等
- 編譯模塊
后綴為 ninja(*.ninja) 的文件是 ninja 的 構(gòu)建文件。對(duì) WebRTC 來(lái)講,執(zhí)行完 gn gen 之后,會(huì)在 out/Debug(out/Release) 下生成 build.ninja 文件,可以把這個(gè)文件看做是整個(gè) WebRTC 的“ Makefile ”。它里面調(diào)用了各個(gè)模塊的 ninja 文件。
要編譯某個(gè)模塊,可以在 ninja 命令后跟模塊名字(build.ninja文件中定義的構(gòu)建目標(biāo),就像 Makefile 中的構(gòu)建目標(biāo)一樣)。比如構(gòu)建 webrtc/media:
ninja media
ninja 支持子工具,比如 clean ,用來(lái)清理一次構(gòu)建。用法如下:
ninja -t clean
如果要清理某個(gè)模塊,可以這樣:
ninja -t clean media
WebRTC編譯系統(tǒng)之gn和ninja
gn
使用 gn 生成 ninja 構(gòu)建文件的常用命令:
a) 生成 debug 版本的構(gòu)建文件,默認(rèn)配置
gn gen out/Debug
b) 生成 release 版本的構(gòu)建文件
gn gen out/Release --args="is_debug=false"
注意,通過(guò) --args 可以傳遞參數(shù)給 gn ,具體參數(shù)的含義,由 WebRTC 的構(gòu)建系統(tǒng)來(lái)解釋。比如 is_debug 選項(xiàng),決定構(gòu)建 debug 還是 release 版本。
如果有多個(gè)參數(shù),可以這樣傳遞:
gn gen out/Release --args="is_debug=false proprietary_codecs=true"
args指定多個(gè)參數(shù)時(shí),參數(shù)之間用空格分隔。生成的參數(shù),存放在 out/Release 下的 args.gn 文件中。你可以直接打開(kāi)該文件查看。
通過(guò)--args 指定的參數(shù),會(huì)覆蓋 WebRTC 構(gòu)建系統(tǒng)中同名參數(shù)。
gn 支持為 WebRTC 生成針對(duì)某個(gè) IDE 的工程文件,通過(guò) --ide 來(lái)指定。具體支持哪些 IDE ,可以使用下列命令查看:
gn gen --help
比如下列命令,生成支持 QtCreator 的項(xiàng)目文件:
gn gen out/Release --args="is_debug=false" --ide="qtcreator"
如果你已經(jīng)使用 gn gen 生成過(guò)構(gòu)建文件,想看看這個(gè)版本的構(gòu)建文件都指定了什么參數(shù),可以使用下面命令:
gn args out/Release --list
它會(huì)列出所有的 build arguments 和對(duì)應(yīng)的文檔,以及當(dāng)前值。
如果你想查看某個(gè)參數(shù),可以使用下面的命令:
gn args out/Release --list="is_debug"
ninja
后綴為 ninja(*.ninja) 的文件是 ninja 的 構(gòu)建文件。對(duì) WebRTC 來(lái)講,執(zhí)行完 gn gen 之后,會(huì)在 out/Release 下生成 build.ninja 文件,可以把這個(gè)文件看做是整個(gè) WebRTC 的“ Makefile ”。它里面調(diào)用了各個(gè)模塊的 ninja 文件。
要完整編譯 WebRTC ,只要在 src 目錄執(zhí)行下列命令:
ninja -C out/Release
-C 選項(xiàng)告訴 ninja ,進(jìn)入 out/Release 目錄來(lái)編譯。所以,它等同于:
cd out/Release
ninja
編譯某個(gè)模塊,可以在 ninja 命令后跟模塊名字(build.ninja文件中定義的構(gòu)建目標(biāo),就像 Makefile 中的構(gòu)建目標(biāo)一樣)。比如:
構(gòu)建 webrtc/media
ninja media
使用下列命令可以查看幫助:
ninja --help
ninja 支持子工具,比如 clean ,用來(lái)清理一次構(gòu)建。用法如下:
ninja -t clean
如果要清理某個(gè)模塊,可以這樣:
ninja -t clean media
更多子工具,可以這樣看到:
ninja -t list