iOS端编译生成Framwork
1.修改路径webrtc/src/tools_webrtc/ios/build_ios_libs.py文件的cpu架构
DEFAULT_ARCHS = ENABLED_ARCHS = ['arm64','arm','x64','x86']
- x64是模拟器,是mac电脑cpu
- arm64是64位cpu
- arm是32位cpu
- x86是对应i386
2.直接运行命令--bitcode
是开启bitcode功能,如果开启会导致生成的freamwork非常的大。所以一般不增加,切换到目录webrtc/src/tools_webrtc/ios
python build_ios_libs.py
3.最后输出的WebRTC.framework
在webrtc/src/out_ios_libs
目录下.
如果遇到只要部分cpu架构可以自己进行删除控制。
Note: 如果你的freamwork只有armv7 和 arm64架构,但是在你上传到App Store或者pod trunk 需要x86_64或i386 可以在工程配置Build Phase
中的/bin/sh
增加以以下脚本进行忽略。
遇到一个比较坑的问题在build_ios_libs.py有一行将x86架构移除,建议此处将它注释掉,否则一直编译不通过支持i386架构。
# Ignoring x86 except for static libraries for now because of a GN build issue
# where the generated dynamic framework has the wrong architectures.
if 'x86' in architectures and args.build_type != 'static_only':
architectures.remove('x86')
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
iOS端编译模拟器和真机测试demo
1.使用gn配置生成支持 Ninja编译的配置文件。(gn相关文档地址)
gn需要配置的的主要变量有以下:
-
target_os
: 目标系统有:android, ios, mac,linux,chromeos,如:iOS设置为 target_os="ios" -
target_cpu
: 目标cpu架构有:- ios对应cpu有:arm,arm64,x64,x86
- android对应cpu有:arm64,x86(32位),x64(64位)
- chromeos对应有:mips64el
- linux对应:x86,x64
-
is_debug:是否是debug模式,默认是true
-
查找签名
security find-identity -p codesigning
# debug build for 64-bit iOS
gn gen out/ios_64 --args='target_os="ios" target_cpu="arm64" ios_code_signing_identity="827D1FA91405C2F887E5B7B127BD849B5D4B7B4F"'
# 编译真机测试Demo
ninja -C out/ios_64 AppRTCMobile
# 配置总工程
gn gen out/ios --args='target_os="ios" target_cpu="arm64" ios_code_signing_identity="827D1FA91405C2F887E5B7B127BD849B5D4B7B4F"' --ide=xcode
open -a Xcode.app out/ios/all.xcworkspace
Android编译
切换到代码目录
cd /src/
执行此脚本
. build/android/envsetup.sh
设置编译配置
gn gen out/out_android_armeabi-v7a --args='is_debug=false target_os="android" target_cpu="arm" rtc_use_h264=true ffmpeg_branding="Chrome"'
编译32位架构库
ninja -C out/out_android_armeabi-v7a/
编译64位架构库
ninja -C out/out_android_armeabi-v8a/ AppRTCMobile