なるようになるといいね

力は多くの場合、その人の思いを超えない。

Android開発を始める上でおすすめの4冊

Android開発を始めたばかりの僕が読みたかった本 - Rejasupoemと丸被ってますが、あまりにこの内容に共感しすぎてこれを書いた、というのが実際の話です。

Effective Java

Java SE6の名著。都合のいいことに、Androidの推奨開発環境も未だにJDK 1.6です。

中級者以上向けとされていますが、実体験としてJava初心者でも読めました。

当然、初読では分からない部分が多かったので、不明点を理解できるまで読み直し、調べながら、章ごとに内容をノートに要約しました。肝要なのは、それでも現時点の理解では突き詰められなかった点が出てくるかと思うので、それを洗い出して「何が分からないのか」を明確にしておくことです。

そうすれば実際にプログラミングしていくなかで、「あの時理解できなかったことはこのことか!」と成長を感じていけるので、これがものすごく楽しい。

しかしいつまで1.6なんだろうなぁ。GAEは1.7に移行したのに。

Smashing Android UI レスポンシブUIとデザインパターン

Android開発を始める上で、「Nexusでも買ってAndroidに慣れておこう」と気軽に考える人がいるかと思いますが、その試みは無駄に終わります。

それよりもAndroidのUIパターンを体系的に説明したこの1冊を読むべきです。

なぜなら、

  • Androidアプリには少なくない割合で、iOSのUIパターンを強引に模倣した「iOSの劣化移植」が存在する。
  • Android Designというスタイルガイドは存在するが、邦訳されておらず、遵守されているとは言い難い。
  • AndroidのバージョンによってハードウェアレベルでUIパターンが分断化されており、互換性等の理由で最新のUIパターンを採用しないケースがある。

以上の理由により、 Androidを実際に利用したところで、正しいAndroidのUIパターンは理解できない のです。

Smashing Android UIは技術書翻訳として信頼のおけるクイープ社の仕事であり、単なる日本語訳ではなく、邦訳版出版の時点で修正が入った箇所には注釈が入っており、安心して読めます。

GoogleAndroid関連の開発ドキュメントについては一切日本語化しない方針みたいですが、なぜなんでしょうね。

開発者向けドキュメントでもGoogle Maps関連など、邦訳が存在するケースがあるのですが、その基準が不明で、特にGAEなど一時期Python版に翻訳が存在していたのが謎すぎました。

今でこそ国内Python人口も広がっていると思うのですが、翻訳されたのは4年ほど前の話で、当時にPyでGAEなんて英断を下せる層がどれだけいたのか…。

公式ドキュメント

Javaを理解し、AndroidのUIパターンを理解したら、次は公式ドキュメントを読みましょう。

全部英語なので挫けたくなりますが、しかし、Android Trainingでは次の順番で学んでいきます。日本語化されている入門書籍の目次と比較すれば明らかですが、そのほとんどは未だにAndroid2.0を引き摺った、時代錯誤と言っても過言ではない内容であり、今から学ぶものとしては手に取る価値はないです。

  1. 初めてのアプリケーション
    • Android SDKのインストールが完了したら、Androidアプリケーション開発の基礎を学ぶためにこの講座から始めましょう。
  2. アクションバーを追加する
    • アクションバーはActivityを実装する上でもっとも重要なUI要素の一つです。API Lv11で導入されましたが、Android 2.1以上のデバイスで実行可能とするために、サポートライブラリを利用可能です。
  3. 異なるデバイスを対応する
    • 様々なデバイス規格に対して最適化されたユーザー体験を、単一のAPKで提供するアプリケーションを作成するための手法、代替リソースについて説明します。
  4. Activityのライフサイクルを管理する
    • AndroidのActivtyがどのように生成されそして破棄されるのか、そしてシームレスなユーザー体験を実現するためのライフサイクルメソッドの実装方法を説明します。
  5. Fragmentを用いて動的なUIを作成する
  6. データの保存
    • 端末にデータを保存する方法を学びます。扱うデータは一時ファイルであったり、ダウンロードしたアプリの追加データであったり、ユーザーのメディアであったり、構造化されたデータであったり、それ以外のものであったりします。
  7. 他アプリとの連携
    • 端末内の他のアプリを活用し、例えば写真を取得したり、住所を地図に表示するような高度なユーザーのタスクを実現するためのユーザー体験を構築する方法を説明します。

もっとも現実的にはActionBarActivityは機能が不足しているので、ActionBarSherlockの方がいいような気がするんだけど…。

なお、「GoogleAndroidの日本語ドキュメントを作らない」法則に反して、ActionBarCompatの日本語説明動画はあったりする。ほんとに基準が良く分からない上に、なぜ動画にしたのか…。

現場で使える〔逆引き+実践〕 Androidプログラミングテクニック

2012年出版なのでやや古い部分も出てきていますが、この本は本当に素晴らしい。

Android3以降のUIコンポーネントの解説から始まり、多岐に渡って実践的なテクニックが示されています。開発Tipsだけではなく、デザインパターンや、GUIの自動テスト、トレースログからボトルネックの解析、EMMAを利用したカバレッジ表示などアプリ品質を高めるための知識が充実しています。

個人的には以下の項が面白かったです。

  • Model-Fragment-ActivityによるMVCパターン
  • デザインパターンを利用したアプリ開発の効率化
    • プロセス分割によってsingletonが破綻することは書いてあっても、その対策法が載ってないのが不思議でしたが。Applicationjavadocを見逃さなければ問題ないのですけど。
  • Serializable vs Parcelable
  • リバースエンジリアリニングによる危険性と、その実践

この本を執筆した日本システム開発社は、今は亡きセカイカメラAndroid移植を担当していました。その過程で得られたOSの実装レベルまで言及した知見をネットに公開しており、それらも非常に参考になります。

JUnit実践入門

Androidのテスト本は何冊か出ています(前述した本にも自動テストに関して触れています)が、公式ドキュメントを読む前提として、自動テストに関する理解を深めたいのであれば、バランス的にはこの本が一番お奨めです。

オライリーの「入門 Androidアプリケーションテスト」はさすがの情報量なのですが、「入門」と付くだけあり公式ドキュメントの内容以上のものはありません。「Androidアプリテスト技法」は自動テストに対する観念的な話がつらつらと続いた後に、テストフレームワークの触りについて語られるだけ(MockContextの存在すら載っていなかったような…)なので、あまりお奨めしない本です。

JUnitについて理解のある人は、AndroidテストフレームワークはJUnit3までしか対応しておらず、またAndroidに関する記述も1章のみであり、JUnit4本の有用性は低いのでは?と考えるところですが、コアロジックをJUnit4でテストし、品質を担保した上でライブラリ化し、Android側から呼び出す…という手法を紹介しています。