MAC+Ubuntu虚拟机 WebRTC for Android
写在开始
Google大神的WebRtc编译实在是太痛苦了,笔者花了两天一夜才编译完成,其实编译流程本身并不复制,事实上比ffmpeg的编译还简单,整个过程都有写好的脚本及工具支持,甚至不需要自己写一段脚本,但是!!!webrtc的工程有TM 16个G(大小不定,笔者第一次下载的是25个G,后面编崩溃了,删除重来),历经千幸万苦,最后编译成功了,再次笔者把自己的踩过的坑以及心德和大家分享下,希望来者可以避开这些坑,轻松编译WebRtc
注意事项
笔者编译过两次。第一次使用的是Ubuntu 14.04 LTS 64位系统进行编译,没有成功,笔者认为可能是两个地方的问题,
1.一些依赖库没有安装到,更新了很多源都安装不上,包括阿里,网易,搜狐,清华,官方源,都没装上。
2.笔者第一次clone是在MAC上进行的,clone完成后执行过一些脚本,笔者认为可能是系统环境影响,导致下载下来的clang clang++都是MAC OS的,所以把工程放入Linux 64下,编译会报错。如下所示:
../../third_party/llvm-build/Release+Asserts/bin/clang++: xxxxxx not found (required by ../../third_party/llvm-build/Release+Asserts/bin/clang++)
汲取了以上的教训,笔者第二次编译使用了Ubuntu 16.04 LTS DeskTop 64位镜像,在虚拟机内下载WebRTC源码。并且默认使用官方源(请不要修改源,网上说的清华源靠谱,并不是!!!)
流程
虚拟机搭建->编译环境搭建->获取源码->设置编译环境->下载依赖库->编译->成功
1.虚拟机环境搭建
笔者用的是MAC+VirtualBox的方式搭建编译环境的,这一步不用多说,安装VirtualBox,下载Ubuntu 16.04 LTS镜像,设置VirtualBox(最好是打开文件夹共享功能,需要安装增强功能软件,步骤如下:)
Host: Device->Install Guest Additions
虚拟机内会弹出截图,点击安装即可:
虚拟机安装完成后,下载JDK并安装,笔者安装的是64位JDK 1.8.171,切勿下载rpm格式,ubuntu不支持rpm安装。在Oracle官网下载:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载完成后配置JDK环境:
sudo gedit /etc/profile
在文件的最后添加以下内容:
#set Java environment
#your path 是你的jdk路径
export JAVA_HOME= your path/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
安装完成后,可以执行命令:
source /etc/profile
在命令窗口执行java -version命令测试是否安装成功
2.编译环境搭建
这一步需要访问Google的代码仓库,所以你懂的,需要利器支持,笔者使用的是在APP Store下载的VPN Plus,完全免费不说,速度贼快(用过最好的利器,一万个赞)。
有了梯子之后,就可以进行安装了,首先在ubuntu里安装
sudo apt-get install git
安装完成后,开始安装google的源代码管理利器,depot-tools:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
clone完成后,开始配置环境变量:
sudo gedit /etc/profile
# 针对每个用户 # 在最后添加下面语句 your path为depot_tools位置
export PATH=$PATH:your path/depot_tools
配置完成后,使配置生效:
source /etc/profile
#重启全局生效,否则只针对该bash有效
验证是否有些,在命令窗口输入:
which gn
# 如果正常打印出gn命令路径,说明成功
3.获取源码
这一步完成后,开始最为艰辛和漫长的代码同步了,webrtc for Android有16个G,还需要有梯子帮助,笔者下载了一晚上,恶心到吐。具体步骤如下:
创建文件夹webrtc:
mkdir webrtc
cd webrtc
开始下载代码:
# 选择android 分支版本
fetch --nohooks webrtc_android
这一步完成之后,开始clone代码到本地(如果重复执行上一步命令,depot-tools会提示已经配置过版本信息),如下图:
执行代码同步命令:
# 同步代码
gclient sync
然后就是漫长的等待了,非常漫长。其中有一些库比较难下载,特别是android-tools和android ndk大概会有8个G作用,下载过程中会出现中断,或者错误的情况再重复执行上一步操作即可,其中下载等待界面,如下图:
经过漫长的等待和各种失败重试之后,下载完成。会出现如下界面代表(终于TM下完了!!!):
出现这个画面,恭喜你的的代码下载完成了。这个时候depot-tools会自动执行一次gclient runhooks下载一些编译环境需要的代码和资源文件,只有耐心等待就好了,很快很快(相比之前)。
当这个过程也执行完成后,会出现是否同意协议的命令行,键入Y。然后回车:
回车之后,Running hooks执行完成,我们就可以开始配置编译环境了。
4.设置编译环境
首先需要设置的是编译的目标平台,这个步骤需要在src目录下,然后设置编译环境:
cd src/
source ./build/android/envsetup.sh
然后设置编译工具和目标平台
export GYP_DEFINES="$GYP_DEFINES OS=android"
export GYP_GENERATORS=ninja
5.下载依赖库
第一步执行apt-get update,可能会出现一个问题,Problem executing scripts APT:Update::Post-Invoke xxxxxx,return an error code
遇到这样的问题,只需要执行一个命令即可:
sudo apt-get purge libappstream3
然后开始执行下载,这一步我们不需要写任何脚本文件,因为webrtc已经为我们写好了,只需要执行就好(还是在src目录下),首先执行这个命令,apt-get会开始下载一些依赖库(请使用默认源,不要去更改源):
sudo ./build/install-build-deps.sh
中途可能会出现一些问题,比如让你选择是否安装,左右键选择OK,安装就行了,最为主要的是下载到最后会安装一个叫Chrome OS Fronts的玩意儿,一直下载不动。笔者goolge之后发现这玩意儿根本就不需要,所以直接忽略就好 CTL+C:
这一步执行完成之后,我们就可以执行Android环境相关库的下载了,同样在src目录下,执行:
sudo ./build/install-build-deps-android.sh
下载过程中会删除一些依赖和清除一些库,然后下载一些新库,大部分库在上一步已经下载完毕了,这一步很快:
这一步也完成之后,我们就可以开始编译工作了。
6.编译
首先返回到src的上级目录(假如我们在src目录下),下载编译所需的build文件等信息:
$ cd ..
$ gclient runhooks --force
然后再次进入src目录,生成ninja项目文件:
$ gn gen out/Debug --args='target_os="android" target_cpu="arm"' // 生成debug版ninja项目文件
这个是debug模式,如果需要编译release模式的话,cmd键入:
$ gn gen out/Release --args='target_os="android" target_cpu="arm" is_debug=false' // 生成release版ninja项目文件
完成之后如下所示:
这一步也完成之后,我们就可以开始编译了:
$ ninja -C out/Debug
如果没什么问题的话,就会出现如下开始编译的过程,等待大约40-60分钟就能编译完成:
编译后的jar,静态库,动态库,apk demo等都放在out/Debug目录下面:
如果到了这一步,恭喜小伙伴,webrtc for Android 成功了,今天的经验就到这儿了.希望能帮到各位小伙伴。