Androidアプリの複数端末対応を考える

端末に依存しないアプリを開発する
さて、一口に端末依存といっても、さまざまな要素があります。ここでは大きく、「表示」、「操作」、そして「機能」の3つに分けて考えてみましょう。
「表示」は、画面の表示内容にかかわる部分です。
例えば、設定でユーザーが選択している言語が日本語か英語かによって表示する言語を切り替えたり、また、画面の解像度やディスプレイの向きによって一画面に表示する内容やレイアウトを変えたりする必要があります。
「操作」は、ユーザーが端末を操作する入出力装置にかかわる部分です。
前述のとおり、Xperiaには、HT-03Aにはある「トラックボール」が搭載されていません。従って、トラックボールがあることを前提に設計すると、Xperiaでの操作ができなくなってしまいます。
また、先に述べたように、ハードウエアのキーボードの有無や、検索キーなどの特殊キーの有無についても検討しておく必要があります。
「機能」は、端末自身に備わる機能にかかわる部分です。
Androidでは、搭載しているセンサー・デバイスの種類や位置情報を取得する手段(衛星測位/基地局情報)が共通であることも保証されていません。このため、XperiaにあってHT-03Aに無いセンサー、またその逆も存在するのです。
位置情報やセンサーを活用するアプリの場合、機能そのものが存在しない場合は、手の打ちようがありません。しかし、利用する機能が無い場合にはメッセージを出すなどして、ユーザーに非対応の端末であることを通知する必要があるでしょう。
以上、具体的な対応方法については後の回に説明するとして、アプリを開発する上では、表示や操作に関する対応を、検討する指標にしてください。
大切なのは、「同じこと/あること」を前提に考えるのではなく、「違うこと/無いこと」を前提に考えるということです。機能の違いを確認し、その差分を埋めていく。複数端末への対応は、地味で、しかし非常に大切な作業です。
全機種テストの恐怖
複数端末対応について話をすると、「現在使用されている端末の全機種を使ってテストしなければならないのか」という質問を受けることがありますが、個人的にその必要は無いと考えています。
なぜなら、上に挙げた3つのうち「表示」や「操作」に関しては、かなりの部分を、コードそのものを変更せずに対応できるからです。
また「機能」に関しても、機能そのものの有無を検出したり、最適な代替手段を選択する補助的なAPIが用意されているので、それらを利用してケースごとの処理を切り替えたり、場合によっては代替処理を実装したりすれば事足りるのです。
さらに、アプリケーションの挙動は、多くの場合、エミュレータを適切に設定することで検証が可能になるので、実際の端末上で動かさなければ現象が再現できないことは極めてまれです。
(ここで言う複数端末への対応とは、各端末の「表示」「操作」「機能」の違いを意識して対応することを言います。同じバイナリで、端末固有のエラーが発生しないかを検証/対応する作業ではないことをご理解ください)
しかしながら、これまでの携帯アプリの開発に慣れている人ほど、全機種テストに対する恐怖が根強くあるようです。
そこで、次のページでは、実際に複数端末対応の仕組みの中心になる「リソース・マネージャ」について見ていきましょう。