如何在 Ubuntu 25.04 中为 Android 构建 WebRTC

Google 曾提供 libWebRTC 库的预编译 Android 镜像,事实上,其官方文档至今仍推荐这种使用方式。但自 WebRTC M80 版本(2020年1月)起,他们决定弃用二进制移动端库。原因在于这些构建版本仅用于开发目的,用户早已开始自行定制构建,或使用内置该库的第三方库(那么只想构建WebRTC移动应用的开发者该何去何从?)。仅在 2020 年 8 月(1.0.32006版)为修补关键安全漏洞提供过一次更新,以防仍有用户(所有人?)在使用二进制移动库。

编者注:原始版本适用于 2021 年 4 月 23 日的 Ubuntu 21.04。内容已更新,以反映 2023 年 2 月 27 日的 Ubuntu 22.04 构建过程中的最新变化,以及 2025 年 9 月 16 日的 Ubuntu 25.04 构建过程中的最新变化。

此外,虽然这些二进制库原本可通过 Maven 使用,但 Bintray 平台已于 2021 年 5 月 1 日停止服务,且自 2022 年 2 月 1 日起完全不可用,因此使用 Maven 本身时无法获取二进制移动库。

鉴于上述双重问题(既无新版本库可用,现有版本未来可用性亦存疑),且未能找到其他在线二进制库提供商,最佳方案似乎是牺牲部分硬盘空间(约16GB,需下载全部Chrome源代码及构建环境工具)自行编译。用于生成二进制移动库 .aar 文件的自动化构建脚本已公开,并附有自行构建的说明,这相较于手动编译库具有巨大优势。但在实际使用过程中,我发现该说明在 Ubuntu 25.04 及更高版本上存在执行问题与错误,现提供修正后的说明及补充说明:

1. 创建一个新的工作文件夹。这看似显而易见,但若不这样做,最终会把你的 $HOME 目录塞满垃圾文件(我是菜鸟)。也许在 Google 组织内部,把工具和一个大src/文件夹放在那里来存放所有公司项目是合理的……

mkdir webrtc_android
cd webrtc_android

2. 下载 Chromium 的depot_tools并导出它们:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:$PWD/depot_tools

3. 安装 Python 命令。depot_tools 需要使用 Python 可执行文件,因为它兼容 Python 2 和 3。在 Ubuntu 25.04 中,该命令不可用,因为它传统上与现已弃用的 Python 2 相关联,而为了区分两者,系统使用了 python3 可执行文件。因此在全新安装环境中,depot_tools 会因找不到命令而失败。为解决此问题,可安装 python-is-python3 包:

sudo apt install python-is-python3

我需要确认未来 Ubuntu 版本是否仍需此项,但目前保留它并无妨。

4. 安装 snap。我讨厌它(我是老派,APT的拥趸),但如今 Chromium 构建工具都依赖 bazel,而它至少在近期版本中仅以 snap 包形式提供。我日后需要重新评估此事,但眼下只需安装它:

sudo apt install snap

5. 配置 Git 凭据。此前无需此操作,但现在访问 Chromium 源代码需要使用 Google 账户进行身份验证。请访问 https://webrtc.googlesource.com/new-password 并使用您的 Google 账户进行身份验证。系统将生成一个小型脚本,您需要在终端中执行该脚本,它会在您的 $HOME 文件夹中生成包含所需凭据的 .gitcookies 文件。生成的脚本示例如下:

eval 'set +o history' 2>/dev/null || setopt HIST_IGNORE_SPACE 2>/dev/null
touch ~/.gitcookies
chmod 0600 ~/.gitcookies

git config --global http.cookiefile ~/.gitcookies

tr , \\t <<\__END__ >>~/.gitcookies
webrtc.googlesource.com,FALSE,/,TRUE,2147483647,o,git-jesus.leganes.combarro.gmail.com=1//<long-string-with-access-token>
webrtc-review.googlesource.com,FALSE,/,TRUE,2147483647,o,git-jesus.leganes.combarro.gmail.com=1//<long-string-with-access-token>
__END__
eval 'set -o history' 2>/dev/null || unsetopt HIST_IGNORE_SPACE 2>/dev/null

6. 使用 depot_tools 获取构建环境工具和 Chromium 源代码,并将cd其放入其中。这将执行 16GB 的代码检出并编译工具,整个过程将耗时极长。以我的环境为例:300Mbps 网络、8 核 CPU 和 32GB 内存,耗时 40 分钟:

fetch --nohooks webrtc_android
gclient sync
cd src

7. 更新所有系统依赖项。这应该不是必需的,但事实上,在 Ubuntu 22.04 的 Slate 安装中,构建库失败了。将系统更新到最新软件包后,一切正常。因此,为了以防万一,请执行以下命令:

