この記事は Chrome OS team による Medium Blog の記事 "Optimizing Android app experiences for Chrome OS" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


初めての Chrome OS 搭載 2-in-1 タブレットのリリースから、日本ドイツといった新たな市場での Chromebook の発売まで、Google では、Chrome OS デバイスのエコシステムを今日のアプリユーザーにもフィットするよう開発を進めてきました。画面が大きく多様なフォーム ファクタのデバイスでアプリを使用するユーザーはますます増えており、このような増大する新しいニーズにも柔軟に対応できるエコシステムを構築しています。

Android は、タブレット、折りたたみ式デバイス、Chrome OS 搭載のラップトップなど、その形態が常に進化する大画面デバイスを支えています。特に Chromebook はコンテナ内で Android フレームワーク全体を実行するため、ほとんどの Android アプリは Chrome OS 上で実行されます。つまり、1 つの Android APK をあらゆる Chrome OS デバイスで動作するように拡張することで、画面の大きいデバイスでより没入感の高い魅力的なエクスペリエンスを実現できます。
1 つの Android APK をあらゆる Chrome OS デバイスで動作するように拡張し、画面の大きいデバイスでより没入感の高い魅力的なエクスペリエンスを実現することができます。
昨年、Chrome OS 上での Android アプリの使用時間は 4 倍に増加しました¹。さらに、2018 年の第 4 四半期に米国で販売されたノートパソコンのうち 21% が Chromebook で、前年比の伸び率は 23% でした。²。

Chrome OS 向けにエクスペリエンスを最適化するには、わずかな調整を行うだけです。しかしこのわずかな調整が大きな効果をもたらします。一例として、大きい画面向けにアプリを最適化した Gameloft と TopHatch の成功事例をご紹介しましょう。Gameloft の「Asphalt 8: Airborne」では 1 日あたりのアプリユーザー数が 6 倍に、Chrome OS デバイスの収益は 9 倍に増加し、TopHatch のアプリ「コンセプト」では Chromebook での有料コンバージョン数が 2 倍に、Pixelbook でのアプリ利用時間は 20 倍にも増加しました。

今年の I/O では、アプリのデザインと動作をさまざまなフォーム ファクタや画面サイズに対応させるためのおすすめ方法を、いくつかのステップに分けて説明しました。以下に、Android デベロッパー向けのおすすめの方法、および Chrome OS に関する最新情報をご紹介します。

アプリのエクスペリエンスを Chrome OS 向けに最適化する

アプリの使い方は、ユーザーが使用するデバイスによって異なります。アプリで最適なユーザー エクスペリエンスを提供できるようにするには、以下の点を考慮する必要があります。

キーボード入力

