无法在 Android Studio 中解析符号 webrtc

use*_*859 5 java-native-interface android webrtc android-studio apprtcdemo

我正在尝试在 Android Studio 中使用 webrtc。文件libjingle_peerconnection_so.so放入文件夹src/main/jniLibs/arneabi-v7a中。但是当我放入 Java 文件时:

import org.webrtc.DataChannel;
Run Code Online (Sandbox Code Playgroud)

它告诉我无法解析“无法解析符号 webrtc ”。任何帮助表示赞赏。

Ale*_*hov 2

首先,它是arm eabi -v7a,而不是ar n eabi-v7a,但仅此并不能解决您的问题:)

你正在走一条艰难的路,所以这里有一些理论:

文件libjingle_peerconnection_so.so本身不足以在 Java 程序中使用 WebRTC。至少,您需要 WebRTC 核心的 Java JNI 包装器,它为您提供使用本机 WebRTC 代码所需的所有 Java 类。默认包装器通常是libjingle_peerconnection.jar,您应该将其放入与“src”文件夹同一级别的“libs”文件夹中。因此,您的项目树应该包含以下文件:

  • src/main/jniLibs/armeabi-v7a
  • 库/libjingle_peerconnection.jar

此外,您还需要告诉您的构建系统在您的应用程序中构建 .jar。在 Android Studio 中,它通常是 Gradle,因此只需将编译文件('libs/libjingle_peerconnection.jar')添加到您的依赖项中即可。

但也有简单的方法!pristine.io 的好人会定期为 Android 构建 WebRTC 并将一些预构建版本发布到 Maven 存储库(请参阅此处)。因此,您只需将编译“io.pristine:libjingle:10839@aar”添加到 Gradle 依赖项中即可。无需添加 .so 文件等。是他们的文章(请注意过时的 WebRTC 版本,例如,您可以使用 10839)

  • @user1680859 最初,WebRTC是用C++编写的,而默认的Android语言是Java。那么,我们如何从Java中使用C++呢?Java 提供了一种称为 JNI(Java Native Interface)的功能,它允许您从 Java 调用 C++ 代码。然而,C++代码必须正确格式化,并且自己为所有WebRTC C++代码创建“适配器”并不是那么容易,而且Java包装器也不是那么简单(请参阅源代码)。因此,开发人员已为您完成了所有工作,并将其命名为 libjingle_peerconnection.jar 和 .so。(下一条评论继续) (2认同)
  • @user1680859 如果没有 .so,.jar 文件就没用,因为它调用 C++ 函数,这些函数在 .so 文件中编译(Linux .dll 等效)。我不确定,但您可能需要 Android NDK 才能使 WebRTC 工作。你必须尝试一下,或者进行一些谷歌搜索。WebRTC 上有很多资料。关于其 Android 实现的内容不多,但仍然足以入门。祝你好运! (2认同)