win10系统下编译webRTC的Android版

12 篇文章 17 订阅

一、配置环境

1、Android的编译,需要在Linux下进行,所以 《虚拟机》+ 《Ubuntu》 先准备好。Ubuntu需要预留50G的空间,当然40G应该也可以吧。反正20G是肯定不行的。我一开始是20G,后来下载完的webRTC实在太大了,又重新卸载并安装了Ubuntu(当然,如果你会扩容,就忽略我的做法)。

2、安装git工具

sudo apt-get install git

3、在终端上执行脚本。(前两条,一条一条的输入,后面的可以一次性复制过去)

git config --global user.email "<your email>"
git config --global user.name "<your name>"

git config --global url.http://120.92.49.206:3232/chromiumsrc/webrtc.git.insteadOf https://chromium.googlesource.com/external/webrtc.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/base.git.insteadOf https://chromium.googlesource.com/chromium/src/base
git config --global url.http://120.92.49.206:3232/chromiumsrc/build.git.insteadOf https://chromium.googlesource.com/chromium/src/build
git config --global url.http://120.92.49.206:3232/chromiumsrc/buildtools.git.insteadOf https://chromium.googlesource.com/chromium/src/buildtools
git config --global url.http://120.92.49.206:3232/chromiumsrc/gradle.git.insteadOf https://chromium.googlesource.com/external/github.com/gradle/gradle.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/ios.git.insteadOf https://chromium.googlesource.com/chromium/src/ios.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/testing.git.insteadOf https://chromium.googlesource.com/chromium/src/testing
git config --global url.http://120.92.49.206:3232/chromiumsrc/third_party.git.insteadOf https://chromium.googlesource.com/chromium/src/third_party
git config --global url.http://120.92.49.206:3232/chromiumsrc/clang-format.git.insteadOf https://chromium.googlesource.com/chromium/llvm-project/cfe/tools/clang-format.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libcxx.git.insteadOf https://chromium.googlesource.com/chromium/llvm-project/libcxx.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libcxxabi.git.insteadOf https://chromium.googlesource.com/chromium/llvm-project/libcxxabi.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libunwind.git.insteadOf https://chromium.googlesource.com/external/llvm.org/libunwind.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/android_ndk.git.insteadOf https://chromium.googlesource.com/android_ndk.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/android_tools.git.insteadOf https://chromium.googlesource.com/android_tools.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/auto.git.insteadOf https://chromium.googlesource.com/external/github.com/google/auto.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/catapult.git.insteadOf https://chromium.googlesource.com/catapult.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/compact_enc_det.git.insteadOf https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/colorama.git.insteadOf https://chromium.googlesource.com/external/colorama.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/depot_tools.git.insteadOf https://chromium.googlesource.com/chromium/tools/depot_tools.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/errorprone.git.insteadOf https://chromium.googlesource.com/chromium/third_party/errorprone.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/ffmpeg.git.insteadOf https://chromium.googlesource.com/chromium/third_party/ffmpeg.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/findbugs.git.insteadOf https://chromium.googlesource.com/chromium/deps/findbugs.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/freetype2.git.insteadOf https://chromium.googlesource.com/chromium/src/third_party/freetype2.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/harfbuzz.git.insteadOf https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/gtest-parallel.git.insteadOf https://chromium.googlesource.com/external/github.com/google/gtest-parallel
git config --global url.http://120.92.49.206:3232/chromiumsrc/googletest.git.insteadOf https://chromium.googlesource.com/external/github.com/google/googletest.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/icu.git.insteadOf https://chromium.googlesource.com/chromium/deps/icu.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/jsr-305.git.insteadOf https://chromium.googlesource.com/external/jsr-305.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/jsoncpp.git.insteadOf https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/junit.git.insteadOf https://chromium.googlesource.com/external/junit.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/fuzzer.git.insteadOf https://chromium.googlesource.com/chromium/llvm-project/compiler-rt/lib/fuzzer.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libjpeg_turbo.git.insteadOf https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libsrtp.git.insteadOf https://chromium.googlesource.com/chromium/deps/libsrtp.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libvpx.git.insteadOf https://chromium.googlesource.com/webm/libvpx.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/libyuv.git.insteadOf https://chromium.googlesource.com/libyuv/libyuv.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/linux-syscall-support.git.insteadOf https://chromium.googlesource.com/linux-syscall-support.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/mockito.git.insteadOf https://chromium.googlesource.com/external/mockito/mockito.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/nasm.git.insteadOf https://chromium.googlesource.com/chromium/deps/nasm.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/openh264.git.insteadOf https://chromium.googlesource.com/external/github.com/cisco/openh264
git config --global url.http://120.92.49.206:3232/chromiumsrc/requests.git.insteadOf https://chromium.googlesource.com/external/github.com/kennethreitz/requests.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/robolectric.git.insteadOf https://chromium.googlesource.com/external/robolectric.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/ub-uiautomator.git.insteadOf https://chromium.googlesource.com/chromium/third_party/ub-uiautomator.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/usrsctp.git.insteadOf https://chromium.googlesource.com/external/github.com/sctplab/usrsctp
git config --global url.http://120.92.49.206:3232/chromiumsrc/binaries.git.insteadOf https://chromium.googlesource.com/chromium/deps/yasm/binaries.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/patched-yasm.git.insteadOf https://chromium.googlesource.com/chromium/deps/yasm/patched-yasm.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/tools.git.insteadOf https://chromium.googlesource.com/chromium/src/tools
git config --global url.http://120.92.49.206:3232/chromiumsrc/client-py.git.insteadOf https://chromium.googlesource.com/infra/luci/client-py.git
git config --global url.http://120.92.49.206:3232/chromiumsrc/boringssl.git.insteadOf https://boringssl.googlesource.com/boringssl.git

