Android 6 Marshmallow在调用本机库时崩溃

时间:2015-11-11 19:51:35

标签: java android

我的应用使用原生库,从Android 2.2到5.1

没有问题

但是在Android 6上,Marshmallow应用程序崩溃并出现错误:E / AndroidRuntime(1602):java.lang.UnsatisfiedLinkError:找不到针对com的com.ipc.sdk.FSApi.Init()(尝试过Java_com_ipc_sdk_FSApi_Init和Java_com_ipc_sdk_FSApi_Init__)的实现.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之前的设备也没有崩溃。

1 个答案:

答案 0 :(得分:3)

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

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

如果我找到了另一种解决方法,我会更新这个答案。