本机功能未找到实现

时间:2017-02-10 08:37:05

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

问题: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%app完美运行,我的测试设备也不例外。 无法弄清楚问题是什么。

EDIT1 : 库在启动屏幕上完美加载。在这一点上也不例外。

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

EDIT2 : 刚刚转载错误。这绝对是随机的。应用程序函数调用工作正常,并在某些时候开始失败。唯一的解决方法是重新安装应用程序。

3 个答案:

答案 0 :(得分:5)

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

我的评论:

  

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

后来他自己确认这是原因:

  

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

     

感谢Xavier Rubio Jansana的建议,这可以治愈我的失明。

很高兴它有所帮助!

答案 1 :(得分:2)

此错误是由Java和您正在加载的本机库之间的方法签名不匹配引起的。 20%的用户可能具有相同名称的不同版本的库文件。如果它是您自己的库,请尝试为其提供相对唯一的名称,并从绝对路径加载它以减少名称冲突的可能性。

答案 2 :(得分:1)

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

您可以将.so个文件放入jniLibs的{​​{1}}文件夹中。这是在AS 0.7.2

中引入的

作为示例,请参阅 this中的@CommonsWare,或查看this页面了解官方样本(滚动到页面底部)

是的仍然不支持Android gradle中的本机库。我只是遵循简单的hack.It效果很好。Check this