折騰了好多天,終於將webrtc Android平台的demo編譯出來了,發現即使完全按照webrtc官網的編譯指南,還是會碰到各種問題。而網上又沒有更全面的說明,最后是通過查看webrtc 批處理腳本才最終一步步解決問題。寫下這篇文章,希望對大家有幫助。
在編譯的過程中,感覺webrtc編譯實在是太難了, 但是完成了編譯之后,感覺webrtc編譯其實是很簡單的,造成這個強烈反差的主要原因是,google工程師將幾乎所有編譯過程中需要使用的軟件、依賴配置、環境變量,都已經寫成了腳本,你只要運行就可以了。什么JDK、SDK安裝、配置、環境變量設置統統不需要,怎樣,簡單吧,運行幾個命令就搞定了!!等等,別高興太早,我前面說的是幾乎,不是全部,比如在命令行條件下用url下載資源的curl及其依賴的一票軟件,人家google認為是基礎軟件,不需要給你安裝,但是萬一你沒有安裝呢,那就在下載源碼失敗的地方慢慢找原因吧!!另外,批處理也有壞處,中間某個環節出問題了就會終止(因為你系統或者網絡的原因),但是也許你沒注意,認為執行結束了,那就會在編譯環節遇到各種各樣的問題,這些問題連萬能的google可能都沒有任何答案。當然,如果你的網絡連接美帝很慢,那就更慘了。
好了,言歸正傳,編譯之前請大家准備好環境:
1.阿里雲Ubuntu 14.04 64bit 1核4G內存,選擇美國的網絡,按流量收費,100M網絡:
美國的網絡你懂的,4G內存是webrtc編譯最低要求
2.提前執行apt-get update,確保源同步過程不出現錯誤
3. 添加新賬戶,並設置管理員權限
webrtc在源碼下載的過程中會識別是否root用戶,如果是root用戶會提醒錯誤。但是你不去理會似乎也能正常往下走,不過我為了保險還是使用了新賬戶。
sudo adduser xxx(你的用戶名)
sudo vi /etc/sudoers
找到“root ALL=(ALL) ALL”,在下面加一條:
# User privilege specification
root ALL=(ALL) ALL
xxx ALL=(ALL) ALL
重啟linux系統
4.安裝阿里雲未默認安裝的軟件(但webrtc認為你默認就有的環境)
sudo apt-get install git apache2 curl libcurl3 libcurl3-dev php5-curl
//重啟Apache
sudo /etc/init.d/apache2 restart
准備條件基本具備了,接下來就開始真正webrtc源碼下載和編譯了,其實就是按照google官網的指導 https://webrtc.org/native-code/android/ ,只是對其中容易搞錯的地方做了重點說明。
1.下載源碼
選擇一個目錄,我是選擇當前賬戶的根目錄( home/xxx(你的用戶名) )
//下載depot-tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
//設置環境變量
export PATH=`pwd`/depot_tools:"$PATH"
//選擇Android為目標
export GYP_DEFINES="OS=android"
//選擇版本分支
fetch --nohooks webrtc_android
//開始下載源碼
gclient sync
執行gclient sync開始下代碼后,不會一番風順:
1)首先會一直停留在“still on src”這樣一個提示上,可能需要40分鍾以上,不要着急,這是正常現象。
下列現象去年的版本會出現,但是17年9月的版本已經不會出現了,如果出現,可以按照下列方式操作
2)在源碼下載過程中會有一個Android SDK 軟件許可的提示,但是顯示不全,所以無法進行y/n選擇, 沒關系,你按回車鍵先讓它繼續往后走。如果你仔細看,回車后會有提示,大概意識是 google play severice 不是最新的,要你手動執行“src/build/android/play_services/update.py download”更新,你先不管
3)因為google play severice 不是最新的,下載到一大半會出錯,這個時候你執行 src/build/android/play_services/update.py download ,然后再執行gclient sync就能正常下載完了。
2.編譯apk
安裝JDK8
$ sudo apt-get install python-software-properties software-properties-common
$ sudo add-apt-repository ppa:openjdk-r/ppa $ sudo apt-get update $ sudo apt-get install openjdk-8-jre openjdk-8-jdk
將默認JDK環境切換到JDK8
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws sudo update-alternatives --config javap sudo update-alternatives --config jar sudo update-alternatives --config jarsigner
/*安裝編譯依賴軟件和環境,這個過程會安裝linux的基礎環境和Android的基礎環境*/ src/build/install-build-deps-android.sh
/*設置各種環境變量*/ /*進入src目錄,執行*/ . build/android/envsetup.sh
gn gen out/Debug --args='target_os="android" target_cpu="arm"'
You can specify a directory of your own choice instead of out/Debug
, to enable managing multiple configurations in parallel.
- To build for ARM64: use
target_cpu="arm64"
- To build for 32-bit x86: use
target_cpu="x86"
- To build for 64-bit x64: use
target_cpu="x64"
ninja -C out/Debug
***************************************老版本編譯方法**************************************
/*進入src目錄,執行*/ . build/android/envsetup.sh
export GYP_DEFINES="OS=android $GYP_DEFINES"
export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_android"
gclient runhooks ninja -C out/Debug AppRTCDemo
如果之前的操作步驟正確,編譯這一步是不會出什么問題的,順利編譯通過。在src/out/Debug/apks/目錄下能找到AppRTCDemo.apk
好了,編譯結束了