我的Android webview崩溃,adb logcat的错误转储告诉我 libwebcore.so 是导致分段错误的库。你怎么解决这个问题?
我最初的研究把我带到了这个线程的地方:How to use addr2line in Android,它本质上是指获取库的非剥离版本并使用addr2line实用程序来查明导致分段错误的确切行3 p>
上面的帖子说“在obj / local / armeabi下使用.so文件,因为这是非剥离版本”......但我在 / usr / local下找不到libwebcore.so我的Mac上有/ android-ndk-r6 或 / usr / local / android-sdk-mac_86 ,我只在 / system /下找到了一个剥离版本的libwebcore.so Android设备上的lib 。
有没有办法让我可以得到一个非剥离版本的libwebcore.so?或者我是不是以正确的方式解决这个问题?
作为参考,这里是adb logcat吐出的错误转储:
I/DEBUG ( 65): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 65): Build fingerprint: 'google/passion/passion:2.3.4/GRJ22/121341:user/release-keys'
I/DEBUG ( 65): pid: 611, tid: 618 >>> com.swishly.gap <<<
I/DEBUG ( 65): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG ( 65): r0 00000002 r1 002f9564 r2 00000003 r3 008e79c8
I/DEBUG ( 65): r4 00000000 r5 002f9700 r6 00000000 r7 4470baf4
I/DEBUG ( 65): r8 4470bb64 r9 44520ea8 10 002ae048 fp 00000000
I/DEBUG ( 65): ip 00000000 sp 4470bad0 lr a851857b pc a851838e cpsr 00000030
I/DEBUG ( 65): d0 0061006300000000 d1 0064006500680000
I/DEBUG ( 65): d2 0077007400650000 d3 004c006b00720000
I/DEBUG ( 65): d4 007400610063006f d5 0053006e006f0069
I/DEBUG ( 65): d6 006300720075006f d7 0000000000000065
I/DEBUG ( 65): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 65): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 65): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 65): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 65): d16 41d39d979893f080 d17 41d39d9b0a07ff06
I/DEBUG ( 65): d18 41106a1000000000 d19 4024000000000000
I/DEBUG ( 65): d20 0000000000000000 d21 0000000000000000
I/DEBUG ( 65): d22 4024000000000000 d23 0000000000000000
I/DEBUG ( 65): d24 0000000000000000 d25 3ff0000000000000
I/DEBUG ( 65): d26 0000000000000000 d27 bff0000000000000
I/DEBUG ( 65): d28 0000000000000000 d29 3ff0000000000000
I/DEBUG ( 65): d30 0000000000000000 d31 3ff0000000000000
I/DEBUG ( 65): scr 20000013
I/DEBUG ( 65):
I/DEBUG ( 65): #00 pc 0021838e /system/lib/libwebcore.so
I/DEBUG ( 65): #01 pc 00218576 /system/lib/libwebcore.so
I/DEBUG ( 65): #02 pc 002186f8 /system/lib/libwebcore.so
I/DEBUG ( 65): #03 pc 0021873a /system/lib/libwebcore.so
I/DEBUG ( 65): #04 pc 0021875c /system/lib/libwebcore.so
I/DEBUG ( 65): #05 pc 0021879a /system/lib/libwebcore.so
I/DEBUG ( 65): #06 pc 0021febe /system/lib/libwebcore.so
I/DEBUG ( 65): #07 pc 00220df0 /system/lib/libwebcore.so
I/DEBUG ( 65): #08 pc 0022147c /system/lib/libwebcore.so
I/DEBUG ( 65): #09 pc 00017e34 /system/lib/libdvm.so
I/DEBUG ( 65):
I/DEBUG ( 65): code around pc:
I/DEBUG ( 65): a851836c 602303c2 eb03e002 602003c2 46206063
I/DEBUG ( 65): a851837c bf00bd70 b510680b b1134604 1c426818
I/DEBUG ( 65): a851838c 6820601a f7ff6023 4620fd55 bf00bd10
I/DEBUG ( 65): a851839c 4604b510 fd1ef7ff f6534620 4620fa73
I/DEBUG ( 65): a85183ac bf00bd10 4604b570 460e6cc0 f6acb168
I/DEBUG ( 65):
I/DEBUG ( 65): code around lr:
I/DEBUG ( 65): a8518558 d10242a5 2600462c 6823e017 f1b3b113
I/DEBUG ( 65): a8518568 d1f83fff e7f33408 1d216878 f7ff1980
I/DEBUG ( 65): a8518578 3408ff03 d00642a5 2b006823 f1b3d0f9
I/DEBUG ( 65): a8518588 d1013fff 462ce7f5 42ac3604 e8bdd1ec
I/DEBUG ( 65): a8518598 bf0081f0 b087b5f0 0710f100 4604ae03
I/DEBUG ( 65):
I/DEBUG ( 65): stack:
I/DEBUG ( 65): 4470ba90 00953a1c
I/DEBUG ( 65): 4470ba94 a83da669 /system/lib/libwebcore.so
I/DEBUG ( 65): 4470ba98 9de0413c
I/DEBUG ( 65): 4470ba9c 00000001
I/DEBUG ( 65): 4470baa0 00953a18
I/DEBUG ( 65): 4470baa4 0000a000
I/DEBUG ( 65): 4470baa8 4470bb64
I/DEBUG ( 65): 4470baac 44520ea8
I/DEBUG ( 65): 4470bab0 002ae048
I/DEBUG ( 65): 4470bab4 afd1362d /system/lib/libc.so
I/DEBUG ( 65): 4470bab8 4470baf4
I/DEBUG ( 65): 4470babc 00953a1c
答案 0 :(得分:3)
您可以使用Kerubu提供的链接检查整个WebKit xcode项目以及整个Android开源项目(我几个月前做过,需要几千兆字节和几小时......)并且可能会创建您自己的未提取的内容。所以图书馆(我没有),但我怀疑这是解决这个问题的最简单方法。
编辑:事实证明android在github上是镜像的,这里是WebCore project。
您的应用程序很可能比WebKit项目更容易排除故障!
我会允许自己猜测:
对于某些设备而言,javascript injection(也是here)存在已知错误,这些设备似乎也会影响某些html应用框架(例如PhoneGap),您是否使用方法{ {1}}?如果有,则有一种解决方法,调用addJavascriptInterface
的{{1}}并解析字符串以从webview执行本机调用。
Java to javascript:
WebChromeClient
javascript to java:
在javascript中:
onJsPrompt
并在java中:
webview.loadUrl("javascript:alert('toto');");
答案 1 :(得分:1)
不是100%肯定,但是在Android Open Source Project?
中找到了libwebkit.so的来源