Android標準のWebViewの代わりにChromeViewを使ってみた

Android標準のWebViewと同じAPIを持ちつつ、中身の実装がChromiumである「ChromeView」というライブラリを使ってみました。

pwnall/chromeview

経緯

WebViewを使ったAndroidアプリを開発していたときのこと。サイズが大きめのSVG画像をWebViewに読み込み、JavaScriptのtouchイベントを使って画像のスクロール・ズーム機能を実装しようとしていました。

ところが、実装が終わって動作確認したところ、スクロールやズームがもっさり・カクカクして使い物にならないレベルに。Androidの標準ブラウザアプリをつかっても同様。iOSのUIWebViewではサクサク動くのに!

一方、Android版Google Chromeを端末にインストールして試してみたら、今度はサクサク動きます。

調べてみると、Android標準のWebViewの機能やパフォーマンスは、Android版Chromeのそれよりもよろしくないらしいです。実はAndroid KitKat (4.4)から、WebViewの内部実装がChromiumに切り替わるらしく、それに期待しようとも思いましたが、2013年12月の時点でKitKatのマーケットシェアはたったの1.1%しかなく、時期的にまだまだ採用できない状態。

どうやって実装しようか途方にくれていた時に偶然見つけたのが、冒頭にも紹介したChromeViewというライブラリでした。

ChromeView

ChromeViewは、新しいChromiumのコードを使ったWebViewの実装です。Android標準のWebViewと同様のAPIを持ちながら、標準のWebViewには実装されていないHTML5やJavaScript等の機能を、Android Kitkat (4.4)より前のバージョンがインストールされた端末からも利用できるのが利点です。

Chromiumのバイナリはリポジトリに含まれているので、改めてChromiumのソースコードをコンパイルする必要はありません。最新のソースコードに追従したい場合は、コンパイルのためのガイドラインやスクリプトを参照・利用することで簡単にコンパイルできます。

肝心のパフォーマンスは?

標準のWebViewを使っている部分をChromeViewを使うように修正し、動作確認してみることに。

結論としては、体感的にはなりますが、SVG画像のスクロールやズーム操作が劇的に改善されました。

標準のWebViewが標準ブラウザと同じくらいのパフォーマンスなら、ChromeViewはAndroid版Google Chromeと対応する感じ。「これなら使えるなぁ」という印象です。

まとめ

Android標準のWebViewの代わりにChromeViewを使うことで、発生していたパフォーマンス上の問題を解決することができました。

今回のようなケース以外にも、他にもたくさん役立つ機会がありそうなライブラリです。まだまだKitKatが普及するには時間がかかりそうですし、WebViewに関するトラブルにぶつかった際には、利用を検討してみてはいかがでしょうか。

それでは!