-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
java.lang.UnsatisfiedLinkError Native method not found #334
Comments
|
|
查看下logcat 有没有load so的日志。 |
|
|
|
之前遇到过类似的问题,是因为在安装的过程中,安装成功了,但是so没有copy过去。 能不能确认是否是这个问题 |
@garryyan 这个确实很难确认,如果是这个问题,该如何解决呢?如果在主进程加载xlog so,在其他进程使用也会导致这个问题吗? |
可以启动的时候检测so,如果不对就自己copy过去一份。 如果主进程加载xlog,其他进程没加载但又调用,肯定会导致这个问题。所以看看你的crash发生在哪个进程 |
@garryyan 我排查了下bugly 崩溃确认发生在主进程,除了“安装成功了,但是so没有copy过去”这种情况外,你还有其他的建议吗? |
没其他建议了,最好能找一个重现的用户确认下。 |
@garryyan 如果是因为安装成功,但是so没有copy过去,出现的错误不应该是*.so not found么?为什么我这边的都是“Native method not found ”? |
目前我的做法是让日志模块初始化的时候检查下xlog so是不是存在,如果不存在都不会打印。 |
@garryyan 目前在程序启动时候加了so检查,但是还是没办法解决Native method not found 堆栈如下: 1 java.lang.IllegalStateException:Fatal Exception thrown on Scheduler.Worker thread.2 rx.internal.schedulers.ScheduledAction.void run()(ScheduledAction.java:59) |
有没有可能调用xlog的接口早于so的加载 |
@garryyan 我做了判断的,初始化失败是不会调用的。 |
看不出来,试着找相关机器重现下。 |
Bugly反馈相同error,但是Crash栈不一样:
只有 |
线上5.0以下的手机也是出现大量类似的崩溃: 请问微信这边有遇到过吗? @garryyan 会不会和linearAlloc有关,目前都只有5.0以下手机有这个问题,5.0及以上没有报过 |
@yuhui2016github 已经保证了在调用onNetworkChange 之前已经load了so了吗? |
|
@garryyan 1.load so 的线程是主线程,还是其他线程? |
我们之前也是没有这个错误的,最近业务改造也开始出现了这个错误。 不过怀疑是在子线程多线程load so导致的问题,和你的不是同一类问题。我们的也在排查中 |
@yuhui2016github 我们自己发现如果调用的哪个函数出现这个异常,try catch住再次调用这个函数,这个异常就没了。 按照道理来讲, 如果真的有问题,catch住再次调用这个函数还会抛出来异常才对。 具体原因还需要探索 |
@garryyan 你们的问题确定是多线程导致的么? 如果是多线程导致的,那会不会可能是在‘’catch住再次调用”时,load so刚好完成了,所以第二次调用的时候没问题。 你们出现的崩溃都是在5.0以下的手机上出现吗? |
我们只是猜测是多线程导致的,但是 调用函数和load so其实是发生在一个线程的,而且保证了先后顺序。所以目前只是说可能其他的机制导致的。 我们出现都是android-19。 建议你们也尝试下我们的修复方式,看量会不会减少。 |
刚好我们项目最近也遇到了这种问题,所以我来插一句 😄 我们下一步准备试一下 catch 住异常,然后重新 load .so 的方法 |
你好,我们项目最近用,有个这个崩溃,不知咋回事,在android 4.4.4的系统上有这样的崩溃: |
这个奔溃我们再观察下 |
我们测试了 catch 住这个错误,重新 load .so 的方法是可行的,基本可以避免 90% 以上的问题 |
这个帖子已经是我找到的最详细描述 Android 4.x 加载so 偶现java.lang.UnsatisfiedLinkError Native method not found错误的帖子了。 这个问题确实很棘手,而且不清楚原因是什么: 我准备试试楼上答主说的catch住再重复加载和调用的解决办法。。 |
这个问题微信已经解决了?方案是什么 |
我们目前采用的这个方式 |
这个问题的本质原因是dalvik实现的bug,5.0之后使用了art也就没有这个问题了。这个bug是这样的: |
@elviswoo 我看了下源码,确实操作hashtable没有加锁。如果在查找方法的时候,恰巧另外一个线程在做load so导致触发hashtable扩容的时候,的确是有可能导致native method not found。不过,如果是这样的话,那应该是不需要重新加载so的。应该是只需要重新调用一次那个方法即可。我验证一下是不是可以让bugly的上报减少。 |
@stcdalyc 这个有结果吗 最后是如何解决的呢 |
重新调用一次那个方法即可,确实可以减少大部分的上报。 |
@stcdalyc 谢谢 |
这个报错是个error,会直接导致crash,请问怎么做到再调用一次的呢? @garryyan |
try { |
Thank you !!! |
因为xlog崩溃导致产品不能上线,希望作者能尽快回复,多谢。
-keep class com.tencent.mars.** {
public protected private *;
}
堆栈信息如下:
Caused by:
java.lang.UnsatisfiedLinkError:Native method not found: com.tencent.mars.xlog.Xlog.logWrite2:(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIJJLjava/lang/String;)V
com.tencent.mars.xlog.Xlog.logWrite2(Native Method)
com.tencent.mars.xlog.Xlog.logD(Xlog.java:48)
com.tencent.mars.xlog.Log.d(Log.java:264)
com.tencent.mars.xlog.Log.d(Log.java:208)
The text was updated successfully, but these errors were encountered: