この記事は Google Play モバイルアプリ ソリューション コンサルタント、Cheryl Lindo Jones による Android Developers Blog の記事 "Optimize your Android apps for Chromebooks" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Google Play に対応した Chromebook の増加に伴い、Chromebook 向けに Android アプリを最適化して、より多くのユーザーを獲得するチャンスが到来しています。変更を加えて、より大きな画面に合わせて最適化すれば、デスクトップ モニターに投影できる Samsung Galaxy S8 などのモバイル端末の魅力が高まります。Play Store にアクセスできる Chromebook の最新リストは拡大し続けています。

Chromebook 向けに Android アプリやゲームを最適化するときは、次の違いを考慮する必要があります。
  • 大きな画面サイズと高い解像度
  • マルチウィンドウとサイズ変更可能なウィンドウのサポート
  • さまざまなハードウェア入力方法: キーボード、トラックパッド、マウス、タッチペン
  • ノートパソコンやタブレットに切り替えて使用できるコンバーチブル型の Chromebook

Chromebook ユーザーは必要に応じて画面解像度を変更したり、入力方法を切り替えたり、ノートパソコンからタブレット モードに変更したりするため、Android アプリやゲームはこうしたすべての状況に適切に対応できる必要があります。

Google Play での検出可能性


Chromebook で利用できないハードウェア(セルラー機能や GPS)を Android アプリまたはゲームで必要とする場合、Android タブレット向けの Google Play と同じように、これらのタイトルは Chromebook ユーザー向けの Google Play に表示されません。デベロッパーは次のように対処して、Google Play での検出可能性を最大にする必要があります。

マニフェストで要求されるパーミッションと uses-features を設定し、Chromebook との互換性を確保します。一部の Chromebook には、スマートフォンが通常備えているタッチスクリーン、GPS、背面カメラがありません。マニフェストをアップデートして、Chromebook に通常搭載されていないセンサーやハードウェアが要求されないようにします。次に例を示します。

<uses-feature android:name="android.hardware.touchscreen"
    android:required="false" />

また、キーボード、トラックパッド、タッチペンなどの追加入力方法のサポートや大きな高解像度の画面とレスポンシブ レイアウトのサポートといった Chrome OS 固有の実装機能に関する説明を Chromebook ユーザーに提供するために、デベロッパーは、Google Play 上のアプリの説明をアップデートする必要があります。アプリやゲームが大画面でどのようにうまく動作し、そのタイトルが Chromebook で具体的にどう動作するかを示すスクリーンショットを提供するのも効果的です。

機能の最適化


ほとんどのアプリやゲームは、そのままでもすでに Chromebook で問題なく動作しますが、Chromebook ユーザー向けに最適化された一貫性のあるエクスペリエンスを提供する方法を模索することをおすすめします。

大画面とサイズ変更可能なウィンドウ
Chromebook ユーザーはマルチタスクを使う傾向があり、複数のアプリやゲームを一度に開き、画面サイズを有効に活用し、PC やノートパソコンのフォームファクタに応じて操作しています。また、Android スマートフォンとは異なり、必要に応じて、画面に適合するように画面解像度を変更したり、フォント、UI、グラフィックを拡大することもあります。このようなユースケースでは、マルチウィンドウおよび完全にサイズ変更可能なウィンドウのサポートが重要になります。画面解像度や向きが変更されたときに、グラフィック、フォント、レイアウト、タップ ターゲットが適切に調整される必要があります。

アプリやゲームのウィンドウにフォーカスがない場合でも、アプリやゲームが非表示とは限らない点にも注意する必要があります。たとえば、動画アプリが非アクティブなウィンドウで開いている場合、この動画アプリは別のアプリ ウィンドウの横に引き続き表示されている可能性があるため、「バックグラウンド」でコンテンツの再生を続ける必要があります。この場合、マルチウィンドウの使用を完全にサポートするには、onStop() で動画を一時停止し、onStart() で動画の再生を再開する必要があります。