4、指定同步目录:我在home/user下面,新建了一个webRTC的文件夹,并进入,即home/user/webRTC 目录,设置为当前目录。

#指定当前目录为同步目录,也可以指定其他路径
export WORKSPACE=`pwd`

5、切换到当前目录(cd $WORKSPACE),然后下载并安装depot_tools

cd $WORKSPACE
rm -rf depot_tools && git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

cd $WORKSPACE/depot_tools && git checkout gitlab
chmod +x $WORKSPACE/depot_tools/cipd

export PATH=$PATH:$WORKSPACE/depot_tools

6、同步webRTC(最后一行,开始下载,然后等待漫长的一个多小时)

rm -rf $WORKSPACE/webrtc && mkdir $WORKSPACE/webrtc
cd $WORKSPACE/webrtc && gclient config --name src https://chromium.googlesource.com/external/webrtc.git@gitlab

export CDS_CLANG_BUCKET_OVERRIDE=http://120.92.49.206:3232/chromiumsrc/commondatastorage/raw/master/public/chromium-browser-clang

#cd ~/depot_tools; git fetch; git reset --hard origin/gitlab; chmod +x ~/depot_tools/cipd

cd $WORKSPACE/webrtc && gclient sync --patch-ref=https://chromium.googlesource.com/chromium/src/build.git@gitlab

二、编译

安装依赖项时,需要sudo 权限。 

编译生成的库,存放在 src/out/Release

编译完成后,就可以在src/out/Release/apks目录下找到AppRTCMobile.apk了

 

# 安装依赖
apt-get install -y software-properties-common # 前面加:sudo
add-apt-repository -y ppa:openjdk-r/ppa  # 前面加:sudo
 
./build/install-build-deps-android.sh    # src/build/有这个sh,直接sudo 执行


# 添加安卓平台
cd $WORKSPACE/webrtc
echo "target_os = [ 'android' ]" >>.gclient


# 同步
export PATH=$PATH:$WORKSPACE/depot_tools
export CDS_CLANG_BUCKET_OVERRIDE=http://120.92.49.206:3232/chromiumsrc/commondatastorage/raw/master/public/chromium-browser-clang

# 时间稍长
cd $WORKSPACE/webrtc && gclient sync --patch-ref=https://chromium.googlesource.com/chromium/src/build.git@gitlab


# 编译
cd $WORKSPACE/webrtc/src

gn gen out/Release_arm64 "--args=is_debug=false target_os=\"android\" target_cpu=\"arm64\""

ninja -C out/Release_arm64

编译其他版本:

a)编译arm debug版本
gn gen out/Debug_arm32 "--args=target_os=\"android\" target_cpu=\"arm\""
ninja -C out/Debug_arm32

b)编译arm64 debug版本
gn gen out/Debug_arm64 "--args=target_os=\"android\" target_cpu=\"arm64\""
ninja -C out/Debug_arm64

