我有一个使用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。两个不同的制造商......
答案 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支持以编译本机代码