2017-02-10 62 views
9

问题:20%的用户正在接受:原生功能没有实现发现

Fatal Exception: java.lang.UnsatisfiedLinkError 
No implementation found for java.lang.String com.example.utils.API.getHashString(android.content.Context) (tried Java_com_example_utils_API_getHashString and Java_com_example_utils_API_getHashString__Landroid_content_Context_2) 

对于其他80%的应用在我的测试设备完美的工作,也不例外,以及。 找不出什么问题。

EDIT1: 图书馆在启动画面上完美加载。在这一点上没有例外。

static { System.loadLibrary("my-lib"); } 

EDIT2: 只是重现该错误。这绝对是随机的。应用程序函数调用可以正常工作,并且在某个时候启动失败。唯一的修复方法是重新安装应用程序。

+0

尝试从静态构造函数中调用有问题的方法。它是否在同一设备上失败? –

+0

你的意思是静态块吗?我想尝试,但我无法测试真实用户的所有生产解决方案。 –

+0

你的意思是,这个问题从来没有在实验室复制?并且您的日志显示,其他用户可以使用相同的设备吗? –

回答

2

继我的评论和@ stanislav-parkhomenko后来的评论后,我将其重新发布为答案。谢谢!

我的评论:

哪里是静态{...}块位于何处?可能的原因可能是代码在某些调用之前未被执行。

以后又经本人确认这是原因:

的问题是在库初始化。由于共享功能,启动屏幕并不总是运行,这就是为什么有时图书馆没有加载。

感谢Xavier Rubio Jansana的建议,治好了我的失明。

很高兴帮助!

2

此错误是由您正在加载的Java和本机库之间的方法签名不匹配造成的。 20%的用户可能拥有不同版本的同名文件库文件。如果它是你自己的图书馆,请尝试给它一个相对独特的名称并从绝对路径加载它,以减少名称冲突的可能性。

0

它看起来像是试图加载本地库,并且Android Gradle还没有支持本机代码。您应该仔细检查图书馆的文档以确认;我试图查看它,但它看起来像没有可公开访问的文档的商业图书馆。

您可以将.so文件放入src/mainjniLibs文件夹中。这是介绍了AS 0.7.2

为样本,看 this@CommonsWare,或见this页的官样(滚动到页面底部)

仍然是在安卓原生的gradle库不支持只要我遵循简单的hack.It就可以很好地工作。 Check this

+0

nope,它是我自己的库,它只包含java的几个函数实现。 –