简体   繁体   English

在 Ubuntu 上为 android 构建 WebRTC 时出错

[英]Error while building WebRTC for android on Ubuntu

I am trying to build WebRTC for Android on Ubuntu 16.04.我正在尝试在 Ubuntu 16.04 上为 Android 构建 WebRTC。 I have followed the steps mentioned at: https://medium.com/@abdularis/how-to-compile-native-webrtc-from-source-for-android-d0bac8e4c933 ( I found similar steps in the other links also)我已按照以下步骤操作: https ://medium.com/@abdularis/how-to-compile-native-webrtc-from-source-for-android-d0bac8e4c933(我在其他链接中也发现了类似的步骤)

I checked out the version: branch-heads/m79我检查了版本: branch-heads/m79

I am getting the following error while building the code with the command: python tools_webrtc/android/build_aar.py使用以下命令构建代码时出现以下错误: python tools_webrtc/android/build_aar.py

ERROR at //build/config/android/internal_rules.gni:3051:7: Assertion failed.
      assert(_is_annotation_processor || _is_java_binary || _has_sources)
      ^-----
See //build/config/android/rules.gni:1489:5: whence it was called.
    java_library_impl(target_name) {
    ^-------------------------------
See //build/config/android/rules.gni:1844:5: whence it was called.
    java_library(target_name) {
    ^--------------------------
See //webrtc.gni:850:5: whence it was called.
    android_library(target_name) {
    ^-----------------------------
See //rtc_base/BUILD.gn:1359:3: whence it was called.
  rtc_android_library("base_java") {
  ^---------------------------------
See //BUILD.gn:423:7: which caused the file to be included.
      "rtc_base",
      ^---------
Traceback (most recent call last):
  File "build_aar.py", line 234, in <module>
    sys.exit(main())
  File "build_aar.py", line 230, in main
    args.build_dir, args.extra_gn_switches, args.extra_ninja_switches)
  File "build_aar.py", line 210, in BuildAar
    extra_ninja_switches)
  File "build_aar.py", line 166, in Build
    _RunGN(gn_args_list)
  File "build_aar.py", line 93, in _RunGN
    subprocess.check_call(cmd)
  File "/usr/lib/python2.7/subprocess.py", line 541, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/python', '/home/architsinha/work/WebRTC_Android/src/third_party/depot_tools/gn.py', 'gen', '/tmp/tmpuxZSnM/armeabi-v7a', '--args=arm_version=7 use_goma=false target_cpu="arm" is_component_build=false is_debug=false rtc_include_tests=false target_os="android"']' returned non-zero exit status 1

If I try the other method by running the command gn gen out/Debug --args='target_os="android" target_cpu="arm"' I get the following error:如果我通过运行命令gn gen out/Debug --args='target_os="android" target_cpu="arm"'尝试其他方法,我会收到以下错误:

ERROR at //BUILD.gn:648:20: Assignment had no effect.
      java_files = [
                   ^
You set the variable "java_files" here and it was unused before it went
out of scope.
See //BUILD.gn:647:5: whence it was called.
    junit_binary("android_junit_tests") {
    ^------------------------------------

How can I fix this error?我该如何解决这个错误? Is there some step which I have missed?有没有我错过的步骤?

I was stuck with the same issues.我遇到了同样的问题。 While working on the following commands make sure you're using the same( only-1 ) tab of Linux terminal for WebRTC Native Development.在处理以下命令时,请确保您使用Linux 终端的相同( only-1 )选项卡进行 WebRTC 本机开发。

Please visit this article which is quite helpful for webrtc native development as well as the compilation of webrtc native stack: Compilation of WebRtc Library for Android请访问这篇对 webrtc 原生开发以及 webrtc 原生栈编译很有帮助的文章:Android 的 WebRtc 库编译

First of all, make sure of the following things that you have already installed, if not then use these commands to do that:首先,确保您已经安装了以下内容,如果没有,请使用这些命令来执行此操作:

 - sudo add-apt-repository ppa:openjdk-r/ppa
 - sudo apt-get install openjdk-8-jdk
 - sudo apt-get install pkg-config
 - sudo apt-get update

After that, start the following steps one by one.之后,依次开始以下步骤。 Every step takes its own time based on the machine specs and internet speed , so make sure every step is completed without interruption.根据机器规格互联网速度,每一步都需要自己的时间,因此请确保每一步都不间断地完成。

1- git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

2- export PATH="$PATH:${HOME}/depot_tools"

3- mkdir webrtc_android

3.1- cd webrtc_android

4- fetch --nohooks webrtc_android
    
5- gclient sync

6- cd src/

7- ./build/install-build-deps.sh

8- git branch -r

9- git checkout origin/master

# To check you're in origin/master branch
10- git branch

11- tools_webrtc/android/build_aar.py

It turns out that you will end up with the compilation and building of libwebrtc.aar in the webrtc_android/src/ directory.事实证明,您最终将在webrtc_android/src/目录中编译和构建libwebrtc.aar

Now, If you have already completed your task to step-7 with the branch-heads/m79 , then现在,如果您已经使用branch-heads/m79完成了step-7的任务,那么
select the branch of origin/master instead of m79 .选择origin/masterbranch而不是m79 To do that try the following steps:为此,请尝试以下步骤:

Make sure you're in this directory webrtc_android/src/ :确保你在这个目录中webrtc_android/src/

 - git checkout origin/master
 # To make sure you're using origin/master
 - git branch
 - gclient revert
 - gclient sync
 - tools_webrtc/android/build_aar.py

And hopefully, you will have your issues sorted.希望你能解决你的问题。 Currently, You are checking out a branch that is behind the origin/master and doesn't have all dependencies and modules over there which are necessary to build your libwebrtc.aar .目前,您正在检查位于origin/master后面的分支,并且那里没有构建libwebrtc.aar所需的所有依赖项和模块。


Now, if you tried these both procedures to build the WebRTC such as:现在,如果您尝试了这两个过程来构建 WebRTC,例如:

1- Using AAR Build Tools ( ./tools_webrtc/android/build_aar.py ) 1- 使用 AAR 构建工具 ( ./tools_webrtc/android/build_aar.py )

2- Using Manual Compilation ( gn gen out/Debug --args='target_os="android" target_cpu="arm"' ) 2- 使用手动编译( gn gen out/Debug --args='target_os="android" target_cpu="arm"'

2.1- Compiling ( ninja -C out/Debug ) 2.1- 编译( ninja -C out/Debug

Both procedures will work.这两个程序都将起作用。


It can take a few attempts but running gclient sync a few times worked for me.可能需要几次尝试,但运行gclient sync几次对我有用。

It can take a very long time to get all of the files and if it is interrupted it won't retrieve them.获取所有文件可能需要很长时间,如果中断,它将无法检索它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM