0

私は自分のアプリに webview を持っていますが、これは通常、web サイトの読み込みに問題なく機能します。しかし、www.gmail.com を動作させることができません。www.gmail.comを開くと、ログイン ページが表示され、ログインしようとすると、画面が黒くなり、アプリ/プロセスが強制終了されます。

logcat にはあまり表示されません。以下のように奇妙なデバッグ情報がダンプされているだけです。

しかし、一般的に https サイトは正常に動作し、さらに複雑なログイン手順 (stackoverflow.com を開く、https を介して openid 経由でログインする、stackoverflow に戻るなど) はすべて、私の webview で問題なく動作します。これらの問題を引き起こしているのは gmail.com だけです。

編集: カスタム MyWebViewClient を webview に割り当てないと、アプリはクラッシュしませんが、デフォルトのシステム ブラウザーで gmail サイトが開きます。しかし、私はそれを望んでいません。自分の Web ビューのみで開くようにします。

http://code.google.com/p/android/issues/detail?id=12097でバグ レポートを作成しました。クラッシュを再現する非常に単純なサンプル プロジェクトが添付されています。

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"/>

コード:

    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;
    }
}
4

1 に答える 1

1

これはバグだと結論付けます。バグ レポートはhttp://code.google.com/p/android/issues/detail?id=12097にあります。Mark Murphy は Android Dev メーリング リストで、これはおそらく低レベルの Android OS のバグであると確認しました。

于 2010-10-28T15:57:37.197 に答える