折腾了好多天,终于将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
好了,编译结束了