apt update
apt upgrade
apt dist-upgrade

8. 安装构建依赖项。这将再次下载更多依赖项,在本例中是系统范围的构建工具。其中一个是 Python 2,因此之前安装的python-is-python3软件包将被删除:

./build/install-build-deps.sh

如果您使用的不是 Ubuntu LTS 版本,则可能需要使用--unsupported标志来绕过版本检查并安装依赖项,但此方法对我无效。具体效果因人而异。

9. 选择要构建的版本。在 WebRTC M80 发布之前,每个 Chromium 版本都有分支,因此很容易知道每个版本与哪个版本匹配,但在此之后,Google 开始每天创建分支。

此外,一段时间后,他们不再使用常规分支头(在.git/refs/heads文件夹中引用),而是使用自己的branch-heads 引用,这可能是为了保持公开整洁,或者强制开发人员使用main分支中的最新代码。使用当前main分支或master分支当前内容(两者同步且始终指向相同提交)完全可行,但如果您想构建特定版本或每日分支的精确库副本,则需要恢复它们。为此,我们需要配置 refspec来获取branch-heads引用……

git config --add remote.origin.fetch \
   '+refs/branch-heads/*:refs/remotes/origin/branch-heads/*'

…并更新本地引用:

git remote update

您可以在 Chromium 数据网站上搜索所需的里程碑,并将其与WebRTC列匹配以查找每日分支编号。例如,要构建libWebrtc最新稳定版 Chrome 140(内部版本号7339)使用的库版本,您只需将其更改为branch-heads/7339

git checkout branch-heads/7339

此外,若需切换至其他每日构建分支,可通过执行 git branch -r 查看所有可用分支。截至2025-09-16,最新分支为7418。

一旦切换到所需的每日构建分支,需要重置并同步仓库代码,同时重新下载更多依赖项和代码。这似乎是必要的,因为之前在main分支时使用gclient可能留下了一些临时文件(或许我们本应提前切换分支?),导致构建失败,通过这种方式可确保使用正确版本:

gclient revert
gclient sync

10. 最后,编译AAR文件。这将为所有 Android 原生支持平台(arm64-v8a、armeabi-v7a、x86和x86_64)编译 libWebrtc 库,并将它们打包到 src 文件夹根目录下的 libwebrtc.aar 文件中。该文件可作为本地依赖项用于我们的 Android 项目,或发布到我们自己的 Maven 仓库:

11. 一旦我们构建了库,要更新代码并构建新版本,只需运行 git remote update 获取新的每日构建分支,然后重新编译即可。若遇到问题,请重复步骤 6 和 7,重新完整下载构建工具和依赖项,并再次进行编译。

理想情况下,所有这些步骤都可实现自动化并在夜间运行,从而在Maven中创建指向这些自动化构建的新引用。Github Actions 能很好地完成这项任务,将夜间构建存储为项目发布版本或 Github Packages Maven仓库。但Github Actions每月仅提供2000分钟(每天略多于1小时), 因此若无缓存机制,夜间构建将难以持续运行。目前不同里程碑的原始 JSON 信息可查阅:https://chromiumdash.appspot.com/fetch_milestones。

额外更新:将库添加为依赖项

一个我之前未曾涉及的重要话题:如何使用编译后的 .aar 文件。Android文档详细介绍了如何在Android Studio中创建并使用库作为依赖项,但针对我们的使用场景,关键步骤如下:

1. 添加libwebrtc.aar文件:

  • 单击 File > New > New Module.
  • 单击导入 .JAR/.AAR Package, 然后单击下一步.
  • 输入 libwebrtc.aar 文件的位置,然后单击“完成”。

Android Studio 会创建一个模块目录,将 libwebrtc.aar 文件复制到该模块中,并为其生成一个 build.gradle 文件,内容如下:

configurations.maybeCreate("default")
artifacts.add("default", file('libwebrtc.aar'))

2. 请确保 libwebrtc 库位于 settings.gradle 文件的最顶端,如下所示:

include ':app', ':libwebrtc'

3. 打开应用程序模块的 build.gradle 文件,并在 dependencies 块中为 libwebrtc 库添加新行,如下所示:

dependencies {
   implementation project(":libwebrtc")
}

如果存在对 Maven 注册库中旧版 libwebrtc 库的引用,也请将其移除。

4. 点击“Sync Project with Gradle Files”。

从现在起,后续项目构建将使用您构建的 libwebrtc/libwebrtc.aar 文件,而非Maven提供的过时版本。

原文:https://piranna.github.io//2025/09/16/How-to-build-WebRTC-for-Android-in-Ubuntu-25.04/

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/61886.html

(0)

相关推荐

发表回复

登录后才能评论