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

現在、Chromebook などの Chrome OS デバイスでは、Google Play ストアと Android アプリがサポートされています。この記事では、スマートフォンやタブレット向けに設計した既存の Android アプリを Chromebook 用に最適化することを想定しています。Android アプリ作成の基本については、初めてのアプリの作成をご覧ください。

アプリのマニフェスト ファイルのアップデート

まずは、Chromebook と Android を実行する他のデバイスでのハードウェアとソフトウェアに関する主な違いを考慮して、マニフェスト ファイルをアップデートします。

Chrome OS バージョン M53 より、android.hardware.touchscreen 機能の必要性を明示的に宣言していない Android アプリもすべて、android.hardware.faketouch 機能をサポートする Chrome OS デバイスで動作するようになりました。ただし、すべての 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>
    

搭載されているセンサーセットはハードウェア デバイスによって異なります。多くの場合、Android のモバイル デバイスには GPS と加速度計が装備されていますが、すべての Chromebook でこれらのセンサーを利用できるわけではありません。ただし、センサーの機能が別の方法で提供される場合があります。たとえば、Chromebook は GPS センサーを備えていなくても、Wi-Fi 接続に基づいた位置情報データを提供しています。Android プラットフォームがサポートするすべてのセンサーについては、センサーの概要をご覧ください。センサーを利用できるかどうかに関係なく Chromebook でアプリを実行させる場合は、センサーが要求されないようにマニフェスト ファイルをアップデートする必要があります。

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

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

targetSdkVersion 属性を利用可能な最新の API レベルにアップデートすると、アプリで Android プラットフォームのすべての改善点を利用できます。たとえば、Android 7.0(API レベル 24)ではマルチウィンドウのサポートが強化されています。アクティビティのサイズを自由形式で変更し、より自然に見せることができます。アプリ間でのドラッグ&ドロップ操作やカスタムのマウスカーソル用の API も利用できます。

ネットワーク要件の確認

Chromebook は、Docker や LXC と同様に Android OS 全体をコンテナで実行します。つまり、Android はシステムの LAN インターフェースに直接アクセスしません。代わりに、IPv4 トラフィックはネットワーク アドレス変換(NAT)の内部層を通過し、IPv6 ユニキャスト トラフィックは追加のホップを経由してルーティングされます。ほとんどの場合、Android アプリからインターネットへのアウトバウンド ユニキャスト接続は現状のままで機能しますが、一般にインバウンド接続はブロックされます。Android からのマルチキャストまたはブロードキャスト パケットは、ファイアウォールを介して LAN に転送されません。

マルチキャスト制限の特別な例外として、Chrome OS は Android と LAN インターフェースの間で mDNS トラフィックを転送するサービスを実行します。そのため、LAN セグメント上の他のデバイスを検出するには、標準のネットワーク サービス検出 API を使用する方法が推奨されます。LAN 上のデバイスを検出したら、Android アプリで標準の TCP または UDP ユニキャスト ソケットを使用して通信できます。

Android から発生した IPv4 接続では、Chrome OS ホストの IPv4 アドレスが使用されます。内部的には、Android アプリはネットワーク インターフェースに割り当てられたプライベート IPv4 アドレスを認識します。Android コンテナには専用のパブリック IPv6 アドレスがあるため、Android から発生した IPv6 接続では、Chrome OS ホストとは異なるアドレスが使用されます。

クラウドとローカル ストレージの効果的な使用

Chromebook の便利な機能の 1 つは、ユーザーが別のデバイスへと簡単に移行できることです。つまり、ユーザーが 1 つの Chromebook の使用を停止し、別の Chromebook の使用を開始する場合は、ログインするだけで、すべてのアプリが表示されます。

このエクスペリエンスをさらに改善するには、アプリのデータをクラウドにバックアップして、デバイス間で同期できるようにする必要があります。しかしながら、アプリの通常の操作がインターネット接続に左右されることは望ましくありません。デバイスがオフラインの場合はアプリでユーザーの作業をローカルに保存し、デバイスがオンラインに戻ったときにクラウドと同期する必要があります。たとえば、Google ドキュメントを使用すると、ユーザーはオフラインでドキュメントを編集し、デバイスがインターネットに接続した後で変更内容をクラウドに同期できます。

学校などで Chromebook を多くのユーザーと共有することもできます。ローカル ストレージには限りがあるため、アカウント全体を(ストレージとともに)デバイスからいつでも削除できます。教育機関向けの設定では、このシナリオを考慮に入れてください。

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

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

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

まず、適切なマニフェスト フラグが指定されていることを確認してください。たとえば、画面の向きを指定するフラグについては、screenOrientationunspecified に設定しておくのが適切です。画面の向きを landscape に指定する場合は、代わりに sensorLandscape を使用することも検討して、タブレットでの操作性が最適になるようにしてください。特別なサイズまたは画面の向きを要する場合は、サイズまたは向きの手がかりとして新しいメタタグを追加することも検討する必要があります(デスクトップ環境にのみ影響します)。スマートフォンでも変更したい場合は、代わりにレイアウト defaultHeightdefaultWidth、または minHeight を指定してください。

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

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

独自のテストの計画に使用できる Chrome OS での Android アプリのテストケースを確認することをおすすめします。これらのテストケースでは、Chrome OS デバイス上での実行を想定して Android アプリを準備する必要がある一般的なシナリオを幅広く網羅しています。

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

Chrome OS のマルチウィンドウ環境では、状態を持続して明確に再現できます。必要に応じて状態を保存、復元するには、ViewModel を使用します。

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

全画面表示キー(F4)を押して最大化し、元に戻すことでウィンドウのサイズ変更をテストします。開発者向けオプションで自由形式のサイズ変更を有効にして、アプリがクラッシュすることなく、スムーズにサイズが変更されることをテストします。

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

UI 要素や位置情報に基づくタッチ入力をオフセットして、トップバーがアプリに影響しないことを確認します。Chrome OS デバイスの場合は、アプリのステータスバー領域に重要な情報が表示されないことを確認してください。

カメラやその他のハードウェア機能(ペンなど)を使用する場合は、上記のようなウィンドウまたはデバイスの変更時に正常に機能することを確認してください。