Android N(API レベル 24 以降)を対象にすると、互換性の制限を使用しないことが Chrome OS ウィンドウ マネージャーに通知されます。これにより、ウィンドウのサイズ変更をサポートする際にデベロッパー側の柔軟性が高まり、制御しやすくなります。

Android N を対象としている場合、ウィンドウマネージャーが最適に処理されますが、N より前の API サポートでは、アプリの起動時に選択されたデフォルト サイズ、ウィンドウバーが表示された全画面モード、またはウィンドウ UI が非表示の没入型フルスクリーン モードのいずれかにウィンドウを切り替えることができます。

異なるウィンドウ モードを処理する際、アプリやゲームのウィンドウ エリアがウィンドウ コントロール バーの表示 / 非表示によってオフセットされることに注意する必要があります。アプリのアクティビティが常にウィンドウの (0,0) に設定されるとは限りません。レイアウトとタップ ターゲットを適宜調整してください。ウィンドウのサイズや画面の向きを変更したとき、ウィンドウ コントロール バーの表示または Chromebook 画面の高解像度設定が適切に処理されなかったために、アプリやゲームが応答しなくなることがよくあります。

画面の向きのサポート
Chromebook ユーザーは、ノートパソコンのフォームファクタから、Chromebook でアプリを使用するときは横向きがデフォルトの画面の向きであると考えています。ただし通常、ユーザーはスマートフォンを縦向きで操作するため、多くの場合、Android アプリでサポートされるデフォルトの画面の向きは縦向きであると想定されています。柔軟性を高めるため、縦向きと横向きの両方をサポートすることを強くおすすめします。一部の Chromebook はコンバーチブル型であるため、ユーザーはノートパソコン モードやタブレット モードに自由に変更でき、特定のユースケースごとの快適さに応じて、縦向きと横向きを切り替えます。

最も重要なことは、画面の向きやウィンドウ サイズが変更された場合に、可能な限り再起動を求めないことです。ユーザーがフォームに入力しているとき、一部のコンテンツを作成または編集しているとき、あるいはゲームのレベルが途中のときに、(意図的かどうかに関係なく)ウィンドウの変更のために進行が妨げられると、ユーザー エクスペリエンスが悪化します。

デベロッパーは onConfigurationChanged() を使用してウィンドウ構成の変更を監視し、次の行をアクティビティのマニフェストに追加することにより、こうした変更を動的に処理できます。

android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout".

ウィンドウが変更された際に再起動が必須になる場合は、onSaveInstanceState() メソッドを使用して状態を復元し、作業や状態が失われないようにする必要があります。

さらに、ユーザーがアクティビティ間を移動するときに、アプリの向きと一致していることが重要です。現在、Android アプリがルート アクティビティの向きに強制的に従うことで、一貫性が保持されるようになっています。ただし、これにより、アプリが横向きで起動し、通常は縦向きにレイアウトされているログイン画面がポップアップ表示され、レスポンシブではないレイアウトのために表示が最適化されない状況になる場合があります。また、出発点となるアクティビティがアプリの本来の向きとは異なる向きで起動する可能性もあります。アクティビティのレイアウトを設計するときは、発生する可能性のあるこれらのシナリオに留意してください。

最後に、Chromebook ではカメラの扱いと向きが異なることに注意する必要があります。言うまでもありませんが、Android スマートフォンの縦向き画面の上部には前面と背面にカメラがあります。Chromebook の前面カメラは横向き画面の上部にあります。多くの Chromebook は背面カメラを備えていません。アプリでカメラが必要な場合は、android.hardware.camera.any を使用して前面カメラにアクセスすることが最適です(背面カメラが利用できない場合)。繰り返しますが、デベロッパーは Android N を対象とする必要があり、可能な限り、アプリのサイズを変更できるようにして、カメラ プレビューが適切な向きで表示されるようにしてください。

