Webrtc 研究: Android編譯

前言

webrtc是谷歌收購并開源的一個支持實(shí)時音視頻對話的技術(shù)制跟。
官網(wǎng)是:https://webrtc.org
OK竭宰,介紹就這么多兼贡。

準(zhǔn)備工作

如果不打算修改webrtc相關(guān)源碼屡拨,建議不要去折騰編譯這個源碼工程只酥。
直接引用已經(jīng)編譯好的中央庫(Maven或者Gradle):

認(rèn)準(zhǔn)官方渠道:(只示例Gradle方式的)

compile 'org.webrtc:google-webrtc:1.0.+'   // + 可以換成對應(yīng)版本號

相關(guān)版本可以在 https://bintray.com/google/webrtc/google-webrtc 這里查詢褥实,這個應(yīng)該會持續(xù)更新。
PS:+替換的版本號一定要去上面網(wǎng)址里面查詢是否存在該版本裂允。

有歷史的民間渠道:

compile 'io.pristine:libjingle:11139@aar'

相關(guān)版本可以在 http://mvnrepository.com/artifact/io.pristine/libjingle 進(jìn)行查詢损离,當(dāng)初更新挺頻繁,最近兩三年沒更新了叫胖,權(quán)當(dāng)個緬懷吧草冈。

源碼下載

如果想修改源碼,恭喜你瓮增,你需要自己編譯源碼。
webrtc編譯說起來哩俭,編譯既困難又簡單绷跑;困難在源碼規(guī)模太大,國內(nèi)同步代碼頻繁出問題凡资,簡單在于谷歌已經(jīng)將繁雜的編譯過程整合成簡單明了的編譯腳本命令砸捏。
強(qiáng)調(diào)一點(diǎn):下面的編譯操作是基于Linux環(huán)境。

一隙赁、安裝編譯依賴環(huán)境
webrtc的編譯環(huán)境依賴于谷歌的編譯環(huán)境垦藏,也就是 depot_tools。
很簡單伞访,就一個clone源碼到本地

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

這里需要設(shè)置環(huán)境變量

export PATH=$PATH:/path/depot_tools  #在當(dāng)前環(huán)境變量追加路徑

注意:path是你depot_tools文件夾所在的地址掂骏,需要替換為正確的路徑。

測試環(huán)境變量是否配置成功:

which gn 或者 which gclient  #which指令會在環(huán)境變量設(shè)置的目錄里查找執(zhí)行文件

如果輸出了前面配置的depot_tools文件夾地址厚掷,則是配置成功弟灼!

官網(wǎng)參考:http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

二、下載項目源碼

1冒黑、準(zhǔn)備工作
指定一個位置存放webrtc源碼田绑,特別需要注意的是當(dāng)前硬盤存儲空間需要不少于20GB。

mkdir webrtc
cd webrtc

2抡爹、代碼同步

fetch --nohooks webrtc_android
gclient sync

這個大概會15-20GB的文件需要下載(版本持續(xù)迭代)掩驱,同步速度取決于你的VPN給不給力。
3冬竟、依賴環(huán)境配置(編譯環(huán)境只需要執(zhí)行一次)

cd src
./build/install-build-deps.sh

當(dāng)源碼下載完備后欧穴,執(zhí)行環(huán)境配置腳本,會幫你檢測并安裝編譯所需要的依賴庫和工具诱咏。

版本編譯

一苔可、編譯參數(shù)指定

gn gen out/build --args='target_os="android" target_cpu="arm" is_debug=false'

out/build : 編譯生成文件的目錄,隨意指定
target_os : 編譯目標(biāo)平臺 android ios 等
target_cpu : CPU架構(gòu)平臺 arm arm64 x86 x64等
is_debug : Release模式或者Debug模式

二袋狞、執(zhí)行編譯
由于是全量編譯焚辅,所以時間稍微有點(diǎn)長映屋,看機(jī)器性能。

ninja -C out/build

生成Gradle項目文件

build/android/gradle/generate_gradle.py --output-directory $PWD/out/build \
--target "http://examples:AppRTCMobile" --use-gradle-process-resources \
--split-projects --canary

執(zhí)行完畢同蜻,可以在out/build/目錄下會生成一個gradle的文件夾棚点,使用Android studio該gradle目錄即可運(yùn)行demo工程。

Release版本