アプリがキーボードをサポートしていない場合は、次のコードで実装できます。(ソースはこちら


ハイライト表示されている部分では、使用されないキーを super に渡しています。これにより、Chrome OS は、割り当てがない各キーの機能を無効にすることなく必要なコマンドを処理できます。

更新キー

Chrome OS のキーボードには独自のキーコード(KEYCODE_REFRESH)を持つ更新用のキーがあるため、アプリで KEYCODE_REFRESH イベントを処理できるようにする必要があります。すでに SwipeRefreshLayout を使用している場合は、この更新キーを押すと Chrome OS によりレイアウトが自動的に更新されるようになります。

タッチパッド

ユーザーがタッチパッド搭載のパソコンでアプリを使用している場合、スクロール操作にタッチパッドを 2 本の指でスワイプすることが予想されます。一方モバイルの場合、通常、画面を押したままドラッグしてスクロールします。Chrome OS は、このようなタイプの異なるモーション イベントを自動的に解釈します。そのため、たとえば図形描画アプリの場合、モバイルでスクロールしたときに描画されることはありません。

より高度なタッチ モーション イベントが必要なアプリでは、(event.getButtonState() == 0) のときは MotionEvents を無視する設定にすることで、ボタンの状態を確認し、(上記の図形描画アプリの例のように)不要なイベントを無視できるようになります。

NDK

Chrome OS 上のゲームとアプリは、ARM から x86 への変換が自動的に実行されます。ただし、パフォーマンスを優先する場合は x86 のサポートが不可欠です。主要な Chrome OS デバイスのほとんどが 64 ビット x86 チップセットを搭載しており、こうしたデバイスは今後ますます増えていくと思われます。すべてのデバイスで最適なパフォーマンスを提供できるよう、ネイティブ コードを使用する場合は、ARM、ARM64、x86、x86_64 をビルド対象にするようにしてください。

Android Studio ではこの手順を簡単に実装できます。Android App Bundle を使用すれば、すべてのビルド対象を Play ストア向けにパッケージ化して、アプリユーザーが必要なビルド対象のみを送信することができ、ダウンロード サイズを最小限に抑えられます。

レイアウト

大きな画面での使用を考慮して設計されていないモバイルアプリは、無駄なスペースが多かったり、ナビゲーションがぎこちなかったりします。皆さんもおそらく目にしたことがあるでしょう。レイアウトが変わってもアプリが最適な形で表示されるようにするには、1 つのリソース ファイルに、各画面サイズに対応するレイアウト バケットを複数用意します。


ナビゲーション パターン

さらに、アプリはどのような画面サイズでも使いやすくなければなりません。利用可能な画面の幅に応じて、下部ナビゲーション、サイド ナビゲーション、展開状態のサイド ナビゲーションのパターンを切り替えることで、縦向き、横長の縦向き、横向きのレイアウトを作成できます。

メールアプリの Reply は、画面サイズに応じて機能や使いやすさが調整されるようレイアウトが再設計されています。また、Adobe Acrobat では、Chrome OS 向けにアプリの機能を最適化する一方、さまざまなデバイスに対応するためレイアウト全体を設計し直しました。

マルチウィンドウ

複数のウィンドウを使用する場合、一般にそれぞれの画面では密度が異なります。Chrome アクティビティ内の onConfigurationChanged で「density」の変化をリッスンすることで、アプリの密度を瞬時に変更できます。

Chromebook での開発に関する最新情報

I/O では、Chrome OS に加えられたその他の改良点についてもご紹介しました。いずれの変更も、ウェブアプリと Android アプリのデベロッパーが、Chrome OS のスピード、シンプルさ、セキュリティというメリットを活かせるようにするためのものです。

Android Studio のワンクリック インストール

Android Studio を、ダウンロードしてクリックするだけでインストールできるようになりました。もうターミナルを使用する必要はありません。

USB デバッグに対する ADB の改良

サポートされているデバイスでは、デベロッパー モードを使用しなくても、スマートフォンを接続するだけで USB 経由でデバッグできるようになりました。

lint チェック

画面の向きが不適切またはロックされている、アクティビティのサイズを変更できない、ハードウェア要件に誤りがあるなど、Chrome OS に適さない機能が検出されます。

Linux でのオーディオ再生

Chrome OS コンテナでは、Audacity などの Linux 対応オーディオ ツールすべてをサポートします。

仮想デスクトップ

最新の Stable チャネルである M76 のフラグにより、複数のウィンドウやさまざまなプラットフォーム ユースケースが原因で画面が動作しなくなったときに、仮想デスクトップをオンにできるようになりました。

マルチモニター / HDCP の完全サポート

DRM で保護された動画コンテンツを外部モニターに映して視聴できます。
*この機能を利用するには、SurfaceView.setSecure() を使用します。

ARCore の統合

World Facing カメラを使用して、アプリで ARCore を利用できます。

Instant App のサポート

Android P デバイスのユーザーは、アプリやゲームをインストールせずに試すことができます。

Android アプリ用の外部ストレージ

Android アプリで外付けディスクの読み取りおよびスキャンができます。

Play ファイル

Chrome OS のファイル マネージャーで、Play ファイルの下位にある Android の /sdcard フォルダを表示できます。これにより、Chrome コンテナから Android ファイルの読み取りと書き込みができるようになりました。

Android Cloud ストレージでの DocumentsProvider およびドキュメント プロバイダ カスタムアプリのサポート

Chrome OS で Android DocumentsProvider インターフェースをサポートするようになりました。

アプリのプロファイリングによるアニメーション ジャンクの検出

統合されたプロファイリング ツールを使用して、システムの状態(バッファの使用状況、垂直同期、CPU の使用状況、GPU と CPU の周波数、システムの温度など)を経時的にモニタリングし、アニメーションのジャンクやシステムの速度低下の原因を確認できます。

あらゆる画面で最適なエクスペリエンスを提供する

アプリの利用場面は、今やモバイルにとどまりません。デバイスとフォーム ファクタの多様化が進む現在、ユーザーにとって、アプリは設計が優れていていつでも使いやすいことが当然の前提となりつつあります。この機会に、さまざまな入力方法のサポート、画面サイズに応じたレイアウトやナビゲーションの最適化、追加の画面領域の活用、ネイティブ コードでの x86 のサポートなどに対応しましょう。

Chrome OS 向け Android アプリの開発についてさらに詳しく知りたい方は、2019 年の I/O で開催したセッションの動画をご覧ください。

出典

¹ Google 内部データ(2018 年 3 月~2019 年 3 月)。
² The NPD Group, Inc.、リテール トラッキング サービス、米国、ノートパソコン、Chrome OS、ユニットベース、2017 年 10 月 8 日~2018 年 1 月 6 日と 2018 年 10 月 7 日~ 2019 年 1 月 5 日の比較。

Posted by Yuichi Araki - Developer Relations Team