某些用户的UnsatisfiedLinkError

问题描述:

我有一个使用Vuforia增强现实SDK的已发布应用程序。对于我所有的设备和大多数用户来说,该应用程序正在使用,没有任何问题。不过,我已经收到了一些来自用户的关于UnsatisfiedLinkErrors的ACRA自动报告。我不确定如何进一步诊断。某些用户的UnsatisfiedLinkError

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

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函数的库尚未正确加载?或者是否意味着图书馆尚未完成加载?

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

是否有其他人有类似的问题,如果是的话,你是如何处理它?

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

+1

你构建针对不同的ABI像MIPS,X86,armeabi-V7A使用APP_ABI:=所有,如果不 – 2013-03-11 12:10:43

+0

噢, 好点子。我只是建立APP_ABI:= armeabi armeabi-v7a。我相信我使用的Vuforia本地库是专门为snapdragon体系结构编写的(我正在使用APP_ABI,就像它们的示例应用程序中那样)。我想我可以得出结论,我的客户可能会使用不同的体系结构手机......在这种情况下,我想知道Google Play是否可以将其过滤掉。 – pilcrowpipe 2013-03-12 19:45:03

+0

其实它只是检查去http://developer.android.com/google/play/filters.html >>其他过滤器>> CPU体系结构(ABI) – 2013-03-13 05:21:46

如果您正在为不同的ABI像MIPS,X86,armeabi-V7A使用

APP_ABI := all在MK文件

但我不认为问题出有作为谷歌已筛选他们选中 http://developer.android.com/google/play/filters.html

进入>>其他过滤器>> CPU架构(ABI)

您的本机代码不编译。

,如果你使用eclipse开发的代码,你必须添加NDK的支持编译本地代码