美文网首页
Webrtc Android源码编译

Webrtc Android源码编译

作者: 孔鹏飞 | 来源:发表于2025-01-18 17:24 被阅读0次

构建

  1. 环境搭建

为了方便编译,我选择的是购买腾讯云轻量应用服务器,价格35元/月,配置如下:

系统镜像 地域 配置
Ubuntu 20.04.6 LTS 美国硅谷 CPU - 2核 内存 - 2GB 系统盘 - SSD 云硬盘 60GB

git: 2.48.1
python: 3.8.10

  1. 安装depot_tools
  • 下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  • 配置环境变量
vim ~/.bashrc
export depot_tools=/home/ubuntu/depot_tools
export PATH=$depot_tools:$PATH
source ~/.bashrc
  • 执行gclient
gclient
  1. 获取源码
  • 下载Android源码
mkdir webrtc_android 
cd webrtc_android 
fetch --nohooks webrtc_android
  • gclient同步
gclient sync
  • 切换到最近的release分支
cd src
# 创建一个新的分支m125
# webrtc分支信息可在https://chromiumdash.appspot.com/branches上查看
git checkout -b m125 branch-heads/6422
gclient sync
  1. 使用gn生成项目
  • 安装依赖
./build/install-build-deps.sh
  • 生成项目
# arm  
gn gen out/Debug --args='target_os="android" target_cpu="arm"'  
  
# arm64  
gn gen out/Debug --args='target_os="android" target_cpu="arm64"'  
  
# x86  
gn gen out/Debug --args='target_os="android" target_cpu="x86"'  
  
# x64  
gn gen out/Debug --args='target_os="android" target_cpu="x64"'

默认生成 debug 版本,release 版本,添加 is_debug=false 参数

  • 编译
ninja -C out/Debug

编译成功后,生成的关键产物为:

out/Debug/libjingle_peerconnection_so.so
out/Debug/lib.java/sdk/android/libwebrtc.jar
  • 编译aar
#编译全平台架构(arm64-v8a、armeabi-v7a、x86、x86_64)
./tools_webrtc/android/build_aar.py

#编译 arm64-v8a架构
./tools_webrtc/android/build_aar.py --arch arm64-v8a

#编译 arm64-v8a、armeabi-v7a架构
./tools_webrtc/android/build_aar.py --arch arm64-v8a armeabi-v7a 

可选参数列表及其描述:
--build-dir: 指定构建目录。如果未指定,脚本将创建并使用临时目录。
--output: 指定输出文件名,默认值为libwebrtc.aar。
--arch: 指定要构建的目标架构,默认值为['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']。
--use-goma: 使用Goma进行并行编译,默认值为False。
--use-remoteexec: 使用RBE(Remote Execution)进行远程编译,默认值为False。
--use-unstripped-libs: 在libwebrtc.aar中使用未剥离的.so文件,默认值为False。
--verbose: 开启调试日志记录,默认值为False。
--extra-gn-args: 在GN生成Ninja文件时传递额外的GN参数,这些参数会覆盖脚本定义的值。例如,构建调试模式的AAR文件可以使用--extra-gn-args='is_debug=true'。
--extra-ninja-switches: 在Ninja编译时传递额外的Ninja开关。例如,启用Ninja的详细输出可以使用--extra-ninja-switches='-v'。
--extra-gn-switches: 在GN生成Ninja文件时传递额外的GN开关。例如,启用GN的详细输出可以使用--extra-gn-switches='-v'。
这些参数允许用户根据需要调整构建过程,例如指定目标架构、是否使用并行编译、编译输出的详细程度等。
编译结果 libwebrtc.aar 默认位于src 目录下,是一个包含库文件的zip文件,包含了arm64-v8a、 armeabi-v7a、x86 和 x86_64 四种架构的 .so,该文件对应的目录结构如下:

 - AndroidManifest.xml
 - classes.jar
 - jni/
   - arm64-v8a/
     - libjingle_peerconnection_so.so
   - armeabi-v7a/
     - libjingle_peerconnection_so.so
   - x86/
     - libjingle_peerconnection_so.so
   - x86_64/
     - libjingle_peerconnection_so.so

AppRTC Demo

  • 在Android Studio中创建一个新的工程,从webrtc_android/src/examples/androidapp目录中复制目录src res AndroidManifest.xml 到新建的工程
  • webrtc_android/src/examples/androidapp/third_party/autobanh/libautobanh.jar和生成的libwebrtc.aar放到新建的工程的app/libs目录
  • 修改app/build.gradle文件,添加如下代码
repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation(name: 'libwebrtc', ext: 'aar')
}

webrtc demo源码已经上传到github,地址:https://github.com/kongpf8848/webrtc_demo

参考资源

相关文章

网友评论

      本文标题:Webrtc Android源码编译

      本文链接:https://www.haomeiwen.com/subject/qvxzyjtx.html