Webrtc入门——基于阿里云ubuntu 最新webrtc Android平台编译详细说明
折腾了好多天,终于将webrtc Android平台的demo编译出来了,发现即使完全按照webrtc官网的编译指南,还是会碰到各种问题。而网上又没有更全面的说明,最后是通过查看webrtc 批处理脚本才最终一步步解决问题。写下这篇文章,希望对大家有帮助。
在编译的过程中,感觉webrtc编译实在是太难了, 但是完成了编译之后,感觉webrtc编译其实是很简单的,造成这个强烈反差的主要原因是,google工程师将几乎所有编译过程中需要使用的软件、依赖配置、环境变量,都已经写成了脚本,你只要运行就可以了。什么JDK、SDK安装、配置、环境变量设置统统不需要,怎样,简单吧,运行几个命令就搞定了!!等等,别高兴太早,我前面说的是几乎,不是全部,比如在命令行条件下用url下载资源的curl及其依赖的一票软件,人家google认为是基础软件,不需要给你安装,但是万一你没有安装呢,那就在下载源码失败的地方慢慢找原因吧!!另外,批处理也有坏处,中间某个环节出问题了就会终止(因为你系统或者网络的原因),但是也许你没注意,认为执行结束了,那就会在编译环节遇到各种各样的问题,这些问题连万能的google可能都没有任何答案。当然,如果你的网络连接美帝很慢,那就更惨了。
好了,言归正传,编译之前请大家准备好环境:
1.阿里云Ubuntu 12.04 64bit 1核4G内存,选择美国的网络,按流量收费,100M网络:
美国的网络你懂的,4G内存是webrtc编译最低要求
2.提前执行apt-get update,确保源同步过程不出现错误
一开始用Ubuntu 14.04在apt-get update的时候出现源同步错误,导致webrtc相关批处理运行中途异常停止,折腾了不少时间才发现是apt-get update的问题,但是试了很多方法都不行,最后用Ubuntu 12.04就没问题了。
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分钟以上,不要着急,这是正常现象。
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
/*安装编译依赖软件和环境,这个过程会安装linux的基础环境和Android的基础环境,包括JDK 1.7版本*/ src/build/install-build-deps-android.sh /*如果你的系统中之前还安装了其他版本的jdk,需要使用以下命令将默认的环境切换到openJDK1.7*/ sudo update-alternatives --config javac sudo update-alternatives --config java sudo update-alternatives --config javaws sudo update-alternatives --config javap sudo update-alternatives --config jar sudo update-alternatives --config jarsigner /*设置各种环境变量*/ /*进入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
好了,编译结束了