某些用户的UnsatisfiedLinkError

时间:2013-03-10 11:53:17

标签: android exception android-ndk java-native-interface

我有一个使用Vuforia增强现实SDK的已发布应用。对于我的所有设备和大多数用户,该应用程序正在使用没有问题。但是,我有几个ACRA自动报告来自用户的UnsatisfiedLinkErrors。我不确定如何进一步诊断。

在主要活动的静态{}块中,我有以下代码:

static {
    loadLibrary("QCAR");
    loadLibrary("MYLIB");
}

那里没有问题..然后我还宣布了一堆原生的边函数,第一个是:

public native void setX(int x);

Java_domain_mine_MainActivity_setX(JNIEnv *env, jobject, jint x) {

在MainActivity的onCreate()方法中,执行少量非JNI相关代码,然后第一个JNI调用setX(x)抛出UnsatisfiedLinkErrors异常。

正如我所说的,这段代码对我和我的大多数用户来说运行正常,所以我认为以上是可以的。在这种情况下,我可以得出结论100%,具有setX功能的库未正确加载?或者它可能意味着图书馆还没有完成加载?

我假设静态{}调用加载在主线程上运行的库,因此在loadLibrary调用之后应该调用setX,因此库将完成加载尝试,无论是失败还是成功但不是他们仍然在另一个线程初始化的情况。

是否还有其他人遇到过类似的问题?如果有的话,你是怎么处理的?

顺便说一句,我看不出有这个问题的设备有任何相似之处。一个是2.3.6,另一个是4.1.1。两个不同的制造商......

2 个答案:

答案 0 :(得分:2)

如果你正在构建不同的ABI,如mips,x86,armeabi-v7a使用

你的mk文件中的

APP_ABI := all

但我不认为问题存在,因为谷歌已经对他们进行过滤检查 http://developer.android.com/google/play/filters.html

转到>>其他过滤器>> CPU架构(ABI)

答案 1 :(得分:0)

您的本机代码未编译。

如果您使用eclipse开发代码,则必须添加NDK支持以编译本机代码