【问题标题】:Android 6 Marshmallow crash while calling native library调用本机库时 Android 6 Marshmallow 崩溃
【发布时间】:2015-11-11 19:51:34
【问题描述】:

我的应用使用原生库,从 Android 2.2 到 5.1 都没有问题

但在 Android 6 Marshmallow 应用程序崩溃并出现错误:E/AndroidRuntime(1602): java.lang.UnsatisfiedLinkError: No implementation found for int com.ipc.sdk.FSApi.Init()(尝试 Java_com_ipc_sdk_FSApi_Init 和 Java_com_ipc_sdk_FSApi_Init__)在 com .ipc.sdk.FSApi.Init(本机方法)

如何修复崩溃?

更新 FSApi.java

   package com.ipc.sdk;
   public class FSApi 
   {
   ...  
   public static native int Init();
   ...
   static {
    try{
        System.loadLibrary("IOTCAPIs"); 
    }catch(UnsatisfiedLinkError ule)
    {
    }
    try{
        System.loadLibrary("RDTAPIs"); 
    }catch(UnsatisfiedLinkError ule){
    }
    try{
        System.loadLibrary("iconv");
        System.loadLibrary("FSApi"); 
    }catch(UnsatisfiedLinkError ule){
    }
   }
   }

在 MainActivity 我调用:

FSApi.Init();

如果我评论电话:

// FSApi.Init();

没有崩溃。这意味着本机库加载成功。 我在 logcat 中也遇到错误:

No implementation found for int com.ipc.sdk.FSApi.Init() (tried Java_com_ipc_sdk_FSApi_Init and Java_com_ipc_sdk_FSApi_Init__) at com.ipc.sdk.FSApi.Init(Native Method)

看起来 Marshmallow 尝试在库中查找 Java_com_ipc_sdk_FSApi_Init 或 Java_com_ipc_sdk_FSApi_Init__,但没有成功。 但是如果我在文本编辑器中打开 .so ,我会找到 Java_com_ipc_sdk_FSApi_Init !

只有两个条件一起出现问题: 1. 清单中的 android:targetSdkVersion="23" 2. 设备Android 6 Marshmallow。

在 android:targetSdkVersion="22" 和 Android 6 Marshmallow 上不会崩溃,对于 android:targetSdkVersion="23" 和 Marshmallow 之前的设备也不会崩溃。

【问题讨论】:

  • 如果没有更多信息,我们无法帮助解决此问题。请您编辑您的问题以包含一个最小的完整且可验证的示例。见stackoverflow.com/help/mcve
  • 谢谢,我更新了问题
  • 您的Init 方法是否执行需要任何危险权限的操作?
  • 它是 3d 方原生库,它需要 RECORD_AUDIO 和 WRITE_EXTERNAL_STORAGE 权限。本机库也使用 libcrypto.so 和 libssl.so。我刚刚在谷歌上发现这两个库从棉花糖中排除了!我将 libcrypto.so 和 libssl.so 放在 libs/armeabi 中,并添加了 System.loadLibrary("crypto") 和 System.loadLibrary("ssl"),但没有结果,仍然是同样的错误(
  • @apollox 在您的清单文件中将 targetsdk 更改为 21,并将项目构建目标更改为 5.1.1。请检查。请点击此链接developer.android.com/intl/ko/about/versions/marshmallow/… 谢谢...

标签: java android


【解决方案1】:

我在使用 Foscam SDK for Android 时遇到了同样的问题。

就像@135 所说,您只需将targetSdkVersion 更改为21。不是最好的解决方案,但它不会崩溃。

如果我找到另一种解决方法,我将更新此答案。

【讨论】:

  • 谢谢!我已经将targetSdkVersion改为21,问题就消失了。我也试图找到另一种方法来解决这个问题,但到目前为止没有成功......
  • @apollox 没问题!只是一个问题,你在玩 Foscam API for Android 吗?因为我正在测试一些代码,也许我们可以分享一些想法。
  • 是的,我使用适用于 Android 的 Foscam API。我的申请 - play.google.com/store/apps/details?id=ru.web_site.easycamera 分享没问题!
  • 它适用于 Vuforia .so,适用于 Marshmallow,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多