Android 依赖于依赖于SO文件的JAR的依赖关系

Android 依赖于依赖于SO文件的JAR的依赖关系,android,java-native-interface,android-gradle-plugin,Android,Java Native Interface,Android Gradle Plugin,我正在开发一个应用程序(WebRTC),它依赖于一个JAR文件,而这个JAR文件依赖于一个SO文件 我可以加载JAR文件,但我的问题是它无法加载SO文件 dlopen(“/data/app lib/com.webrtc.peerrtc-2/libjingle\u peerconnection\u so.so”)失败:dlopen失败:“/data/app lib/com.webrtc.peerrtc-2/libjingle\u peerconnection\u so.so”具有意外的e\u计算机

我正在开发一个应用程序(WebRTC),它依赖于一个JAR文件,而这个JAR文件依赖于一个SO文件

我可以加载JAR文件,但我的问题是它无法加载SO文件

dlopen(“/data/app lib/com.webrtc.peerrtc-2/libjingle\u peerconnection\u so.so”)失败:dlopen失败:“/data/app lib/com.webrtc.peerrtc-2/libjingle\u peerconnection\u so.so”具有意外的e\u计算机:3


您是否将so库放入给定体系结构的相应src/main/jniLibs文件夹中?(如果您仍然在Eclipse中,它必须在libs/[arch]下运行)。在把它放在那里之后,Android应该加载它,JAR应该会找到它

“/data/app lib/com.webrtc.peerrtc-2/libjingle\u peerconnection\u so.so”具有意外的e_计算机:3

这意味着动态链接器已经找到了一个为e_machine 3构建的库,即i386,而它需要其他东西,比如为ARM架构构建的库

通常,Android会根据包含APK的文件夹的名称决定从APK中提取哪个库以供使用。您的jar或您的项目本身似乎正在将i386版本的库放在您运行的任何目标体系结构的库应该放在的位置

您可以尝试使用zip文件工具来检查jar和apk


如果您是在Linux系统上开发的,
file
命令可能会告诉您.so文件中指定的机器类型,允许您确定它是否放在了错误的目录中。

我在Eclipse和Android studio中都尝试过将.so文件放在libs->armeabi-v7a(Eclipse),jniLibs->armeabi-v7a中(AndroidStudio)错误仍然相同…如果在版本4.1中运行,还会出现一个错误致命错误:无法加载库:get_lib_extents[742]:.所以不是有效的ELFobject@user1242359将非arm库放在arm文件夹中不会有帮助-这意味着文件夹必须包含匹配ABI的库。因此,如果设备有一个arm ABI,则必须找到要放在该文件夹中的库的arm版本,而不是触发此错误消息的x86版本.