我的应用使用原生库,从 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/