Android SDKパッケージを覗いてみた
AndroidSDKのことは、ここでも書いたが、連休中に時間を作ってSDKのパッケージを覗いてみた。このエントリは時間の都合上、ドキュメントをざっと見た上での感想である。私がダウンロードしたSDKのバージョンに限定される話であることと、ドキュメントに記述されていること、私の勘違い等がある可能性もあるのであらかじめご了承いただきたいと思う。私自身、ドキュメントには書かれていないが、API自身のソースコードを精読してみつけた例外処理の仕様にひっくり返りそうになった経験もあり、ドキュメントを読むだけでは不十分と認識している。
前置きが長くなったが本題に。プログラミング言語はJava。アプレットのような小規模なものを書くことをイメージすると理解しやすいのではないかと思う。複雑なロジックを記述する必要がある場合はネットワーク経由でサーバ側で実装するのが妥当そうだ。ネットワークまわりはjava.netの多くがそのまま使えるようになっている。非常にアプリケーション寄りのことが書けるようAPIは抽象度の高いものになっている。クラスライブラリの規模はそれほど大きくない。以下にそのうちのいくつかをピックアップした。
- ネットワーク、ストレージまわり
ストリームとして抽象化されたファイルとネットワークに加え、key, valueの対からなるシンプルな記憶域(アプリケーションの設定に使うそうだ)がある。 - データベース問い合わせ用のインタフェース
基本的な部分は抽象クラスとして定義され、SQLiteベースのものは実装(具象クラス)がある。 - 情報公開用のストレージ
content providerという情報を公開することに特化したライブラリも含まれる。携帯で撮った写真を公開するために使えそうだ。 - 位置情報取得
GPSベース等、複数が用意されている。位置情報をユーザのコンテキストとして認識し、振る舞い(検索結果など)を変えるアプリケーションを書けるだろう。 googleとしては、google maps APIとの連携を期待しているのではないかと思う。 - 撮影画像取得
カメラで撮った写真にアクセスするためのAPIが定義されている。 - bluetooth, sensor
まだまだ具体的な機能の追加が必要になりそうだが、クラスが定義されていた。 - autocomplete
テキストの途中まで入力すると、その先の入力候補を提示するユーザインタフェース機能。ユーザの過去の履歴を使えるようなアプリケーション横断的に使えるような明示的なメソッドはみつけられなかった。過去の履歴や辞書を使ったりできるとよいように思う。 - イベントリスナ
UIイベントの処理はJavaのものを踏襲しているようで、Observerパターンとなっている。イベントに対応づけたい処理をメソッドとして記述し、Listener リストに登録しておく。
SDKドキュメントを読む限りJavaの開発経験があれば、既存の知識や今までの開発経験が生かすことができ、比較的スムーズに入っていけるのではないかと思う。
今後、私があるといいなぁと思ったものは以下のとおり。
- RFID関連のAPI
FelicaのようなRFID関連のAPIはみつけられなかった。Sensorというクラスが定義されており、これが使えなくはなさそうだけれども、現時点では役不足な感がある。あるいはbluetooth関連に位置づけられるのだろうか。 - 性能に関する参考資料
機能仕様がかいてある現行のドキュメントに加え、性能仕様に関する記述もほしいところである。Androidに限定しない話ではあるが、Java APIドキュメント(JavaDocベースのもの)をみると毎度思う。Write once, run anywhereのポリシーに反するとは思うのだが、CPUリソース等限定がきついので参考程度に性能に関する情報があるといいと思う。
現実問題として、開発の後期に発見された不具合ほど、修正コストが大きくなることがいわれている(たとえばBoehm先生の本やここ)。その原因の1つに性能要件が把握できていなかったことがある。設計段階で事前に非機能系の検証をするのが当たり前といえば当たり前なのだが、参考情報として性能仕様が書いてあるとかなり違ってくると思う。
これがほとんどコストをかけずに広範囲に配布できるのは、インターネットとソフトウェアならではの話だと思う。これをきっかけに「ちょっと携帯で動くアプリケーションを書いてみようかな」という方が増えれば幸いだ。携帯の実機はまだ先になるそうだが、AndroidSDKはここからダウンロードできる。アプリケーションのコンテストもやっているようなので、チャレンジされてはいかがだろうか。