複数の入力方法のサポート
Chromebook ユーザーは、キーボードやトラックパッドを使ってウェブページとアプリを操作することに慣れています。Android アプリ向けにこれらの入力方法を実際にサポートするには、以下の措置を講じる必要があります。
  • PC アプリのユーザーが慣れ親しんでいるコマンドのホットキーをサポートする
  • 矢印キー、Tab キー、トラックパッドを使ってアクティビティをナビゲートできるようにする
  • カーソルを合わせてコンテキスト メニューを開けるようにする
  • 他のトラックパッド操作をサポートして PC / ノートパソコン モードでの生産性を向上させる

メッセージング アプリでリターンキーを押してテキストを送信したり、Tab キーを押してフィールド間を移動したりできるようにするといった単純な操作を実装すると、Chromebook で使用するアプリの効率と統一感が高まります。

Chrome OS にはタッチスクリーン スクロールとその他のタップ イベントをエミュレートするための互換性モードがありますが、マニフェストで以下を宣言して互換性モードを無効にすることが最善策です。
<uses-feature
    android:name="android.hardware.type.pc"
    android:required="false" />

そうすると、キーボードとトラックパッドのカスタム サポートを詳細に定義して、Android アプリを最適化することができます。

また、キーボードで Tab キーや矢印キーを使って移動するときに、フォーカスを与える必要のある正しいビューをシステムが推測できます。ただし、最大のパフォーマンスを得るには、Tab キーによるナビゲーションには android:nextFocusForward 属性を、矢印キーによるナビゲーションには android:nextFocusUpandroid:nextFocusDownandroid:nextFocusLeftandroid:nextFocusRight 属性を使用して、アクティビティ マニフェストでキーボード ナビゲーションを処理する方法を指定します。

さらに、一部の Chromebook にはタッチスクリーンがないため、Chrome 上の最適化された Android アプリでは、ユーザーが通常のスワイプやマルチタッチ タップ操作を行ってアプリやゲームをナビゲートできるとは限りません。キーボードやトラックパッドのみを使って主要機能を実行できない場合、タッチスクリーンを備えていない Chromebook でのユーザー エクスペリエンスに大きな影響を及ぼします。既存のタッチスクリーン タップとスワイプ操作を、トラックパッドやキーボード操作で簡単に行えるようなものに「変換」することを試みてください。

新しい Chromebook はタッチペンをサポートしており、スケッチブックやメモ取りアプリ、写真編集アプリ、ゲームなどの高度な操作が可能です。デベロッパーには、利用可能な API を使用して、筆圧感知、チルト、イレイザーによる入力をサポートすることをおすすめします。ユーザーがタッチペンで文字を書いたり、描画したり、ゲームをプレイしたりするときに、手を画面に気楽に置けるようにするには、パーム リジェクションをサポートします。システムはユーザーが置いた手からの入力を無視しようとしますが、間違ったタップイベントが登録された場合は、Android アプリで ACTION_CANCEL イベントを適切に処理し、間違った入力を消去する必要があります。

これらの追加入力方法をすべてサポートすれば、ユーザーが Chromebook のノートパソコン モードをフル活用して、より効率的に仕事をして、創造力を発揮できるようになります。

さらに詳しく知る


この記事では多くのことを取り上げましたが、Chromebook 向けにアプリやゲームを最適化する方法についてさらに詳しく説明している追加リソースがあります。Chromebook でアプリを適切に動作させる方法のヒントが記載された Medium の投稿を読み、Google I/O 2017 のセッション Android Apps for Chromebooks and Large Screen Devices(Chromebook と大画面端末用の Android アプリ)をご覧ください。また、Android デベロッパー ウェブサイトには、Chrome OS 向けにアプリをビルドするためのトレーニング マテリアルがあります。質問がありましたら、Android デベロッパー コミュニティにアクセスして、ハッシュタグ #AndroidAppsOnChromeOS を使って質問を投稿してください。

このブログ投稿はどのくらい役に立ちましたか?

Reviewed by Takeshi Hagikura - Developer Relations Team