Hug*_*ugo 8 android crash-dumps android-ndk
我的Android webview崩溃,adb logcat的错误转储告诉我libwebcore.so是导致分段错误的库.你怎么解决这个问题?
我最初的研究把我带到了这样的线程:如何在Android中使用addr2line,实质上是说获取库的非剥离版本并使用addr2line实用程序来查明导致分段错误的确切行
上面的帖子说"在obj/local/armeabi下使用.so文件,因为这是非剥离版本"......但我在/ usr/local/android-ndk-r6下找不到libwebcore.so 或者我的Mac上的/ usr/local/android-sdk-mac_86,我只在Android设备上的/ system/lib下找到了一个剥离版本的libwebcore.so .
有没有办法让我可以得到一个非剥离版本的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
Run Code Online (Sandbox Code Playgroud)
您可以使用 Kerubu 提供的链接查看整个 WebKit xcode 项目以及整个 Android 开源项目(我几个月前做过,它需要多个 GB 和几个小时...),并且可能创建您自己的未剥离的 .so 库(我没有),但我怀疑这是解决这个问题的最简单方法。
编辑:事实证明android在github上有镜像,这里是WebCore项目。
您的应用程序很可能比 WebKit 项目更容易排除故障!
我允许自己大胆猜测:
javascript 注入存在已知的错误(也在这里),仅适用于某些设备,这些错误似乎也会影响某些 html 应用程序框架(例如 PhoneGap,显然),您使用该方法吗addJavascriptInterface?如果是这样,有一个解决方法,调用并解析WebChromeClient字符串onJsPrompt以从 Web 视图执行本机调用。
Java 到 JavaScript:
webview.loadUrl("javascript:alert('toto');");
Run Code Online (Sandbox Code Playgroud)
javascript 到 java:
在 JavaScript 中:
prompt('this is the message', 'this is the default value');
Run Code Online (Sandbox Code Playgroud)
在java中:
WebChromeClient chromeClient = new WebChromeClient(){
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, android.webkit.JsPromptResult result){
Log.d("javascriptPrompt", "prompt : "+url+"-"+message);
// should log "javascriptPrompt, "prompt: null - this is the message"
// parse the message and do whatever you want here
result.confirm();
return true;
}
}
webview.setChromeClient(chromeClient);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4019 次 |
| 最近记录: |