我的应用使用原生库,从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之前的设备也没有崩溃。
答案 0 :(得分:3)
使用 Foscam SDK for Android 时遇到了同样的问题。
就像@ 135所说,你只需要将 targetSdkVersion改为21 。不是最好的解决方案,但它没有崩溃。
如果我找到了另一种解决方法,我会更新这个答案。