java - 调用 native 库时 Android 6 Marshmallow 崩溃

标签 java android

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

但在 Android 6 Marshmallow 应用程序崩溃并出现错误:E/AndroidRuntime(1602): java.lang.UnsatisfiedLinkError: 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(原生方法)

如何修复崩溃?

更新 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();

没有崩溃。这意味着 native 库加载成功。 我也在 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. list 中的 android:targetSdkVersion="23" 2. 设备 Android 6 Marshmallow。

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

最佳答案

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

如@135 所说,您只需将targetSdkVersion 更改为21。这不是最好的解决方案,但可以正常工作。

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

关于java - 调用 native 库时 Android 6 Marshmallow 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658724/

相关文章:

java - 浏览器不会将我重定向到 Twitter 进行授权

java - 从Java中的字符串中提取数字

java - Volley : MultipartRequest. getBody:IOException 写入 ByteArrayOutputStream

java - 在 OnCreateView 中显示 Admob 插页式广告时未加载 Android fragment 布局

android - 在 GPS 中获取最近的地方与我在 android 中的当前位置进行比较

AndroidrelativeLayoutalignTop不起作用

android - AChartEngine的Dial Chart如何设置刻度线的颜色

java - 当我尝试使用新的地方兼容时出现问题

java - MySQL Java 更新语法

java 2d 数组比较更新