VS Code和WSL Ubuntu构建、编辑、编译android端webRTC

WSL Ubuntu的安装看这里,Windows10安装WSL Ubuntu

进入WSL

wsl -d Ubuntu-F

默认在挂载windows目录下,如/mnt/c/Users/hyt。正确应该在~目录,可以这样配置

//编辑 .bashrc 文件(这是每次打开终端都会执行的脚本)
nano ~/.bashrc

//按↓(方向键),在文件末尾添加一行
cd ~

然后按Ctrl + O (字母 O,表示“写入” = 保存) -> 回车键(确认保存文件名)-> Ctrl + X (退出 nano),最后执行下面命令使配置立即生效:

source ~/.bashrc

确保命令行能访问webRTC源码仓库

安装必要工具

sudo apt update

//如果有需要升级的包,执行下面命令升级,只是升级小版本,快速、安全,不改变系统版本和webRTC环境
sudo apt upgrade -y

//如果要升级大版本,执行这个命令,很大、很慢,非必要不升级
sudo do-release-upgrade

//安装必要工具命令
sudo apt install git python3 python3-pip openjdk-11-jdk unzip zip curl -y

//安装 depot_tools(WebRTC 构建工具)所需依赖
sudo apt install build-essential clang cmake ninja-build pkg-config libgtk-3-dev -y

//WSL访问不了google,配置Ubuntu使用windows的代理,v2rayN是开启“允许来自局域网的连接”
//拉取depot_tools,192.168.1.13是windows的ip地址,若是动态IP,注意修改
git -c http.proxy=http://192.168.1.13:10809 clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

获取webRTC

 windows下已经获取了webRTC源码,但复制不了,总是无报错跳出,命令如下

//从windows复制webRTC到WSL--两个命令都没成功,总是无报错自动跳出
cp -r /mnt/f/webRTC_Src ~/webRTC
//或者这个命令。上面的命令中断后也可以用这个命令续传
rsync -avh --progress /mnt/f/webRTC_Src/ ~/webRTC/webRTC_Src/

最后是在WSL下重新拉取,命令如下(注意要开启代理):

//创建工作目录并获取源码
//第一次运行 fetch 会花较长时间下载依赖。
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc_android
cd src

//同步依赖项
gclient sync

设置JAVA_HOME环境变量

//查看java路径
readlink -f $(which java)

//设置JAVA_HOME环境变量,注意要替换为上面获取的真实java路径
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin/java' >> ~/.bashrc
或
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc

echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

//验证是否成功
echo $JAVA_HOME

安装设置NDK

//下载 NDK zip 包到 WSL
wget https://dl.google.com/android/repository/android-ndk-r25b-linux.zip
unzip android-ndk-r25b-linux.zip
mv android-ndk-r25b $HOME/ndk

//设置环境变量
echo 'export ANDROID_NDK_ROOT=$HOME/ndk' >> ~/.bashrc
echo 'export PATH=$ANDROID_NDK_ROOT:$PATH' >> ~/.bashrc
source ~/.bashrc

//验证
ANDROID_NDK_ROOT

//查看PATH内容,按行显示
echo $PATH | tr ':' '\n'

关闭 WSL 自动继承 Windows PATH

会有两个depot_tools路径:

/root/depot_tools

/mnt/f/depot_tools/depot_tools

所以要关闭 WSL 自动继承 Windows PATH

sudo nano /etc/wsl.conf
//添加
[interop]
appendWindowsPath = false

//保存退出。

//关闭 WSL 并重新启动
wsl --shutdown

//重新打开 WSL

//确认效果
echo $PATH | tr ':' '\n'

 构建webRTC的Android项目并编译

//构建
gn gen out/Android --args='target_os="android" target_cpu="arm64"'
gn gen out/Debug --args='target_os="android" target_cpu="arm64" is_debug=true'
gn gen out/Debug --args='target_os="android" target_cpu="arm64" is_debug=true android_ndk_root="/root/ndk"'
//errorprone编译出错,暂时先去掉
gn gen out/Debug --args='target_os="android" target_cpu="arm64" is_debug=true android_ndk_root="/root/ndk" use_errorprone_java_compiler=false'


