ChromeOS 向けアプリの作成を開始する

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 には、Android ハンドヘルド デバイスに搭載されているセンサー(GPS や加速度計など)がすべて搭載されていない場合があります。ただし、センサーの機能は別の方法で提供されている場合があります。たとえば、Chromebook に GPS センサーがない場合もありますが、Wi-Fi 接続に基づいて位置情報データを提供します。Android プラットフォームがサポートするセンサーの詳細については、センサーの概要をご覧ください。

センサーが利用可能かどうかに関係なく Chromebook でアプリを実行する場合は、センサーが不要になるようにマニフェスト ファイルを更新します。

一部のソフトウェア機能は Chromebook ではサポートされていません。たとえば、カスタム IME、アプリ ウィジェット、ライブ壁紙、アプリ ランチャーを提供するアプリはサポートされておらず、Chromebook にインストールすることはできません。Chromebook でサポートされていないソフトウェア機能の一覧については、互換性のないソフトウェア機能をご覧ください。

ターゲット SDK のアップデート

Android プラットフォームのすべての改善機能を利用するには、アプリの targetSdkVersion 属性を利用可能な最新の API レベルに更新してください。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 の使用を開始した場合、ログインするだけですべてのアプリが表示されます。

この機能により、アプリのデータをクラウドにバックアップして、デバイス間で同期できるようにします。ただし、アプリの正常な動作のためにインターネット接続は依存しないでください。代わりに、デバイスがオフラインのときはユーザーの作業をローカルに保存し、デバイスがオンラインに戻ったらクラウドに同期します。

Chromebook は、学校などで多くのユーザーと共有することもできます。ローカル ストレージは無制限ではないため、アカウント全体(ストレージと合わせて)をいつでもデバイスから削除できます。教育的な場合は、このシナリオを念頭に置くことをおすすめします。

NDK ライブラリのアップデート

アプリで Android NDK ライブラリを使用し、そのターゲット SDK のバージョンが 23 以降である場合は、テキストの再配置が Android 6.0(API レベル 23)以降と互換性がないため、NDK ライブラリの ARM バージョンと x86 バージョンの両方から削除してください。NDK ライブラリにテキストの再配置が残っていると、特に x86 アーキテクチャを使用しているデバイスで実行している場合、Chromebook との互換性エラーが発生する可能性があります。

アプリの新しいテストケースの開発

アプリのテストケースを開発するには、まず適切なマニフェスト フラグを指定します。特に、screenOrientationunspecified に設定することを検討してください。横向きを指定する場合は、sensorLandscape を使用して、タブレットでのエクスペリエンスを最適化することをおすすめします。

デスクトップ環境で特別なサイズや向きが必要な場合は、サイズや向きのヒントとしてメタタグを追加することを検討してください。スマートフォンでサイズと向きを含めるには、代わりにレイアウトの defaultHeight 属性、defaultWidth 属性、minHeight 属性を指定します。

特定のデバイス カテゴリで特定の入力デバイス処理を行う必要がある場合は、android.hardware.type.pc を指定して入力互換モードを無効にします。

なんらかのネットワークを使用している場合は、接続の問題が解決するか、デバイスがスリープモードから復帰した後に、アプリがネットワークに再接続できることを確認してください。

テスト計画で使用できる Chrome OS 上の Android アプリのテストケースのリストを確認することをおすすめします。ChromeOS デバイスでの Android アプリの実行を想定している場合に、このテストケースに備えるべき一般的なシナリオについて説明します。

マルチウィンドウと画面の向きの変更

ChromeOS のマルチウィンドウ環境では、状態の永続性と再現に関する問題がより明確になります。必要に応じて、ViewModel を使用して状態を保存、復元します。

状態の永続性をテストするには、しばらくアプリを最小化し、リソースを大量に消費する別のプロセスを開始してアプリを復元し、元の状態に戻ることを確認します。

全画面表示キー(F4)を押して最大化、復元を行い、ウィンドウのサイズ変更をテストします。無料のサイズ変更をテストするには、まず開発者向けオプションで有効にします。次に、アプリがクラッシュせずにスムーズにサイズ変更されることを確認します。

ChromeOS デバイスでサポートされている場合は、ノートパソコンからタブレット モードに切り替えて、すべてが想定どおりに動作するかどうかを確認します。タブレット モードでデバイスを 1 回回転させて画面の向きの変更をテストし、その後ノートパソコン モードに戻ります。この手順を数回繰り返します。

UI 要素や位置情報ベースのタップ入力をオフセットして、トップバーによってアプリが妨げられないようにします。ChromeOS デバイスの場合は、アプリによってステータスバーの領域に重要な情報が表示されないことを確認してください。

カメラや別のハードウェア機能(ペンなど)を使用している場合は、前述のウィンドウやデバイスの変更時に正しく動作することを確認してください。