開篇第一句,我覺得是最最重要的:
注意: WebRtc 源碼的編譯基礎工作: X X! 一定要在命令行, 讓Git Svn 等命令訪問到google的服務器,否則會出現各種異常
參考:
https://groups.google.com/forum/#!forum/discuss-webrtc
等網站
我的環境是 ArchLinux X64,
翻牆的方法:
1.各種VPN
2.修改hosts
3.各種代理服務器
...
使用到的軟件包
jdk 1.6 ( jdk1.7 無法編譯), svn, git
環境變量:
// /etc/profile
# java
export JAVA_HOME=/opt/jdk
export JRE_HOME=${JAVA_HOME}/jre
export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin
export CLASSPATH=./:${JAVA_HOME}/lib:${JRE_HOME}/lib
# android
export ANDROID_SDK_ROOT=/opt/android-sdk
export ANDROID_NDK_ROOT=/opt/android-ndk
export PATH=$PATH:${ANDROID_SDK_ROOT}:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_NDK_ROOT}
# ant
export ANT_HOME=/opt/apache-ant
export PATH=$PATH:${ANT_HOME}/bin
export SVN_EDITOR=vim
export classpath=./:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
//////
$ cd /opt
$ mkdir depot_tools
$ cd depot_tools
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
並將 depot_tools 加入 $PATH
export PATH=$PATH:/opt/depot_tools, 加到 /etc/profile 中, 省得每次都輸入
下載代碼
1.同步WebRTC代碼
1.創建WebRTC目錄
mkdir WebRTC
cd WebRTC
2.初始化gclient
gclient config https://webrtc.googlecode.com/svn/trunk
3. 目標系統的配置
echo "target_os = ['android', 'unix']" >> .gclient
gclient sync --force
同步過程中發現有錯誤,仔細查看,找出錯的地方,
我使用中是翻牆失敗,無法直接訪問服務器., 得出開篇第一段話.
( 煎熬的一步,裏面包括NDK、SDK等其他tools , 開始後,可以去 ... ... )
注意,若長時間出現 Still working on等信息,請不要中斷或者關閉,它依然在運行,如果你這裏中斷了,那麼之前下載的東西會全部刪除,然後又得重新sync一遍
3). 編譯代碼
1.設置編譯環境
1. cd trunk
2. source ./build/android/envsetup.sh
3.export GYP_DEFINES="$GYP_DEFINES OS=android"
2. 下載編譯所依賴的包或工具,(這裏又會下載一大堆東西 如 Ant.)
// ./build/install-build-deps.sh (trunk目錄下, 這個在Ubuntu 下的編譯依賴包直接安裝. Ubuntu 都成事實標準了)
// 其它的Linux 看一下這個文件裏的包,手動安裝吧.
// 我用的ArchLinux 大多數的包都已經安裝. 我少了ncurses包, pacman 手動安裝.
3. gclient runhooks (生成ninja android的編譯文件.ninja files)
4. 編譯 ( trunk目錄下 )
編譯Debug版: ninja -C out/Debug
開始我編譯出錯, 發現自己使用的jdk 1.7 ,改1.6 重新編譯
ninja -C out/Debug -t clean
基於以上步驟,如果網絡能正常訪問google服務的話,一般都不會出現其他的問題,如果真碰到了問題,不要怕,一般根據錯誤信息就可以知道相應的原因。細看出錯信息,一定能找出問題. 再不知道的google一下.
編譯成功之後 在 out/Debug 或者 out/Release目錄下看到相應的demo安裝包 如Debug目錄下,其中就有 AppRTCDemo-debug.apk 和 WebRTCDemo-debug.apk
這兩個包簽名一下,就可以安裝到Android 設備中了.
編譯後使用libjingle_peerconnection_so.so
debug下的libjingle_peerconnection_so.so 非常大76M,
android libs 中的只有4.xM
使用 arm-linux-androideabi-strip Removes symbols and sections from files
移除無關信息方法:
$ANDROID_NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip -o libjingle_peerconnection_so.so out/Debug/libjingle_peerconnection_so.so
AppRTCDemo程序的代碼就再 trunk/talk/examples/android/ 目錄下
注意,AppRTCDemo 與 WebRTCDemo的區別
WebRTCDemo只是局域網內的點對點,知道對方的ip就可以對打, 不需要服務器, 互設對方的ip 地址即可 startCall
AppTRCDemo是需要服務器的,訪問google GAE的服務器.
我編譯中,還出現找不到 libtinfo.so.5
error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
即缺少libtinfo.so.5解決辦法
解決方法:
安裝 ncurses包(ncurses-libs-5.6)
ln -s /usr/lib/libncurses.so.5 /lib/libtinfo.so.5
安裝如下工具 ( sudo pacman -S ..)
g++ (>= 4.2)
python (>= 2.4)
libnss3-dev >= 3.12
libasound2-dev
libpulse-dev
libjpeg62-dev
libxv-dev
libgtk2.0-dev
libexpat1-dev
For 32-bit builds on a 64-bit system:
lib32asound2-dev
ia32-libs