gmail.com not working on webview (after login)
I have a webview in my app that generally works fine for loading websites. But I cannot get www.gmail.com to work: when I open www.gmail.com I see the login page, try to login, afterwards the screen goes black and my app/process is killed.
I don't see much in my logcat, just some strange debug information is being dumped as below.
But generally https sites work fine, and even more complicated login procedures like opening stackoverflow.com, logging in via openid through https, back to stackoverflow, all work without a problem in my webview. Only gmail.com is giving me these problems.
Edit: I found that if I don't assign my custom MyWebViewClient to the webview, the app doesn't crash but opens the gmail site in the default system browser. But I don't want that. I want it to open in my own webview only.
I created a bug report at http://code.google.com/p/android/issues/detail?id=12097, attached to it is a working very simple sample project that reproduces the crash.
I/DEBUG ( 2173): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 2173): Build fingerprint: 'Samsung/GT-I9000/GT-I9000/GT-I9000:2.1-update1/ECLAIR/XWJM6:user/release-keys'
I/DEBUG ( 2173): pid: 6753, tid: 6793 >>> com.myapplication.android <<<
I/DEBUG ( 2173): signal 11 (SIGSEGV), fault addr 0000004c
I/DEBUG ( 2173): r0 00000000 r1 00000000 r2 00000000 r3 aa476ae0
I/DEBUG ( 2173): r4 00000000 r5 4c2f5b74 r6 aa476ae0 r7 00595dec
I/DEBUG ( 2173): r8 4c2f5da8 r9 444a7eb8 10 444a7ea0 fp 004be758
I/DEBUG ( 2173): ip aa4770fc sp 4c2f5b50 lr aa1112bf pc aac0a5ac cpsr 48000030
I/DEBUG ( 2173): #00 pc 0000a5ac /system/lib/libsqlite.so
I/DEBUG ( 2173): #01 pc 001112bc /system/lib/libwebcore.so
I/DEBUG ( 2173): #02 pc 001118e2 /system/lib/libwebcore.so
I/DEBUG ( 2173): #03 pc 00111a80 /system/lib/libwebcore.so
I/DEBUG ( 2173):
I/DEBUG ( 2173): code around pc:
I/DEBUG ( 2173): aac0a59c f7ff60e3 2000fd49 bf00bd70 4604b570
I/DEBUG ( 2173): aac0a5ac 460d6cc0 f7ff4616 f8c4fd9d 230150e0
I/DEBUG ( 2173): aac0a5bc开发者_运维百科 60e4f8c4 508cf8d4 f885e002 68ad30ff
I/DEBUG ( 2173):
I/DEBUG ( 2173): code around lr:
I/DEBUG ( 2173): aa1112ac 68004905 e0021859 68002100 f6f9460a
I/DEBUG ( 2173): aa1112bc bd10ec32 0036583c ffc9a849 4604b570
I/DEBUG ( 2173): aa1112cc 46281d05 fd64f20b 46286826 60263e01
I/DEBUG ( 2173):
I/DEBUG ( 2173): stack:
I/DEBUG ( 2173): 4c2f5b10 00000000
I/DEBUG ( 2173): 4c2f5b14 aa31c6d3 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b18 00000000
I/DEBUG ( 2173): 4c2f5b1c aa011171 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b20 00000000
I/DEBUG ( 2173): 4c2f5b24 afe3ae08 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b28 afe3db7c
I/DEBUG ( 2173): 4c2f5b2c afe0f170 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b30 00000000
I/DEBUG ( 2173): 4c2f5b34 afe3ae08 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b38 00595dec [heap]
I/DEBUG ( 2173): 4c2f5b3c afe0f170 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b40 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b44 4c2f5b74
I/DEBUG ( 2173): 4c2f5b48 df002777
I/DEBUG ( 2173): 4c2f5b4c e3a070ad
I/DEBUG ( 2173): #00 4c2f5b50 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b54 4c2f5b74
I/DEBUG ( 2173): 4c2f5b58 aa476ae0 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b5c aa1112bf /system/lib/libwebcore.so
I/DEBUG ( 2173): #01 4c2f5b60 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b64 aa1118e7 /system/lib/libwebcore.so
D/Zygote ( 2181): Process 6753 terminated by signal (11)
I/ActivityManager( 2237): Process com.myapplication.android (pid 6753) has died.
XML:
<WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:theme="@style/Theme.NoBackground"
android:id="@+id/webView"/>
Code:
webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
WebViewClient wv = new MyWebViewClient();
webView.setWebViewClient(wv);
/**
* Customized webview client to allow mp4 to play in mediaplayer.
*/
final class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp4")) {
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
view.getContext().startActivity(intent);
return true;
} else {
return super.shouldOverrideUrlLoading(view, url);
// instead of the line above, I have also tried this before without any difference:
// view.loadUrl(url);
// return true;
}
}
I conclude this is a bug. Bug report is at http://code.google.com/p/android/issues/detail?id=12097 and I also got Mark Murphy confirming on the Android Dev mailing list that it's probably a low level Android OS bug.
精彩评论