//编译
ninja -C out/Debug
//ninja编译出错,用autoninja
autoninja -C out/Debug

VS Code编辑webRTC

安装 VS Code 的 Remote - WSL 插件(如果还没装)

打开 VS Code:

  • 进入插件市场(侧边栏最左边那一栏 -> Extensions)

  • 搜索 Remote - WSL 并安装

配置环境变量:手动给 ~/.bashrc~/.zshrc 加一行 PATH

如果你不想每次重启 WSL,可以手动把 VS Code 的路径加进 Linux PATH:

echo 'export PATH=$PATH:/mnt/e/install/Microsoft\ VS\ Code/bin' >> ~/.bashrc source ~/.bashrc

注意 /mnt/e/ 是 WSL 对 E:\ 的映射路径。空格要加 \ 转义,或者用引号包住也行。

运行

wsl里进入到webRTC的src目录,输入code .

  • 第一次运行时可能会提示安装 VS Code Server ——按提示安装即可。

  • VS Code 会自动以“WSL 模式”打开,并连接到该 Linux 子系统。

  • 此时你在 VS Code 中看到的文件,都是 WSL 下的真实文件,所有修改直接生效。

  • 第一次这样运行完,以后直接在VS Code里打开就可以

  • VS Code打开WSL里的webRTC,会运行WSL。命令行里再用wsl -d Ubuntu-F时,连接的是同一个WSL实例,不会产生两个实例消耗内存

关闭

关闭VS Code不会自动退出WSL,你可以在 Windows 终端或 PowerShell 中运行:

wsl --list --running

如果输出包含 Ubuntu(或你用的发行版),说明它还在运行。

通过以下命令手动完全关闭 WSL:

wsl --shutdown

这会终止所有 WSL 发行版的后台进程,释放占用的内存和 CPU。

打包aar

命令如下:

python3 tools_webrtc/android/build_aar.py   --output out/aar/webrtc.aar   --build-dir out/Debug

//自定义的只编译java代码且忽略gn的打包aar脚本
python3 tools_webrtc/android/build_java_aar.py   --output out/aar/webrtc.aar   --build-dir out/Debug

//查看支持的参数
python3 tools_webrtc/android/build_aar.py -h

//查看Logging.w(TAG,"")中TAG为SurfaceTextureHelper的日志
adb logcat -s SurfaceTextureHelper

新的aar运行时错误解决办法

查看奔溃日志命令:adb logcat *:V

执行到

PeerConnectionFactory.initialize(iOption);时奔溃,原因是新版用到了org.jni_zero.JniInit,被R8混淆了,导致native层找不到类

在 proguard-rules.pro 中加上:

# 保留 jni_zero 的类和方法名
-keep class org.jni_zero.** { *; }

Didn't find class "org.webrtc.Environment" on path

在src/sdk/android/BUILD.gn文件的libwebrtc依赖列表中添加:environment_java

附录:管理多版本JDK-安装 JDK 17 并安全切换

尝试自己编译NullAway,好像JDK版本不对,所以安装了多版本。不过最后也没编译成功,暂时去掉了error_prone 

  • 你可以用 SDKMAN 安装:

curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" sdk install java 17.0.8-tem

  • 安装后运行:

sdk use java 17.0.8-tem # 临时切换到 JDK17 java -version # 验证版本

  • 构建 NullAway 或 Gradle 项目时,设置:

export JAVA_HOME=$HOME/.sdkman/candidates/java/current

  • 不用时恢复默认:

sdk use java 11.0.27-open

附录二:自己下载nullaway

 编译时会报错缺少文件third_party/android_build_tools/nullaway/cipd/nullaway.jar,需要自己下载,在src目录下执行下面命令

mkdir third_party/android_build_tools/nullaway/cipd

wget https://repo1.maven.org/maven2/com/uber/nullaway/nullaway/0.12.7/nullaway-0.12.7.jar -O third_party/android_build_tools/nullaway/cipd/nullaway.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值