Android &引用;“未找到本机方法”;在安卓工作室
我已经浏览了关于这个主题的所有其他帖子,但没有一篇对我有帮助 我使用的是第三方SDK(oovoo),它包含一个.jar文件和.so文件(armeabi-v7a) 正如在allotofplaces中所述,我将.jar文件放在libs文件夹中,将armeabi-v7a文件夹(其中包含.so文件)放在src/main中名为jniLibs的文件夹中 构建之后,当我解压.apk时,我看到一个名为lib的文件夹,其中有一个名为armeabi-v7a的文件夹,其中包含.so文件 但我仍然有这样一个例外:Android &引用;“未找到本机方法”;在安卓工作室,android,android-studio,unsatisfiedlinkerror,Android,Android Studio,Unsatisfiedlinkerror,我已经浏览了关于这个主题的所有其他帖子,但没有一篇对我有帮助 我使用的是第三方SDK(oovoo),它包含一个.jar文件和.so文件(armeabi-v7a) 正如在allotofplaces中所述,我将.jar文件放在libs文件夹中,将armeabi-v7a文件夹(其中包含.so文件)放在src/main中名为jniLibs的文件夹中 构建之后,当我解压.apk时,我看到一个名为lib的文件夹,其中有一个名为armeabi-v7a的文件夹,其中包含.so文件 但我仍然有这样一个例外: j
java.lang.UnsatisfiedLinkError: Native method not found: com.oovoo.core.ClientCore.VideoChannelPtr.nCreate:(Ljava/lang/String;)J
- 为什么它不能实现
- 如果它位于中的lib文件夹中 apk是否意味着它将在运行时为它提供支持
oovoo 1.2.4版要具体回答您的问题: 它无法到达实现,因为在运行时,当java环境尝试加载名为
java\u com\u oovoo\u core\u ClientCore\u VideoChannelPtr\n的本机方法时,它没有发现加载了原型int(string)
。这可能是由以下原因造成的:
- 调用该方法时,
.so
库没有加载,因此java不知道它(所以这是您的错误,您调用函数的顺序错误)
.so
库没有导出这样的函数,这意味着您没有机会修复此问题
- 手机在运行时加载的
.so
库除了armv7s
之外,还需要不同的体系结构。确保您的设备是armv7s
- Android系统在其中查找本机libs的文件夹与您预期的不同。我知道这是一个老问题,所以在您的apk中,在您的lib文件夹中创建“armeabi-v7a”和“armeabi”,并在这两个文件夹中复制该文件
关于您的第二个问题,是的,如果您在apk中有lib,您将在运行时拥有它。谢谢您的回答!我尝试了你所说的一切,添加了一个名为armeabi的文件夹,并检查了我的设备架构。关于你的第二个想法,我不认为这是因为他们有一个在eclipse上运行的示例。关于我认为最重要的一件事,我尝试用System.loadLibrary加载库(在同一个类中,-o应该把它放在哪里?),它说“尝试加载库…”,然后是“添加共享库…”,当它到达有问题的代码时,它崩溃了,“致命信号11(SIGSEGV)在0x00000000(代码=1)”。请问您有什么想法吗?System.loadLibrary是您需要的调用,请确保去掉“lib”前缀和“.so”sufix.Sisgsegv意味着在本机代码中它访问了一个“null指针”,因此这是库本身的问题,或者它的使用方式。根据您的评论,我认为您已经通过了链接错误(这是向前迈出的一步)。您可以从库中访问任何其他本机函数而不导致代码崩溃吗?关于eclipse/其他ide,它与您遇到的问题无关。它现在没有崩溃!事实证明,我不需要从onCreate方法调用库。不知道为什么。。。谢谢你!