win10系统下编译webRTC的Android版

一、配置环境

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

猜你喜欢

转载自blog.csdn.net/qq_34732729/article/details/105970851