Androidアプリの複数端末対応を考える
リソース・マネージャを知る
Androidアプリケーション開発では、処理を担当する「コード」と、文字列や画像などの「リソース」を分離することが推奨されています。
Androidプロジェクトの作成時に自動生成されるsrcフォルダ以下が「コード」。resフォルダ以下が「リソース」を管理するフォルダです。「リソース」として管理される情報は、文字列や画像、音声、動画などがあります。
開発者が、res以下の適切なフォルダに、画像や音声そのほかのファイルを配置すると、開発環境は自動的に、それぞれのリソースに対して、ユニーク(一意)な「リソースID」を割り当てます。
そして、アプリケーションから、リソースに登録した画像を表示する、または音声を再生する際には、コード上から表示したい/再生したいリソースのリソースIDを指示すると、「リソース・マネージャ」が、指定されたリソースIDを元に目的のリソースを特定して、コード側に返します。
このようにして、「リソース・マネージャ」は、コードとリソースを結びつけているのです。
この「リソース・マネージャ」には、もう1つ大きな役割があります。リソースを特定する時に、端末の設定や状態に応じて、指定されたリソースIDに対応した複数のリソースの中から、最適なものを自動的に選択するのです。
先ほど、「リソースIDは一意だ」と述べたのに、複数のリソースの中から選択というと、矛盾していると思われるかも知れません。
確かに、リソースIDは全体に対して一意です。しかし、1つのリソースIDに対して複数のリソースが存在するのです。
リソースには、追加の際にそれぞれ「修飾子」を指定できます。同じリソースでも、これらの修飾子の指定が違えば、重複して登録ができます。
そして、リソース・マネージャは、これらの修飾子をキーに、どのリソースを選択するかを決定します。
指定できる修飾子は、例えば画面の解像度、ディスプレイの大きさ、キーボードの有無などさまざまなものがあり、1つ、または複数を組み合わせて指定することができます。
これら修飾子の指定をきめ細かくすることが、リソース・マネージャを使いこなす、ひいては複数端末に対応していくために必要不可欠なのです。
まとめ
いかがだったでしょうか。ここまで駆け足で見てきましたが、次回以降はいよいよ、「表示」、「操作」、「機能」の違いを乗り越えて、複数端末に対応できるように、サンプル・アプリの開発を進めていきます。
補足になりますが、Androidで互換性の問題が顕在化するのは、今回が初めてではありません。米国に目を向けてみれば、「HTC Magic」(HT-03Aと同等の機種)以前に、「HTC G1」という端末が販売されています。
G1は、世界初のAndroid端末であり、ハードウエアのフル・キーボードを備えています。G1しか無かったころには、当時の開発者、特にゲーム開発者は、ハードウエア・キーボードを使って操作するゲームを数多くリリースしていました。
しかし、後から登場したHT-03A(HTC Magic)には、ハードウエア・キーボードは搭載されていません。そのため、HT-03Aの発売直後は、HT-03Aで操作ができないゲームが続出するという事態が起こったのです。
その後、「Motorola Droid」や「Nexus One」といったさまざまなAndroid端末が発売され、海外では、複数の端末の存在が当たり前になっています。しかし、冒頭で述べたとおり、2台目の端末が発売されるのは、日本ではこれが初めてのことです。
ハードウエア・キーボードの有無のような極端な違いはないにせよ、HT-03AとXperiaにも、明白な違いがあります。また、KDDIやソフトバンクモバイルが発売する予定のAndroid端末も、それぞれが異なる特徴を持っています。
今後、さらに端末が増えた時に、複数端末の対応で混乱が起こらないように、私たち開発者は、あらかじめ準備しておく必要があると私は考えています。
本連載が現在、そして将来にわたって、開発者の皆さんのお力になれれば幸いです。