2、移动端环境搭建:Android Studio配置、iOS Xcode配置、WebRTC源码编译
说实话,移动端开发最磨人的不是写代码,而是搭环境。尤其是WebRTC这种底层库,编译一次能让你怀疑人生。我当年第一次编译WebRTC源码,整整折腾了两天——嗯,后来发现是代理没配好。
这一章,咱们就把Android和iOS两边的环境彻底搞定。你跟着我的步骤走,应该能少踩不少坑。
2.1 Android Studio 配置
Android Studio 的安装我就不啰嗦了,直接说关键点。
2.1.1 必备组件
我个人习惯用最新稳定版的Android Studio。但要注意,WebRTC对NDK版本有要求,不是越新越好。
| 组件 | 推荐版本 | 备注 |
|---|---|---|
| Android Studio | 2023.1.1 (Hedgehog) 或更新 | 稳定版即可 |
| Gradle | 8.2+ | 与AGP版本匹配 |
| NDK | r25c 或 r26b | 我用r25c踩坑最少 |
| CMake | 3.22.1+ | SDK Manager里装 |
2.1.2 SDK Manager 配置
打开SDK Manager,确保以下SDK Platform已安装:
- Android API 34(最新稳定版)
- Android API 33(兼容性测试用)
- Android API 21(最低支持版本)
你想想看,如果只装最新版,老设备跑不了;如果只装老版本,新特性用不上。所以我的建议是:装三个版本,覆盖主流范围。
2.1.3 Gradle 配置优化
WebRTC的Android工程比较大,Gradle配置需要调一下。不然编译能把你电脑卡死。
// gradle.properties
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m
org.gradle.parallel=true
org.gradle.caching=true
android.useAndroidX=true
android.enableJetifier=true
2.2 iOS Xcode 配置
iOS这边相对简单,但坑也不少。尤其是WebRTC的iOS编译,对Xcode版本很敏感。
2.2.1 Xcode 版本选择
我个人建议用Xcode 15.0或15.1。为什么?因为WebRTC官方CI用的就是这个版本,兼容性最好。
| Xcode版本 | macOS要求 | WebRTC兼容性 |
|---|---|---|
| 15.0 | Sonoma 14.0+ | ✅ 官方推荐 |
| 14.3 | Ventura 13.3+ | ✅ 可用,但需打补丁 |
| 13.x | Monterey 12.x | ⚠️ 部分API已废弃 |
2.2.2 Command Line Tools
这个很多人会忘。Xcode装完不代表命令行工具也装好了。
xcode-select --install
# 验证安装
xcode-select -p
# 输出应该是:/Applications/Xcode.app/Contents/Developer
我曾经有一次编译WebRTC的iOS版本,死活报找不到SDK。折腾了半天,发现是Command Line Tools指向了旧版Xcode。嗯,这种低级错误犯一次就够了。
2.2.3 CocoaPods 配置
WebRTC的iOS依赖管理用CocoaPods。但要注意,不要用系统自带的Ruby装,容易权限出问题。
# 用Homebrew装Ruby
brew install ruby
# 然后装CocoaPods
sudo gem install cocoapods
# 验证
pod --version
2.3 WebRTC 源码编译
终于到了重头戏。WebRTC源码编译,说白了就是两件事:拉代码、跑脚本。但这两件事里藏着无数细节。
2.3.1 depot_tools 安装
WebRTC用Google的depot_tools管理代码。这东西是编译的第一步,也是很多人翻车的地方。
# 克隆depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 加到PATH
export PATH=$PWD/depot_tools:$PATH
# 建议写到~/.zshrc或~/.bash_profile
echo 'export PATH=$PATH:/path/to/depot_tools' >> ~/.zshrc
2.3.2 拉取WebRTC源码
这一步最耗时。WebRTC源码加上git历史,大概10GB左右。网速慢的话,建议晚上挂着下载。
# 创建目录
mkdir webrtc && cd webrtc
# 拉取源码
fetch --nohooks webrtc
# 同步依赖
gclient sync
为什么会这么慢?因为WebRTC依赖了上百个第三方库,每个都要单独拉取。我记得第一次跑gclient sync,等了整整三个小时。
2.3.3 Android 编译
Android编译需要先配置NDK路径。WebRTC的编译脚本会自动检测,但有时候会抽风。
# 进入src目录
cd src
# 生成Android编译配置
gn gen out/android --args='target_os="android" target_cpu="arm64"'
# 开始编译
ninja -C out/android
| 参数 | 说明 | 常用值 |
|---|---|---|
| target_cpu | 目标CPU架构 | arm64, arm, x64, x86 |
| is_debug | 是否调试版本 | true/false |
| is_component_build | 是否组件化编译 | false(推荐) |
gn gen out/android_release --args='target_os="android" target_cpu="arm64" is_debug=false'
2.3.4 iOS 编译
iOS编译比Android简单一些,但要注意架构选择。
# 生成iOS编译配置
gn gen out/ios --args='target_os="ios" target_cpu="arm64"'
# 编译
ninja -C out/ios
如果你需要模拟器版本,把target_cpu改成x64:
gn gen out/ios_sim --args='target_os="ios" target_cpu="x64"'
2.3.5 编译产物说明
编译完成后,你会得到以下关键文件:
- Android: out/android/libwebrtc.aar(Android Archive包)
- iOS: out/ios/libwebrtc.a(静态库) + out/ios/WebRTC.framework(Framework包)
- 头文件: out/android/gen/sdk/android/peerconnection_jni.h 等
2.4 环境验证
环境搭好了,怎么知道对不对?写个简单的Demo跑一下。
2.4.1 Android Demo
// 在MainActivity里加一段
PeerConnectionFactory.InitializationOptions initOptions =
PeerConnectionFactory.InitializationOptions.builder(this)
.setFieldTrials("")
.create();
PeerConnectionFactory.initialize(initOptions);
PeerConnectionFactory factory = PeerConnectionFactory.builder()
.createPeerConnectionFactory();
Log.d("WebRTC", "Factory created: " + (factory != null));
2.4.2 iOS Demo
// 在ViewController里
#import <WebRTC/WebRTC.h>
RTCPeerConnectionFactory *factory = [[RTCPeerConnectionFactory alloc] init];
NSLog(@"WebRTC factory: %@", factory ? @"✅" : @"❌");
如果控制台打印出✅,恭喜你,环境搭好了。如果报错,别慌——八成是NDK版本或Xcode版本的问题。回去检查一下。
2.5 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你对照着看,心里就有谱了。
这张图里,Android和iOS是两条独立路线,最终都汇聚到WebRTC编译。你只要把左边和中间搞定,右边就是水到渠成的事。
好了,环境搭完,咱们就可以开始写真正的WebRTC代码了。下一章,我会带你从零搭建一个P2P视频通话Demo——嗯,那才是真正有意思的部分。
公众号:蓝海资料掘金营,微信deep3321