入社して1ヶ月でAndroid開発してみた

こんにちは。trippieceエンジニアの平松です。
タイトル通り約1ヶ月前にtrippieceに入社し、現在は主にAndroidアプリの開発を行っています。trippieceに入社する前はJavaやJavaScriptを用いた大規模開発向けフレームワークの設計・開発等を行っていました。なお、Androidアプリの開発に関してはほぼ未経験でした。

今回は私がこの1ヶ月間で感じたAndroidアプリ開発のポイントについて、サーバサイドJavaやWebフロントエンドの開発と比較して書こうと思います。

特有の要素

Androidアプリの開発において、サーバサイドJava等の開発には見れらない特有の要素として以下が挙げられます。

標準オブジェクトとライフサイクル

スマホアプリは通常複数の画面で構成され、ユーザの操作により画面間を行き来します。Androidアプリではアプリそのものに対応するApplicationクラスと、各画面に対応するActivityクラスが用意されており、Android用の標準ライブラリがこれらのオブジェクトのライフサイクルを管理しています。
Activityのライフサイクルは下記の図で表されます。アプリ開発者は図で示された状態変化イベントに伴って呼び出されるメソッドの中身を実装する事でアプリの挙動を制御する事になります。

Activity lifecycle

Android Developers

デバイス機能

これはAndroidに特有というよりは、スマホアプリに特有の要素となりますが、スマホはカメラやセンサーなどの様々なデバイスを搭載しているため、それらにアクセスするための専用のAPIが用意されています。また、プッシュ通知やアプリ間通信などの外部連携に対応するための機構も用意されています。

類似の要素

前項とは逆に、類似しているものの多少異なる要素として以下が挙げられます。

UI実装

AndroidアプリのUI実装にはいくつかのパターンがありますが、標準的な手法としてはXMLによるビュー定義を利用します。JSPやHTMLと似た形式です。レイアウトや外観の細かい指定もHTMLのスタイルシート指定に似た形で行う事ができます。
Javaソースからの制御や書き換えも可能で、JavaやJavaScriptでDOMを扱うように利用する事ができます。ただ、Modelを使ったデータバインドやjQueryのような抽出や一括操作などのAPIは用意されていないため、ライブラリ等を利用しない標準実装ではUI周りの実装が煩雑になりがちです。

マルチスレッド

AndroidアプリもJavaで実装されているため、マルチスレッドで動作させる事が可能です。画面描画や操作に影響を与えずにバックグラウンドで処理を行いたい場合等に有用となります。
ただし、通常のJavaマルチスレッドプログラムと異なり、メインスレッドが明確に区別され、UIを操作できるのはメインスレッドに限られるという制約があります。バッググラウンドのスレッドからUI操作ができないという点はHTML5のWeb Workersと同じですね。

互換性問題

Webフロントエンドの開発を行っている方であれば経験があるかと思いますが、プラットフォームが複数存在する場合には互換性問題が生じます。Androidには端末やOSのバージョンが多数存在します。そして、端末側の問題によりOSのバージョンアップができないといったケースも多々あるため、サポートしなければならない端末とOSの組み合わせが多数存在する事になります。
Androidアプリの開発を行う場合はこれらの互換性を考慮した実装やテストが必要となります。加えて、端末のサイズも統一されていないため、様々な画面サイズを考慮したレイアウト設計も必要となります。

まとめ

Androidアプリ開発について、JavaやJavaScript等で開発を行ってきた方が把握しておくと良いポイントをまとめてみました。今回はAndroid用Javaそのものの機能を中心に整理してみましたが、これらを踏まえた上でアプリの内部構造をどう組み立てていくかという所にもまた様々なポイントがあります。その辺りはまた別途整理してみたいと思います。