Ubuntu18.04 从头开始编译 Android Native WebRTC

本文详细记录Mac下使用PD虚拟机安装ubuntu18.4桌面版,编译Android Native WebRTC的过程。

注意如果仅仅是使用WebRTC没必要手动编译源码,直接用官方提供的预编译包即可:

The easiest way to get started is using the official prebuilt libraries available at JCenter. These libraries are compiled from the tip-of-tree and are meant for development purposes only.
On Android Studio 3 add to your dependencies:

On Android Studio 2 add to your dependencies:

The version of the library is 1.0… The hash of the commit can be found in the .pom-file. The third party licenses can be found in the THIRD_PARTY_LICENSES.md file next to the .aar-file.

只有需要研究和修改源代码时才有必要下载代码并自己编译。

按照官网的教程WebRTC源码编译看似简单,但坑很多,尤其是为了能连上谷歌配置代理就要折腾很久,而且虚拟机本身也不省心。

为此新创建了一个虚拟机从头开始配置,因为之前折腾的东西可能没有全部记住,当时也没有记录,从头开始保证一个命令都不差地记录下来。当然,这里使用的每一个环节的软件和系统发生变化都会导致不一致的配置过程,仅供参考。

安装配置Ubuntu虚拟机

Ubuntu下载地址:
http://releases.ubuntu.com/18.04/ubuntu-18.04-desktop-amd64.iso

详细安装步骤:

1.安装选择镜像方式,不要选择下面的下载Ubuntu,很慢

Ubuntu18.04 从头开始编译 Android Native WebRTC
3.选择下载好的iso文件
Ubuntu18.04 从头开始编译 Android Native WebRTC
5.设置用户名密码
Ubuntu18.04 从头开始编译 Android Native WebRTC
7.创建中,这里等了大概一个小时
Ubuntu18.04 从头开始编译 Android Native WebRTC
Ubuntu18.04 从头开始编译 Android Native WebRTC
3.安装完成后直接重启
重启后分辨率自动调到最大,可以与mac共享剪贴板了。此时虚拟机文件仅仅7G左右。我又创建了个快照变成8G了。。。

下载WebRTC代码

修改 Ubuntu 源

推荐使用清华大学开源软件镜像站
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

  • 备份原生source.list sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  • 修改替换为清华镜像版本,推荐使用gedit:sudo gedit /etc/apt/sources.list
  • 执行 sudo apt update

配置代理

这里使用环境变量配置 http proxy 的方法。后面还有个坑,需要结合代码下载步骤说明。

使用主机sockes提供的http代理。虚拟机网络模式使用默认的共享网络。在PD的偏好设置里可以找到网络设置,可以查看共享网络地址段:10.211.55.1~254,主机是第一个节点因此IP是10.211.55.2。

Ubuntu18.04 从头开始编译 Android Native WebRTC
设置ss的http代理地址
最后设置ubuntu的环境变量。

下载代码之前安装了一些常用软件
sudo apt install curl vim net-tools

下载代码

命令清单
官方文档:https://webrtc.org/native-code/android/
总结一下,执行以下步骤和命令:

下载第一步:fetch

fetch的步骤会下载16G的代码和开发环境,会持续很长时间取决于网速。好在每十秒钟会有一次打印,提醒你仍在下载不是卡死了。

Ubuntu18.04 从头开始编译 Android Native WebRTC
fetch完成的画面

设置 gclient 代理

gclient sync 的步骤需要另一种代理设置:
参考这篇文章 WebRTC在iOS端的实现/WebRTC在iOS端的实现

主要是设置一个.boto文件,总结为上面清单里的两条命令:

经过实际应用,并不需要unset掉环境变量,反而运行gclient runhooks时仍然需要环境变量,只要设置好NO_AUTH_BOTO_CONFIG就可以了。

下载第二步:gclient

这个步骤相比第一步很快就会完成,主要耗时在一些文件下载上。之后更新代码执行 gclient sync 即可。

编译打包

安装必要的软件和包

参考官网:Prerequisite Software >> Install additional build dependencies

工具

WebRTC项目使用了大量的第三方开源项目,代码庞大复杂,整个构建系统采用了gn gn官方文档 和ninja ninja官方文档。

GN

gn命令处理的是名称为 BUILD.gn 的文件,BUILD.gn 文件中可以定义若干参数,这些参数使 gn 命令执行时可以通过不同的参数值创建不同的编译配置。例如WebRTC的目标系统是在android上还是ios上。

gn使用文件目录层次来组织不同的编译目标,这是非常自然合理的。查看 WebRTC 的目录结构可以发现每个文件夹下面都对应着一个 BUILD.gn 的文件,含有 BUILD.gn 文件表示这个目录下是有编译目标的,这些编译目标可以依赖子目录的编译目标从而组成一套复杂而有序的构建图。

NINJA

gn的输出就是扩展名为 .ninja 的文件,这些文件保存在编译目录中,可以被 ninja 命令直接使用,ninja文件中的指令都是简单和明确的,不需要任何额外的逻辑判断和计算,这使得ninja具有小而快的特点,也是ninja本身的设计初衷。

编译所有目标

官网上的编译打包命令:

总共会有八千多个构建目标,大约会执行一个小时以上。

编译 example app

最后生成的apk位于out/Debug/apks/AppRTCMobile.apk
参考官方文档:https://webrtc.googlesource.com/src/+/master/examples/androidapp/README

打包 aar 文件

WebRTC提供了一个脚本工具可以直接构建一个安卓 aar 的文件,我们直接用这个就可以了。

–build-dir out指定输出目录,如果不指定会在系统临时目录下创建
–arch “armeabi-v7a” “arm64-v8a” 指定两种cpu架构,相当于gn命令中的target_cpu=”arm”和target_cpu=“arm64”。对每一种cpu架构会创建一个编译目录,依次执行gn和ninja命令。

最后将生成的jar和so打包成了aar文件,aar文件位于webrtc_android/src/libwebrtc.aar

编好了 aar 文件后,可以拷贝到 mac 下使用了,在 Android Studio 中可以替换预编译的 dependency

implementation ‘org.webrtc:google-webrtc:1.0.+’
如何替换可以参考安卓官方文档:https://developer.android.com/studio/projects/android-library#AddDependency

Android Studio

不推荐使用官网提供的方法

Ubuntu18.04 从头开始编译 Android Native WebRTC

原创作者:无猫皆笼,原文链接:https://www.jianshu.com/p/e0239bb43f48

Ubuntu18.04 从头开始编译 Android Native WebRTC
欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升?职场突围?思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长。

来源:码农突围

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月17日
下一篇 2020年2月17日

相关推荐