【发布时间】: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/… 谢谢...