c)编译arm release版本
gn gen out/Release_arm32 "--args=target_os=\"android\" target_cpu=\"arm\" is_debug=false"
ninja -C out/Release_arm32

d)编译arm64 release版本
gn gen out/Release_arm64 "--args=target_os=\"android\" target_cpu=\"arm64\" is_debug=false"
ninja -C out/Release_arm64

三、编译过程,出现的问题:

当程序编译到一半出错时,输入:ninja -C out/Release_arm64 >> release_arm64.log

即可得到错误日志,主要问题如下:

File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1340, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
全部日志内容:

ninja: Entering directory `out/Release_arm64'
[1/8060] STAMP obj/system_wrappers/field_trial.stamp
[2/8060] CC obj/third_party/boringssl/boringssl/err_data.o
[3/8060] CXX obj/system_wrappers/event_wrapper/event.o
[4/8060] CXX obj/test/test_renderer_generic/video_renderer.o
[5/8060] STAMP obj/test/field_trial.stamp
[6/8060] CXX obj/test/fileutils/file_utils.o
[7/8060] CXX obj/video/video/call_stats.o
[8/8060] CXX obj/test/scenario/column_printer/column_printer.o
[9/8060] CXX obj/stats/rtc_stats_test_utils/rtc_test_stats.o
[10/8060] CXX obj/test/pc/e2e/single_process_encoded_image_data_injector/single_process_encoded_image_data_injector.o
[11/8060] ACTION //sdk/android:generated_base_jni__jni_gen(//build/toolchain/android:android_clang_arm64)
[12/8060] ACTION //sdk/android:generated_base_jni__jni_gen(//build/toolchain/android:android_clang_arm64)
[13/8060] ACTION //base:anchor_functions_buildflags(//build/toolchain/android:android_clang_arm64)
[14/8060] STAMP obj/base/anchor_functions_buildflags.stamp
[15/8060] ACTION //sdk/android:generated_base_jni__jni_gen(//build/toolchain/android:android_clang_arm64)
[16/8060] CXX obj/test/fake_video_codecs/fake_vp8_decoder.o
[17/8060] ACTION //base:android_runtime_jni_headers__jni_Runnable(//build/toolchain/android:android_clang_arm64)
FAILED: gen/base/android_runtime_jni_headers/base/jni/Runnable_jni.h 
python ../../base/android/jni_generator/jni_generator.py --jar_file ../../third_party/android_sdk/public/platforms/android-28/android.jar --input_file java/lang/Runnable.class --ptr_type=long --output_dir gen/base/android_runtime_jni_headers/base/jni --includes ../../../../../../../base/android/jni_generator/jni_generator_helper.h
Traceback (most recent call last):
  File "../../base/android/jni_generator/jni_generator.py", line 1628, in <module>
    sys.exit(main(sys.argv))
  File "../../base/android/jni_generator/jni_generator.py", line 1624, in main
    GenerateJNIHeader(input_file, output_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 1532, in GenerateJNIHeader
    jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 847, in CreateFromClass
    stderr=subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1340, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
[18/8060] ACTION //sdk/android:generated_base_jni__jni_gen(//build/toolchain/android:android_clang_arm64)
[19/8060] ACTION //base:base_android_java_enums_srcjar(//build/toolchain/android:android_clang_arm64)
[20/8060] ACTION //base:android_runtime_jni_headers__jni_Runtime(//build/toolchain/android:android_clang_arm64)
FAILED: gen/base/android_runtime_jni_headers/base/jni/Runtime_jni.h 
python ../../base/android/jni_generator/jni_generator.py --jar_file ../../third_party/android_sdk/public/platforms/android-28/android.jar --input_file java/lang/Runtime.class --ptr_type=long --output_dir gen/base/android_runtime_jni_headers/base/jni --includes ../../../../../../../base/android/jni_generator/jni_generator_helper.h
Traceback (most recent call last):
  File "../../base/android/jni_generator/jni_generator.py", line 1628, in <module>
    sys.exit(main(sys.argv))
  File "../../base/android/jni_generator/jni_generator.py", line 1624, in main
    GenerateJNIHeader(input_file, output_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 1532, in GenerateJNIHeader
    jni_from_javap = JNIFromJavaP.CreateFromClass(input_file, options)
  File "../../base/android/jni_generator/jni_generator.py", line 847, in CreateFromClass
    stderr=subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1340, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
[21/8060] CXX obj/test/fake_video_codecs/fake_vp8_encoder.o
[22/8060] CXX obj/video/video_stream_decoder_impl/video_stream_decoder_impl.o
ninja: build stopped: subcommand failed.

1. 怀疑是python和java版本的问题,查看python版本,和java版本:

执行:sudo apt-get install openjdk-8-jre-headless, 然后再执行ninja ,并没有解决。

2. 从网上查的解决方案:sudo apt-get install git git-core,然后再执行ninja ,并没有解决。

3. 怀疑是64位编译不过去,直接编译debug32位的,试一下, 还是不行。

4. 认真看看报错信息,发现:

在out/debug或者release的路径下,就没有这两个文件,所以报错了。
gen/base/android_runtime_jni_headers/base/jni/Runnable_jni.h 

gen/base/android_runtime_jni_headers/base/jni/Runtime_jni.h

再进一步检查,发现在 下面这句话执行的时候,就报错了。  

./build/install-build-deps-android.sh

错误信息如下:

Aborted (core dumped)
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
E: Sub-process returned an error code

网上找的解决方案(参考链接:https://forum.siduction.org/index.php?topic=6174.0):

先执行: sudo apt-get remove libappstream3 // 好像是不让16.04版本更新,

然后执行:sudo ./build/install-build-deps-android.sh  // 这里卡了好久,直接ctrl+z 停了。最后也还是不行。

5. 看看有哪些进程开着的,kill掉一些进行,然后重新执行【安装依赖】,最后证明,是路径没有搞对,最后通过了。

关机重启,重新执行,通过。

 

c++编译出来的动态库:*.so .

但是java不能直接用,需要引用:libjingle_peerconnection_java.jar,←这里面的jar文件 将来都可能会用到。

 

四、测试

编译好之后,apk在这里:webrtc/src/out/release_aem64/apks/AppRTCMobile.apk

把这个apk,放在Android机上,安装。

打开这个浏览器:https://appr.tc/ ,生成随机码,JOIN, 然后手机端输入相同的号码,进行测试。

我这里出现的问题:

浏览器端提示这个错误:
Messages:  
WebSocket open error: WebSocket error.
WebSocket register error: WebSocket error.

手机端提示这个错误:
Connection error
Room IO error:
java.net.SocketTimeoutException:
connect timed out
 

——请科学上网。

 

参考链接:https://webrtc.org.cn/mirror/#android%E2%80%8B_compile

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Windows 10上编译WebRTC可以按照以下步骤进行: 1. 首先,确保你的系统已经安装了Visual Studio。WebRTCWindows上的编译需要使用Visual Studio环境。 2. 下载depot_tools,它是一个用于下载WebRTC源代码的工具。可以在GitHub上找到depot_tools的源码,并按照文档中的步骤进行安装。 3. 打开命令提示符或PowerShell,并导航到你想要保存WebRTC源代码的文件夹。 4. 使用以下命令克隆WebRTC的代码仓库: ``` git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ``` 5. 添加depot_tools到系统的环境变量中。在命令提示符或PowerShell中,输入以下命令: ``` set PATH=%PATH%;[depot_tools目录的路径] ``` 这将使你能够在任何目录中使用depot_tools中的命令。 6. 使用以下命令下载WebRTC的源代码: ``` fetch --nohooks webrtc ``` 此命令将下载WebRTC的源代码到当前文件夹下的src目录中。 7. 进入src目录,并使用命令执行Hook脚本以获取编译所需的依赖项: ``` cd src gclient runhooks ``` 8. 接下来,根据你的编译需求选择合适的方案,并使用gn生成构建配置文件。 如果你想做一个默认构建,可以使用以下命令: ``` gn gen out/Default ``` 如果你想构建一个调试本,可以使用以下命令: ``` gn gen out/Debug --args="is_debug=true" ``` 构建配置文件将生成在out/Default或out/Debug目录中。 9. 最后,使用ninja命令来编译WebRTC: ``` ninja -C out/Default ``` 或者,如果你选择了调试本: ``` ninja -C out/Debug ``` 这将编译WebRTC并生成可执行文件和库文件。 以上是在Windows 10上编译WebRTC的简要步骤。请注意,这只是一个概述,实际操作可能会根据具体环境有所不同。在实际操作中,请根据WebRTC项目的文档和最新的指南进行操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值