この記事では、 Crosswalk Projectと呼ばれる興味深いプロジェクトに関する2部構成の短いシリーズを開きます。 その中で、CrosswalkをAndroidアプリケーションに統合し、それを通常のアプリケーションのシステムWebViewの代替として使用する問題に対処します。
「通常」とは、HTML5アプリケーションやネイティブC ++コードではなく、Android SDKを使用した古典的なJavaプロジェクトを意味します。 そして以来 Crosswalkは、主にHTML5アプリケーションを起動するためのランタイムとして使用されるため、用語を混同しないように、このプロジェクトを通常のものと呼びます。
最初の部分では、CrosswalkをAndroidアプリケーションに統合し、システムAndroid WebViewの代わりにCrosswalk WebViewを使用することについて直接話したいと思います。 第2部では、統合中にCrosswalkを使用する際の微妙な違いと困難さについて説明し、一般的な結論を導きます。
横断歩道とは何ですか?
Crosswalk Projectは、HTMLアプリケーション用のオープンソーステクノロジー上に構築されたランタイムです。 Crosswalk Projectの基盤はGoogle Chromiumです。 Crosswalk Project自体もオープンソースプロジェクトであり、 BSDライセンスの下で配布されています。
Crosswalkは、Webプラットフォームの既存の機能を拡張します。以下は、作成者が注目している機能の小さなリストです。
Crosswalkを使用すると、次のことができます。
- 最新のWebブラウザーで使用可能なすべての機能を使用してください:HTML5、CSS3、JavaScript。
- 最新の推奨および進化するWeb標準にアクセスできます。
- ほとんどの主要なWebブラウザーでは使用できない実験的なAPIを使用します。
- 独自のランタイムで配布を通じてアプリケーションの更新サイクルを制御します。
- アプリケーションに特別な拡張機能を追加して、Crosswalkまたは標準のWebプラットフォームで提供されていない特定の機能の数を増やします。
そのため、Crosswalkは主にHTML5アプリケーションのランタイムを使用することを目的としており、バージョン4.0からCordovaと統合されています。 したがって、ハイブリッドアプリケーションの開発者の間では非常によく知られていますが、Java開発環境ではあまり知られていません。
Crosswalkは、通常のAndroidプロジェクトでシステムWebViewの代替として使用できます。 Crosswalkは、4.0以降のAndroidのすべてのバージョンを公式にサポートしています。 この場合、AndroidのバージョンとこのバージョンのシステムでのWebViewの実装の制限に依存しないようにするスタンドアロンブラウザーを取得します。
横断歩道コンポーネント。
Crosswalkの作成者は、システムWebViewとの完全な互換性を目指していませんでした。 ただし、一般に、Android 4.4までのシステムブラウザーインターフェイスのかなり近いコピーがあり、これによりシステムWebViewもChromiumに基づいて開始されました。 したがって、残念ながら、Crosswalkでは、Android API 21を使用した非常に便利でアクセス可能な呼び出しは見つかりません。
public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
Crosswalk 10以降、著者は標準インターフェイスからさらに離れることを決定し、パブリックAPIにいくつかの追加の呼び出しを追加しました。 CrosswalkのさまざまなバージョンのJavadocは、 公式Webサイトで見つけることができます。以下では、現時点での最新リリースバージョンである14番目のバージョンのいくつかの重要なポイントを検討します。
Crosswalkには、Crosswalk WebView(またはXWalkView)自体と以下が含まれるようになりました。
- XWalkResourceClient-リソースをロードするときのコールバックとイベント。
- XwalkUIClient-UIのコールバックとイベント。
- XWalkNavigationHistory-XWalkViewの遷移履歴。
- XWalkPreferences-横断歩道の環境設定。
- JavascriptInterface-JavaScriptから利用できるメソッドの注釈。 システム注釈と同じ。
上記のクラスに加えて、ブラウザアプリケーションへの統合を容易にするいくつかの補助クラスとクラスがありますが、私は使用していません。 たとえば、XWalkApplicationおよびXWalkActivityです。
プロジェクトでの横断歩道の統合。
XWalkViewと説明されたソリューションが統合されたソースコードは、 GitHubで入手できます 。
一般的に、Eclipse / ADTを使用して開発されたプロジェクトにCrosswalkを統合する必要がある場合、Crosswalkの統合は非常に簡単です。これは、これに関する優れた公式ガイドです。 ここでは、Android Studioを使用したプロジェクトへの統合について説明します。 基本的に、Crosswalkライブラリを接続することで構成され、他のすべての操作は標準のWebViewを使用する場合とほとんど変わりません。
1. Android Studioで新しいプロジェクトを作成する必要があります。 たとえば、空のアクティビティと、API 14からのサポートを含むプロジェクトを作成しました。
2.リポジトリをCrosswalkアセンブリに接続し、プロジェクトアセンブリ自体を選択します。 私はバージョン14.43.343.17で利用可能な最新のものを使用しています:
repositories { maven { url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2' } } dependencies { compile 'org.xwalk:xwalk_core_library:14.43.343.17' }
3.ネットワークを使用するための許可をAndroidManifest.xmlなどに追加します。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
許可の完全なリストは、上記の公式ガイドに記載されています。 場所、カメラ、オーディオ録音へのアクセスが含まれます。 単純なブラウザー実装の場合、それらのすべては必要ありません。 例では、Crosswalkキャッシュを保存するために、インターネット自体にアクセスし、ストレージに書き込むためのアクセス許可のみを指定します。
4. XWalkViewを使用するレイアウトに追加します。 簡単な例:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <org.xwalk.core.XWalkView android:id="@+id/xwalkview" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
5.アクティビティのコードにURLをロードするには、次の呼び出しを追加する必要があります。
mXWalkView = (XWalkView) findViewById(R.id.xwalkview); mXWalkView.load("http://stars.chromeexperiments.com/", null);
6.システムWebViewと同様に、クラスを接続してXWalkViewから通知を受信できます。
mXWalkView.setResourceClient(new MyResourceClient(mXWalkView)); mXWalkView.setUIClient(new MyUIClient(mXWalkView));
さらに、HTML5アプリケーションのベースとしてXWalkViewを使用する場合、CrosswalkにメッセージをブロードキャストするためのonActivityResult、onNewIntentなどのメソッドをオーバーライドできます。 たとえば、onActivityResultはJavaScriptダイアログからのイベントの処理にも使用されます。 これに、HTML5アプリケーションの場合、XWalkActivityを継承することを追加できます。XWalkActivityでは、必要なすべての瞬間が既に実装されています。
実装のいくつかのニュアンス。
すぐに注意を払う必要があるCrosswalk実装のいくつかのポイントを次に示します。
- XWalkViewはSurfaceViewまたはTextureViewを使用してレンダリングします。 したがって、デバイスとエミュレーターの両方ですばやく描画されます。 ただし、これにより、XWalkViewイメージをアニメートおよび操作するときに問題が発生します。
- ベースビューはSurfaceViewです。XWalkViewをアニメーション化する場合は、TextureViewを使用する必要があります。 選択するには、XWalkView自体を作成する前に、XWalkPreferencesクラスを介してパラメーターを設定する必要があります。
XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true);
- XWalkPreferencesはWebSettingsに類似しておらず、Crosswalk環境の設定が含まれています。 WebSettingsは明示的に使用できません。すべての標準パラメーターはデフォルトですでに有効になっています(JavaScriptサポートなど)。
- ナビゲーション履歴はXWalkView自体からはアクセスできず、XWalkNavigationHistoryクラスによって制御されます。 前後に移動したり、移行が可能かどうかを調べたりする場合は、次の方法を使用する必要があります。
mWebView.canGoForward() == mXWalkView.getNavigationHistory().canGoForward() mWebView.clearHistory() == mXWalkView.getNavigationHistory().clear()
- setResourceClient()およびsetUIClient()メソッドは、標準のメソッドとは異なり、パラメーターとしてnullを受け入れません。 したがって、この方法では、「空の」クラスをインストールするか、XWalkView自体を破壊することによってのみ、アラートをオフにすることはできません。
2番目の記事で 、より複雑な点とその可能な解決策について説明しました。
結論
Crosswalkについて簡単に説明すると、これは適切なサポートを備えた非常に便利で優れたソリューションです。 特にアクティブな開発プロセスを考慮すると、HTML5アプリケーションのランタイムは非常に有望に見えます。 ハイブリッドアプリケーションを作成するときに使用することをお勧めします。