无法在Android Studio中解决webrtc符号问题。

5

我正在尝试在Android Studio中使用webrtc技术。文件libjingle_peerconnection_so.so被放置在src/main/jniLibs/armeabi-v7a文件夹中。但是当我在Java文件中调用时:

import org.webrtc.DataChannel;

它告诉我无法解析 "Cannot resolve symbol webrtc"。需要帮助。


https://github.com/pristineio/webrtc-android - Pratik Butani
1个回答

2
首先,它是armeabi-v7a,不是arneabi-v7a,但仅有这个可能无法解决您的问题 :)
您正在走一条艰难的路线,所以这里有一些理论知识:
文件libjingle_peerconnection_so.so本身并不足以在Java程序中使用WebRTC。至少,您需要WebRTC核心的Java JNI包装器,它为您提供了所有必要的Java类来处理本机WebRTC代码。默认包装器通常是libjingle_peerconnection.jar,您应该将其放在“libs”文件夹中,该文件夹与您的“src”文件夹处于同一级别。因此,您的项目树应该有这些文件:
  • src/main/jniLibs/armeabi-v7a
  • libs/libjingle_peerconnection.jar
您需要告诉您的构建系统在您的应用程序中构建.jar文件。在Android Studio中,通常使用Gradle,因此只需将compile files('libs/libjingle_peerconnection.jar')添加到您的依赖项中即可。
但也有简单的方法!来自pristine.io的好人们定期为Android构建WebRTC并发布一些预构建版本到Maven存储库(请参见此处)。因此,您只需将compile 'io.pristine:libjingle:10839@aar'添加到Gradle依赖项中即可轻松使用。无需添加.so文件等。这里是他们的文章(注意过时的WebRTC版本,例如,您可以使用10839)

我已经解决了添加libjingle_peerconnection.jar的问题。然而,我不太清楚为什么在只放置.jar文件而没有放置.so文件的情况下,它没有给我错误“无法解析符号webrtc”。我还发现了io.pristine,但我想测试自己编译的文件。如果.jar是一个JNI包装器,那么.so文件是什么?(我对webrtc非常陌生)。感谢您的教程,这是一个非常好的介绍,可以帮助我继续进行该项目。 - user1680859
@user1680859,让我再进一步解释一下。 - Alexey Ershov
2
@user1680859 最初,WebRTC是用C++编写的,而默认的Android语言是Java。那么,我们如何从Java中使用C++呢?Java提供了一个名为JNI(Java Native Interface)的功能,允许您从Java调用C++代码。但是,C++代码必须格式正确,并且自己创建所有WebRTC C++代码的“适配器”并不容易,Java包装器也不是那么简单(请参见源代码)。因此,开发人员已经为您完成了所有工作,并将其称为libjingle_peerconnection.jar和.so。(续在下一条评论中) - Alexey Ershov
2
@user1680859,如果没有.so文件,.jar文件就毫无用处,因为它调用了C++函数,这些函数是在.so文件(Linux的.dll等效文件)中编译的。我不确定,但你可能需要Android NDK才能使WebRTC正常工作。你只能尝试一下或者搜索一些资料。有很多关于WebRTC的材料,虽然关于其Android实现的资料不是很多,但足以入门。祝你好运! - Alexey Ershov
最好的超短教程:),感谢@alaershov - user1680859
@alaershov,你好...我在哪里可以下载libjingle_peerconnection.jar的源代码(我需要最新的11139版本)?因为从你提供的URL(https://oss.sonatype.org/content/groups/public/io/pristine/libjingle/)中,源jar都是空的? 我需要在VideoCapturerAndroid类中添加方法以获取相机对象...谢谢 :) - Bromo Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接