构建
- 环境搭建
为了方便编译,我选择的是购买腾讯云轻量应用服务器,价格35元/月,配置如下:
| 系统镜像 | 地域 | 配置 |
|---|---|---|
| Ubuntu 20.04.6 LTS | 美国硅谷 | CPU - 2核 内存 - 2GB 系统盘 - SSD 云硬盘 60GB |
git: 2.48.1
python: 3.8.10
- 安装depot_tools
- 下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- 配置环境变量
vim ~/.bashrc
export depot_tools=/home/ubuntu/depot_tools
export PATH=$depot_tools:$PATH
source ~/.bashrc
- 执行gclient
gclient
- 获取源码
- 下载Android源码
mkdir webrtc_android
cd webrtc_android
fetch --nohooks webrtc_android
- gclient同步
gclient sync
- 切换到最近的release分支
cd src
# 创建一个新的分支m125
# webrtc分支信息可在https://chromiumdash.appspot.com/branches上查看
git checkout -b m125 branch-heads/6422
gclient sync
- 使用gn生成项目
- 安装依赖
./build/install-build-deps.sh
- 生成项目
# arm
gn gen out/Debug --args='target_os="android" target_cpu="arm"'
# arm64
gn gen out/Debug --args='target_os="android" target_cpu="arm64"'
# x86
gn gen out/Debug --args='target_os="android" target_cpu="x86"'
# x64
gn gen out/Debug --args='target_os="android" target_cpu="x64"'
默认生成 debug 版本,release 版本,添加
is_debug=false参数
- 编译
ninja -C out/Debug
编译成功后,生成的关键产物为:
out/Debug/libjingle_peerconnection_so.so
out/Debug/lib.java/sdk/android/libwebrtc.jar
- 编译aar
#编译全平台架构(arm64-v8a、armeabi-v7a、x86、x86_64)
./tools_webrtc/android/build_aar.py
#编译 arm64-v8a架构
./tools_webrtc/android/build_aar.py --arch arm64-v8a
#编译 arm64-v8a、armeabi-v7a架构
./tools_webrtc/android/build_aar.py --arch arm64-v8a armeabi-v7a
可选参数列表及其描述:
--build-dir: 指定构建目录。如果未指定,脚本将创建并使用临时目录。
--output: 指定输出文件名,默认值为libwebrtc.aar。
--arch: 指定要构建的目标架构,默认值为['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']。
--use-goma: 使用Goma进行并行编译,默认值为False。
--use-remoteexec: 使用RBE(Remote Execution)进行远程编译,默认值为False。
--use-unstripped-libs: 在libwebrtc.aar中使用未剥离的.so文件,默认值为False。
--verbose: 开启调试日志记录,默认值为False。
--extra-gn-args: 在GN生成Ninja文件时传递额外的GN参数,这些参数会覆盖脚本定义的值。例如,构建调试模式的AAR文件可以使用--extra-gn-args='is_debug=true'。
--extra-ninja-switches: 在Ninja编译时传递额外的Ninja开关。例如,启用Ninja的详细输出可以使用--extra-ninja-switches='-v'。
--extra-gn-switches: 在GN生成Ninja文件时传递额外的GN开关。例如,启用GN的详细输出可以使用--extra-gn-switches='-v'。
这些参数允许用户根据需要调整构建过程,例如指定目标架构、是否使用并行编译、编译输出的详细程度等。
编译结果 libwebrtc.aar 默认位于src 目录下,是一个包含库文件的zip文件,包含了arm64-v8a、 armeabi-v7a、x86 和 x86_64 四种架构的 .so,该文件对应的目录结构如下:
- AndroidManifest.xml
- classes.jar
- jni/
- arm64-v8a/
- libjingle_peerconnection_so.so
- armeabi-v7a/
- libjingle_peerconnection_so.so
- x86/
- libjingle_peerconnection_so.so
- x86_64/
- libjingle_peerconnection_so.so
AppRTC Demo
- 在Android Studio中创建一个新的工程,从
webrtc_android/src/examples/androidapp目录中复制目录srcresAndroidManifest.xml到新建的工程 - 将
webrtc_android/src/examples/androidapp/third_party/autobanh/lib的autobanh.jar和生成的libwebrtc.aar放到新建的工程的app/libs目录 - 修改app/build.gradle文件,添加如下代码
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation(name: 'libwebrtc', ext: 'aar')
}
webrtc demo源码已经上传到github,地址:https://github.com/kongpf8848/webrtc_demo
参考资源
- webrtc官方源码 - https://webrtc.googlesource.com/src.git
- webrtc官方编译指南 - https://webrtc.github.io/webrtc-org/native-code
- webrtc分支信息 - https://chromiumdash.appspot.com/branches
- depot_tools - https://chromium.googlesource.com/chromium/tools/depot_tools.git
- WebRTC学习指南 - https://webrtc.mthli.com











网友评论