Chromebook などの ChromeOS デバイスでは、Google Play ストアと Android アプリがサポートされています。この記事では、スマートフォンやタブレット向けに設計した既存の Android アプリを Chromebook 用に最適化することを想定しています。Android アプリの作成の基本については、初めての Android アプリを作成するをご覧ください。
アプリのマニフェスト ファイルのアップデート
まずは、Chromebook と Android を実行する他のデバイスでのハードウェアとソフトウェアに関する主な違いを考慮して、マニフェスト ファイルをアップデートします。
ChromeOS バージョン M53 より、android.hardware.touchscreen
機能の必要性を明示的に宣言していない Android アプリもすべて、android.hardware.faketouch
機能をサポートする ChromeOS デバイスで動作するようになりました。ただし、すべての Chromebook でアプリを動作させるには、android.hardware.touchscreen
機能が要求されないようにマニフェスト ファイルを更新します(下記の例を参照)。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... > <!-- Some Chromebooks don't support touch. Although not essential, it's a good idea to explicitly include this declaration. --> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> </manifest>
搭載されているセンサーセットはハードウェア デバイスによって異なります。Chromebook には、GPS や加速度計など、Android モバイル デバイスに搭載されているセンサーがすべて搭載されているとは限りません。ただし、センサーの機能が別の方法で提供される場合があります。たとえば、GPS センサーが搭載されていない Chromebook でも、Wi-Fi 接続に基づいて位置情報データが提供されることがあります。Android プラットフォームでサポートされているセンサーの詳細については、センサーの概要をご覧ください。
センサーを利用できるかどうかに関係なく Chromebook でアプリを実行させる場合は、センサーが要求されないようにマニフェスト ファイルを更新します。
Chromebook では、一部のソフトウェア機能がサポートされません。たとえば、カスタム IME、アプリ ウィジェット、ライブ壁紙、アプリ ランチャーを備えたアプリは、Chromebook ではサポートされず、インストールできません。Chromebook でサポートされていないソフトウェア機能の一覧については、互換性のないソフトウェア機能をご覧ください。
ターゲット SDK のアップデート
アプリの targetSdkVersion
属性を最新の API レベルに更新すると、Android プラットフォームのすべての改善点を利用できます。さまざまなバージョンにおける Android プラットフォームの改善点を確認する。
ネットワーク要件の確認
Chromebook は、Docker や LXC と同様に Android OS 全体をコンテナで実行します。つまり、Android はシステムの LAN インターフェースに直接アクセスしません。IPv4 トラフィックはネットワーク アドレス変換(NAT)の内部レイヤを通過し、IPv6 ユニキャスト トラフィックは追加のホップを経由してルーティングされます。
ほとんどの場合、Android アプリからインターネットへのアウトバウンド ユニキャスト接続は現状のままで機能します。一般に、インバウンド接続はブロックされます。Android からのマルチキャストまたはブロードキャスト パケットは、ファイアウォールを介して LAN に転送されません。
マルチキャスト制限の例外として、ChromeOS は Android と LAN インターフェースの間で mDNS トラフィックを転送するサービスを実行します。そのため、LAN セグメント上の他のデバイスを検出するには、標準のネットワーク サービス検出 API を使用する方法が推奨されます。LAN 上のデバイスを検出したら、Android アプリで標準の TCP または UDP ユニキャスト ソケットを使用して通信できます。
Android から発生した IPv4 接続では、ChromeOS ホストの IPv4 アドレスが使用されます。内部的には、Android アプリはネットワーク インターフェースに割り当てられたプライベート IPv4 アドレスを認識します。Android コンテナには専用のパブリック IPv6 アドレスがあるため、Android から発生した IPv6 接続では、ChromeOS ホストとは異なるアドレスが使用されます。
クラウドとローカル ストレージの効果的な使用
Chromebook では、ユーザーが別のデバイスへと簡単に移行できます。ユーザーが以前とは別の Chromebook を使い始める場合、ログインするだけですべてのアプリが元どおりに表示されます。
この機能を使用する場合は、アプリのデータをクラウドにバックアップして、デバイス間で同期できるようにしてください。ただし、アプリの通常の動作にインターネット接続が必要となることは望ましくありません。代わりに、デバイスがオフラインの場合はユーザーの作業をローカルに保存し、デバイスがオンラインに戻ったときにクラウドと同期します。
Chromebook は学校などで多くのユーザーと共有される場合があります。ローカル ストレージには限りがあるため、デバイスからアカウント全体を(ストレージとともに)いつでも削除できるようにする必要があります。教育機関向けの設定では、このシナリオを考慮に入れてください。
アプリの新しいテストケースの開発
アプリのテストケースを開発するには、まず適切なマニフェスト フラグを指定します。特に、screenOrientation
を unspecified
に設定することを検討してください。横向きを指定する場合は、タブレットでの操作性が最適になるように sensorLandscape
を使用することを検討してください。
デスクトップ環境で特別なサイズや画面の向きを必要とする場合は、サイズまたは画面の向きのヒントとしてメタタグを追加することを検討してください。スマートフォンにサイズと向きを指定するには、代わりにレイアウト defaultHeight
、defaultWidth
、または minHeight
属性を指定します。
特定のデバイス カテゴリに対して特定の入力デバイス処理を利用する場合は、android.hardware.type.pc
を指定して入力互換モードを無効にします。
なんらかのネットワークを使用する場合は、接続の問題が解決された後や、デバイスがスリープモードから復帰した後に、アプリがネットワークに再接続できることを確認してください。
テストプランで使用できる ChromeOS での Android アプリのテストケースのリストをご確認ください。これらのテストケースでは、ChromeOS デバイス上での実行を想定して Android アプリを準備する必要がある一般的なシナリオを網羅しています。
マルチウィンドウと画面の向きの変更
ChromeOS のマルチウィンドウ環境では、状態の持続や取り消しをより明確に行うことができます。必要に応じて状態を保存、復元するには、ViewModel
を使用します。
状態の持続性をテストするには、しばらくの間アプリを最小化し、リソースを消費する別のプロセスを開始してからアプリを復元して、アプリが元の状態に戻ることを確認します。
全画面表示キー(F4)を押して最大化し、元に戻すことでウィンドウのサイズ変更をテストします。自由形式のサイズ変更をテストするには、まず開発者向けオプションで有効にしてから、アプリがクラッシュすることなく、スムーズにサイズが変更されることを確認します。
ChromeOS デバイスでノートパソコン モードからタブレット モードへの変更がサポートされている場合は、モードを切り替えて、すべてが想定どおりに動作することを確認します。タブレット モードでデバイスを回転させて画面の向きが変わることをテストし、ノートパソコン モードに戻します。この手順を数回繰り返します。
UI 要素や位置情報に基づくタッチ入力をオフセットして、トップバーがアプリに影響しないことを確認します。ChromeOS デバイスの場合は、アプリのステータスバー領域に重要な情報が表示されないことを確認してください。
カメラやその他のハードウェア機能(ペンなど)を使用する場合は、前述のウィンドウとデバイスの変更時に正常に機能することを確認してください。