我原先使用的android版webrtc是在linux下编译的,现在因为某些原因需要把整个库迁移到mac下编译。
把代码迁移完后,正常是需要通过gclient sync 重新构建编译环境,但是由于网络限制等方面原因,会导致完成的比较慢。
在摸索一阵后,找到了一种方式可以快速的编译出webrtc,步骤如下:
假设已经有 NDK、depot_tools、ninja,并且可以正常使用了
1.修改 src/build/config/compiler/BUILD.gn
由于NDK提供的clang交叉编译器不支持该选项,所以需要注释掉:
#asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
2.修改 src/build/toolchain/android/BUILD.gn
默认使用的 eu-strip是linux下的elf可执行文件,因此需要修改:
strip = rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",root_build_dir)
修改为:strip = _tool_prefix + "strip"
3.在src目录下执行gn命令生成ninja编译脚本
clang_base_path:需要设置成 NDK 的编译器目录 /Users/plants/Workspace/Video/android-ndk-r19c/toolchains/llvm/prebuilt/darwin-x86_64/
android_ndk_root:需要设置成 NDK 的安装目录 /Users/plants/Workspace/Video/android-ndk-r19c
custom_toolchain:需要设置成android特定编译器环境 //build/toolchain/android:android_clang_arm64
具体命令行如下:
gn gen out/Release/arm64-v8a --args='is_debug=false target_os="android" target_cpu="arm64" rtc_include_tests=false rtc_build_examples=false proprietary_codecs=true ffmpeg_branding="Chrome" clang_base_path="/Users/plants/Workspace/Video/android-ndk-r19c/toolchains/llvm/prebuilt/darwin-x86_64/" clang_use_chrome_plugins=false android_ndk_root="/Users/plants/Workspace/Video/android-ndk-r19c" custom_toolchain="//build/toolchain/android:android_clang_arm64" android64_ndk_api_level=21'
4.执行编译命令
ninja -C out/Release/armeabi-v7a
这样就可以在不重新同步编译环境的情况下直接编译webrtc组件。
注意:本方式应对的是老版本的webrtc(M75),使用的NDK也是老的r19c,因此对于新版本的webrtc可能不适用。另外我只编译了webrtc中音视频相关的组件,如果编译其它的组件可能还会出现其它问题。