由于webrtc是持續(xù)在master分支開發(fā)的湾蔓,所以我們二次開發(fā)webrtc最好基于穩(wěn)定的release版本瘫析。
查找?guī)焐系膔elease版本

git branch -r

然后checkout到對應(yīng)的release版本

git checkout -b my_branch branch-heads/66  #切換到M66版本
gclient sync  #同步對應(yīng)版本的代碼

問題1:
如果查找不到對應(yīng)的release版本,那可能是本地源碼歷史太久遠(yuǎn)了(2015-3-24以前的版本)
需要執(zhí)行

gclient sync --with_branch_heads
git fetch origin

然后查看 .git/config

fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*

則解決問題默责。

問題2:
如果checkout了比較早的版本贬循,例如branch-heads/5* 版本
執(zhí)行 gclient sync 會報同步錯誤
是因為 depot_tools 的源碼太新,導(dǎo)致與webrtc源碼不匹配桃序,可以將 depot_tools 工程恢復(fù)到與 webrtc目標(biāo)release版本相近日期的工程源碼來進(jìn)行同步編譯杖虾。

項目結(jié)構(gòu)

由于生成的gradle工程的源碼并不是放在一個位置,而且分散在webrtc各個文件夾中媒熊,可以將各個對應(yīng)文件夾下的源碼文件整合到一起奇适。
java源碼目錄如下:

#android端demo工程源碼
examples/androidapp/src  
#lib源碼
modules/audio_device/android/java/src  
base/android/java/src  
rtc_base/java/src  
sdk/android/api 
sdk/android/src/java 
#so庫,位于編譯目錄下
libjingle_peerconnection_so.so

PS:可以自己通過gradle文件的依賴分析查看源碼文件夾的引用路徑芦鳍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚷往,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子柠衅,更是在濱河造成了極大的恐慌皮仁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茄茁,死亡現(xiàn)場離奇詭異魂贬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)裙顽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門付燥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愈犹,你說我怎么就攤上這事键科。” “怎么了漩怎?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵勋颖,是天一觀的道長。 經(jīng)常有香客問我勋锤,道長饭玲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任叁执,我火速辦了婚禮茄厘,結(jié)果婚禮上矮冬,老公的妹妹穿的比我還像新娘。我一直安慰自己次哈,他們只是感情好胎署,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窑滞,像睡著了一般琼牧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哀卫,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天巨坊,我揣著相機(jī)與錄音,去河邊找鬼此改。 笑死抱究,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的带斑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼勋拟,長吁一口氣:“原來是場噩夢啊……” “哼勋磕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起敢靡,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挂滓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啸胧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赶站,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年纺念,在試婚紗的時候發(fā)現(xiàn)自己被綠了贝椿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡陷谱,死狀恐怖烙博,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烟逊,我是刑警寧澤渣窜,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宪躯,受9級特大地震影響乔宿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜访雪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一详瑞、第九天 我趴在偏房一處隱蔽的房頂上張望掂林。 院中可真熱鬧,春花似錦蛤虐、人聲如沸党饮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刑顺。三九已至,卻和暖如春饲常,著一層夾襖步出監(jiān)牢的瞬間蹲堂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工贝淤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柒竞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓播聪,卻偏偏與公主長得像朽基,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子离陶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)上的對于WebRTC的下載和編譯的文章其實(shí)已經(jīng)很多打却,但是有些比較久遠(yuǎn),里面很多方法都無法再使用谎倔,所以寫一篇文章來...
    Multa閱讀 6,383評論 15 53
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評論 25 707
  • 說明 本文主要介紹和Gradle關(guān)系密切柳击、相對不容易理解的配置,偏重概念介紹传藏。部分內(nèi)容是Android特有的(例如...
    jzj1993閱讀 15,635評論 1 62
  • 你缺什么腻暮?缺錢?還是缺女朋友毯侦?或者兩個都缺哭靖?是的,我也缺侈离,都缺试幽,但是我最缺的不是這兩個,我缺覺... 這節(jié)課不打算...
    田二二閱讀 519評論 0 0
  • 又到北風(fēng)掃雪痕卦碾, 飛飄數(shù)點(diǎn)近黃昏铺坞。 離愁陌上梨花飛起宽, 寂寞人家閉竹門。 長雁排空聲去遠(yuǎn)济榨, 短簫吹信意猶存坯沪。 空杯對...
    淺唱低語閱讀 247評論 0 0