【问题标题】:"Native method not found" in android studioandroid studio中的“找不到本机方法”
【发布时间】:2014-08-19 15:03:40
【问题描述】:

我已经浏览了这里关于这个主题的所有其他帖子,但没有一个对我有帮助。

我正在使用第三方 SDK (oovoo),它包含一个 .jar 文件和 .so 文件 (armeabi-v7a)

正如在分配的地方所述,我将 .jar 文件放在 libs 文件夹中,并将 armeabi-v7a 文件夹(包含 .so 文件)放在 src/main 内名为 jniLibs 的文件夹中

构建后,当我解压缩 .apk 时,我看到一个名为 lib 的文件夹,其中有一个名为 armeabi-v7a 的文件夹,其中包含 .so 文件

但我仍然得到这个异常:

 java.lang.UnsatisfiedLinkError: Native method not found: com.oovoo.core.ClientCore.VideoChannelPtr.nCreate:(Ljava/lang/String;)J
  • 为什么达不到实现?
  • 如果它在 lib 文件夹中 .apk 是否意味着它会在运行时为它服务?

感谢分配!

android 工作室版本 0.8.6 毕业版本 1.12 oovoo 版本 1.2.4

【问题讨论】:

    标签: android android-studio unsatisfiedlinkerror


    【解决方案1】:

    具体回答您的问题:

    它无法实现,因为在运行时,当 java 环境尝试使用原型 int (string) 加载名为 java_com_oovoo_core_ClientCore_VideoChannelPtr_nCreate 的本机方法时,它找不到加载这样的方法。这可能是由以下原因引起的:

    • .so 库在您调用该方法时尚未加载,因此 java 不知道它(所以这是您的错误,您以错误的顺序调用函数)
    • .so 库没有导出这样的函数,这意味着你没有机会修复它
    • 手机在运行时加载的.so 库需要与armv7s 不同的架构。确保您的设备是armv7s
    • Android 系统在其中查找本机库的文件夹与您预期的不同。我知道这是一个老问题,所以在你的 apk 中,在你的 lib 文件夹中创建 "armeabi-v7a" 和 "armeabi" ,然后复制 .so 文件

    关于您的第二个问题,是的,如果您在 apk 中有 lib,您将在运行时拥有它。

    【讨论】:

    • 感谢您的回答!我尝试了您所说的所有内容,添加了一个名为 armeabi 的文件夹并检查了我的设备架构。关于您的第二个想法,我认为不是因为他们有一个在 Eclipse 上运行的示例。关于我认为最重要的事情,我尝试使用 System.loadLibrary 加载库(在同一个类中,-应该把它放在哪里?)它说“尝试加载库 ..”,然后是“添加共享库。 .”,然后当它到达有问题的代码时,它会以“致命信号 11 (SIGSEGV) at 0x00000000 (code=1)”崩溃。请问您有什么想法吗?
    • System.loadLibrary 是您需要的调用,确保去掉“lib”前缀和“.so”后缀 .Sisgsegv 表示在本机代码中它访问了“空指针”,所以这是图书馆本身或使用方式的问题。根据您的评论,我认为您已经克服了链接错误(这是向前迈出的一步)。您可以从库中访问任何其他本机函数而不会导致代码崩溃吗?关于eclipse/other ide,它与您遇到的问题无关。
    • 它现在没有崩溃!事实证明我不需要从 onCreate 方法调用库。不知道为什么...谢谢分配!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多