之前我们也介绍过很多关于webrtc的编译,由于gn 比 GYP 快不少,因此目前我们编译WebRTC是使用 gn 来生成构建脚本,使用 ninja 来构建。
gn生成ninja命令
使用 gn 生成 ninja 构建文件的常用命令如下:
// 生成 debug 版本的构建文件,默认配置
gn gen out/Debug
// 生成 release 版本的构建文件
gn gen out/Release --args="is_debug=false"
ninja脚本
在skiagyp下面的gyp脚本是模板,执行sync-and-gyp时会根据这些模板来动态生成实际的构建脚本。很多模块依赖、条件等都可以在这个目录下的gyp或gypi中找到。
使用ninja -C out/Release指令编译报错
使用ninja -C out/Release指令编译安卓所需要的webrtc sdk时,出现了以下错误:
ninja: Entering directory `android/Release’
ninja: error: ‘…/…/third_party/android_ndk/sources/android/cpufeatures/cpu-features.c’, needed by ‘obj/third_party/android_sdk/cpu_features/cpu-features.o’, missing and no known rule to make it
从这个报错我们可以得知是文件依赖关系有问题,找不到所需要的文件。这种情况有时候是因为工程所在的目录发生改变,找不到依赖,对于webrtc而言,里面所依赖的插件都会下载到webrtc中第三方库里,但是打开webrtc第三方库里面找cpu-features.c文件是找不到的,所以表明webrtc缺少android ndk第三方。
因此我们需要从安卓官网下载所需ndk(https://developer.android.google.cn/ndk/downloads/revision_history),并拷贝到webrtc目录下面的third_part/android_ndk里面。然后再次运行ninja -C out/Release指令,此错误消失。