Posted at
MonacaDay 3

Androidのフラグメンテーション問題とCrosswalk WebView Engineについて

More than 1 year has passed since last update.

:christmas_tree:Monaca Advent Calendar 2017:christmas_tree: 3日目の記事です。


フラグメンテーション問題とは

Android向けのHTML5モバイルアプリには、フラグメンテーション問題と呼ばれるものが存在します。

これはAndroid4系において、WebViewが端末毎に異なるために動作差異が発生してしまう現象のことを指しています。

ではWebViewが端末毎に異なるというのは、具体的にはどのような状態なのでしょうか。

まず一つは、ブラウザエンジンの違いです。

Android4.3までは、WebViewのエンジンがWebkitでした。4.4からはChromiumに変更されています。

もう一つは、端末のメーカーによるWebViewの調整です。

AndroidはオープンソースのOSですから、OS付属のWebViewにも手を加えることが可能で、各メーカーが独自の実装を加えている可能性があります。

なおAndroid5以降は、WebViewがOSから切り離されてGoogle Playから提供されるようになったため、上記の問題は発生しません。


Crosswalkとは

フラグメンテーション問題を解決する手段として、Crosswalkという名前のWebViewをアプリ内に含めて配布する方法があります。

CrosswalkはIntelが開発したChromiumベースのWebViewです。

OSのバージョンや端末のメーカーが何であれ、アプリ内に包含されているWebViewを使ってアプリを実行するため、動作差異が発生しないというわけです。


Crosswalkの利用方法

MonacaでCrosswalkを利用する場合、[Cordovaプラグインの管理]画面で「Crosswalk WebView Engine」プラグインを有効化します。

そしてプラグインの設定画面で、プロセッサのアーキテクチャとして ARM/x86のいずれかを選択します。

この設定をしておかないと、ビルドを行うことができません。

多くのAndroid端末ではARMアーキテクチャが利用されていますが、x86の端末もありますので、まずはARMを選択してビルド、次にx86を選択してビルド、といった手順で、両方のapkを入手しましょう。

Google Playに両方のapkを登録すると、フィルタリング機能により端末に合わせたapkがインストールされます。


Crosswalkは必要なのか?

前述の通り、Crosswalkが必要となるのはAndroid4系のみです。

Android公式の調査によると、2017年12月現在、Android4系のシェアは全バージョンの約1/5程度となっているようです。

https://developer.android.com/about/dashboards/index.html

これから新しくアプリを開発するのであれば、ターゲットOSは5系以上とするケースが多いでしょう。

実際、Intelは既にCrosswalkの開発を終了しています。

とはいえ、案件によっては4系をターゲットから外せないという状況もあるかもしれません。

そういった場合にはこの記事を参考にCrosswalkを利用してみてください。