在 MacOS 上编译安卓版本 WebRTC
按照WebRTC 官方的编译指导,安卓版本的 WebRTC 只支持在 Ubuntu 中编译。在 Ubuntu 上编译安卓的 WebRTC 代码,可能会比较繁琐,之前都是安装虚拟机,改代码特别不方便。为了简化编译过程,可以将编译环境迁移到 macOS 上,并进行适当的修改以适应 M1 或 x86 架构。
1. 代码准备
首先,准备好两份代码,网上介绍比较多,不是本文重点,不做介绍:
1
2
fetch webrtc_android
fetch webrtc_ios
整个移植的思路是这样:
WebRTC 安卓和 iOS 代码实际上是一份,只是依赖的三方和工具链不太一样。准备webrtc_ios
是为了下载配置基本的 webrtc 编译环境,包括依赖和工具链。然后再将之前 Ubuntu 版本的工具链替换成 Mac 版本即可。
2. 依赖和工具
2.1. 拷贝Android 目录
将 webrtc_android/third_party
目录下以 “android” 开头的目录复制到 webrtc_ios/third_party
目录下,覆盖同名目录。
2.2. R8目录
将 webrtc_android/third_party/r8
目录复制到 webrtc_ios/third_party/r8
目录下。
2.3. NDK
将 webrtc_android/third_party/android_ndk
目录复制到 webrtc_ios/third_party/android_ndk
目录下。
下载 macOS 版本的 NDK,然后替换 webrtc_ios/third_party/android_ndk
目录。注意要保留该目录中的 android_ndk
子目录下的 BUILD.gn
文件。
2.4. JDK
将 webrtc_android/third_party/jdk/current
目录复制到 webrtc_ios/third_party/jdk/current
目录
手动下载 JDK,并选择版本11或更高版本,然后将其替换 webrtc_ios/third_party/jdk/current
目录下的内容。
2.5. LLVM
将 macOS 版本的以下文件复制到 third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib
目录下:
1
android_ndk/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/12.0.9/lib/linux
2.6. 编译脚本修改
修改 third_party/ijar/BUILD.gn
文件,在 if (is_linux || is_chromeos || is_apple)
块中添加 || is_apple
判断条件。
if (is_linux || is_chromeos || is_apple) {
config("ijar_compiler_flags") {
if (is_clang) {
cflags = [
修改 third_party/llvm-build/Release+Asserts/bin
目录下的以下文件名:
1
2
3
llvm-nm
llvm-strip
llvm-objcopy
2.7. 其他错误
经过上述修改,编译过程中由于环境配置导致的错误应该已经很少了。如果仍然出现错误,请具体分析问题并进行相应的修改。总体而言,所需修改的内容并不多。
3. 编译
使用以下命令进行编译,由于 WebRTC 编译参数也比较多,比较复杂,后期有时间专门写一篇关于 WebRTC 编译的文章。
1
gn gen out/armv8 --args='target_os="android" target_cpu="arm64" is_component_build=false is_debug=false rtc_enable_protobuf=false rtc_include_tests=false rtc_build_examples=false rtc_enable_sctp=false rtc_enable_libevent=false rtc_build_tools=false disable_android_lint=false use_errorprone_java_compiler=false use_custom_libcxx=false android32_ndk_api_level=18'