问题: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 : 刚刚转载错误。这绝对是随机的。应用程序函数调用工作正常,并在某些时候开始失败。唯一的解决方法是重新安装应用程序。
答案 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