良いAndroidアプリを作る139の鉄則

[表紙]良いAndroidアプリを作る139の鉄則

紙版発売
電子版発売

A5判/512ページ

定価3,278円(本体2,980円+税10%)

ISBN 978-4-7741-6525-7

本書の新版が発行されています。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

国内初のAndroid端末に標準搭載された『ポケット羅針盤』の開発を始め,全日本空輸株式会社の『ANA』や,NTTタウンページ株式会社の『iタウンページ』,株式会社三省堂の『三省堂辞書』など,数多くの開発実績を持つテックファ―ムが,Androidアプリ開発の現場で求められる知識を集大成。

「意図しない動作を回避する」
「強制終了しない」
「ユーザにストレスを感じさせない」
「マルチスレッドを使いこなす」
「電池にやさしいつくりにする」
「重要なデータを守る」
「機種依存に考慮する」
「品質を向上させる」
「安全にリリースする」

といった実践的なノウハウをおしみなくまとめた,かつてない1冊。

こんな方におすすめ

  • とりあえず動くアプリが開発できるが,現場で求められる知識が足りていないAndroidアプリ開発者

著者の一言

2014年現在,スマートフォン用のOSの中で世界シェア1位といえば,Androidです。スマートフォン以外にも多くの機器に使われ始めていることもあり,Android端末は最も身近な携帯機器といえるでしょう。

しかし,勢いのあるOSだからこそ,開発にはさまざまな苦労があります。普及しているがゆえに多種多様な端末があり,そのためにAndroid OSのバージョンや機種に依存する差違からは逃れることができません。Androidの正しい作法を知らずに,手元の端末で動くことだけを重要視して,場当たり的なアプリ実装をしてしまうと,後に多大な改修の手間に悩まされることになります。

テックファームには,2009年から現在まで5年間,Androidアプリを開発してきた実績があります。一例を挙げれば,国内初のAndroid端末に標準搭載された『ポケット羅針盤』の開発を始め,全日本空輸株式会社様の『ANA』や,NTTタウンページ株式会社様の『iタウンページ』,株式会社三省堂様の『三省堂辞書』など,有名なAndroidアプリの開発に携わってきました。また,高齢者,指や手が不自由な人のための支援アプリ『At-Scan』『At-Switch』を自社開発しています。その間,急速に進化を重ねるAndroid OS自体の歴史とともに,テックファームではAndroidに関するノウハウを蓄積してきました。

本書では,そのような現場で積み重ねてきたノウハウの一部や,開発にあたって理解していないと苦労するポイントなどを紹介しています。これから業務でAndroid開発に携わる方や,ほかのスマートフォンOSで開発経験がある方が,Androidの正しい作法や特性を理解し,より品質の高いアプリを開発し,スムーズなサービス運営まで配慮できるよう,経験則も含めて広い範囲の内容を収めました。

本書の読者としては,Android開発の経験がある人を想定していますが,基本的なJavaのソースコードを読めるプログラマであれば,Androidの経験がなくても,ソースコードを見ながら理解できるでしょう。

この本を品質の高いアプリを作れるようになるためのステップアップ材料にしていただければ幸いです。

目次

第1章 開発を円滑に進めるためのコツ

1.1 開発前に押さえておくべきポイントとは

  • 1 顧客の理解を得る
  • 2 対象端末を選定する
  • 3 マルチスクリーンの対応可否を決める
  • 4 Androidのバージョンを選定する
  • Column AndroidとiOSの両方に対応する難しさ
  • 5 責任範囲を明確にする
  • 6 サービスインまでのスケジュールを立てる
  • 7 顧客と調整すべきことを考慮する
  • Column バージョンの定義をすりあわせる
  • 8 他社開発アプリを引き継ぐ時に注意すること

1.2 開発から運用までをスムーズに進めるには

  • 9 チーム内のルールを決める
  • 10 アプリ開発中に押さえるべきポイント
  • 11 サービスイン後に押さえておくべきポイント
  • Column コードネームがお好き

第2章 意図しない動作を回避する

2.1 安全なActivityを設計する

  • 12 最適な起動モードとフラグを選ぶ
  • 13 Activity Aliasで名称の変更に対応する
  • 14 他アプリから使用させないようにする

2.2 Serviceの安定性を向上させる

  • 15 Serviceがkillされることを考慮する
  • 16 Serviceのクラッシュ対策をする

2.3 届かないBroadcastに対処する

  • 17 Broadcastの配信順を考慮する
  • 18 受信できないタイミングを考慮する

第3章 強制終了しないアプリを作る

3.1 ANR回避のテクニック

  • 19 アプリでANRを起こさないために
  • 20 ホーム画面でANRを起こさない
  • 21 受信契機のANRを回避する
  • 22 遅くないレイアウトを考える
  • 23 ANRの原因を分析する

3.2 適切な例外の処置

  • 24 例外のハンドリング方針を決める
  • 25 メインスレッドを強制終了させない
  • 26 例外を考慮してメソッドを選ぶ

3.3 メモリ不足を解消するには

  • 27 初期化を考慮する
  • 28 不要なオブジェクトは破棄する
  • 29 画像のメモリリークを防ぐ
  • 30 画像サイズが大きい場合
  • 31 メモリに優しいオブジェクトを考える
  • 32 1つのアプリで複数のヒープを確保する
  • 33 大量のヒープを確保する
  • Column Androidの仮想マシンに期待する

3.4 プロセス終了時に対処すべきこととは

  • 34 Activity強制終了時にデータを保持させる
  • 35 Fragment強制終了時にデータを保持させる

第4章 ユーザーにストレスを感じさせないアプリを作る

4.1 ストレスを感じさせないテクニックとは

  • 36 ユーザーに状況を伝える
  • 37 長い処理をユーザーが中断できるようにする
  • 38 待ち状態でUIを止めない
  • 39 スプラッシュ画面をデータロードに利用する
  • 40 細かい配慮で処理効率をあげる
  • 41 データの保存タイミングを考慮する
  • 42 セルラー通信の時は重い通信を避ける
  • 43 エラー発生時にもユーザーを不安にさせない
  • 44 NDKの利用は慎重に判断する
  • Column ハードウェア描画とは

4.2 使い勝手をよくするテクニック

  • 45 直感的にわかるデザインを考える
  • 46 新しいコンポーネントをチェックする
  • 47 狭い画面に縛られない
  • 48 斬新なコンポーネントを取り入れる
  • 49 誤操作を防ぐために

第5章 マルチスレッドを使いこなす

5.1 多種多様のスレッド利用方法

  • 50 標準の非同期処理を理解する
  • 51 標準の同期処理を理解する

5.2 スレッドとAsyncTask

  • 52 スレッドとAsyncTaskを使い分ける
  • 53 AsyncTaskを中断させる
  • 54 Androidの非同期処理を理解する

第6章 不必要な処理を切り分ける

6.1 通信タイミングを決めるポイント

  • 55 設計段階でバッテリ消耗を最低限に抑える
  • 56 決まった時間に通信することを避ける
  • 57 電源の状態に応じて通信頻度を変える
  • 58 インターネット接続の有無に応じて定期通信を止める
  • 59 通信経路で通信状態を変える
  • 60 通信データの量を減らす
  • 61 データをまとめて取得して,通信回数を減らす
  • 62 取得したデータをキャッシュして通信を減らす
  • 63 プッシュ機能を用いる
  • 64 リトライ間隔をあけて通信する
  • 65 レジュームダウンロードに対応する
  • 66 ユーザーが決められるようにする

6.2 機能を使用するタイミング

  • 67 不要な画面の点灯を避ける
  • 68 電池消費量を意識して位置情報を取得する

第7章 重要なデータを守る

7.1 解析ツールの脅威

  • 69 apkファイルは誰にでも抜き出せる
  • 70 設定ファイルから機能が丸見えになる
  • 71 ツールを使えばソースコードを覗ける
  • 72 エミュレータでかんたんにデータベースが見られる

7.2 データの保護・漏洩対策

  • 73 暗号化処理の実装を検討する
  • 74 鍵の保持方法を考える
  • 75 AES暗号化でデータベースを守る
  • Column Androidの「端末の暗号化」機能
  • 76 オープンソースソフトを利用する
  • Column 暗号化処理は輸出規制の対象

7.3 ソースコードを保護する

  • 77 処理を解析から保護する
  • 78 難読化の注意点を知る
  • 79 有償ツールを検討する
  • Column 中華droidのススメ

第8章 機種依存を考慮した設計と実装

8.1 設計段階で考慮すること

  • 80 搭載機能を整理する
  • Column Androidに関わるライセンス
  • 81 レイアウトを検討する
  • 82 OSバージョンで気をつけること
  • 83 フォン型とタブレット型の両方に対応する

8.2 マルチディスプレイへの対応

  • 84 基準になる単位を知る
  • 85 実サイズで切り分ける
  • 86 仮想デバイスで確認する
  • Column シミュレータとエミュレータの違い
  • 87 異なる画面サイズに対応したWebデザインにする

8.3 リソース制作時の考慮点

  • 88 リソースの管理方法を決める
  • 89 伸縮できる画像を利用する
  • 90 正しい配置方法を知る

8.4 さまざまな機種依存の対処

  • 91 SDカードに対応する

8.4 さまざまな機種依存の対処

  • 92 その他の機種依存を知る
  • Column 異色のAndroidデバイス

8.5 マルチユーザーの対応

  • 93 マルチユーザーを知る
  • 94 各ユーザーのデータの保存場所を知る
  • 95 複数プロセスを考慮する

第9章 品質向上のためのテストを実践する

9.1 試験開始前に押さえるべきポイント

  • 96 リビジョン番号を記録する
  • 97 リリースマネージャを決める

9.2 安全なバイナリを作成する

  • 98 開発時とリリース時でバイナリを分ける
  • 99 Antでミスを防ぐ

9.3 性能試験の観点

  • 100 性能を測定する
  • 101 性能が遅かった場合の対処
  • 102 リソース負荷を測定する
  • 103 アプリ機能に負荷を与える

9.4 メモリリークを防止する

  • 104 メモリリークを取り除く

9.5 試験項目を作る際の留意点

  • 105 OSのバージョンを考える
  • 106 画面に反映される項目を考える
  • 107 設定を変更した時の試験項目を考える
  • 108 ハードウェアを考える
  • 109 インストール方法を考える
  • 110 アプリのバージョンを考える
  • 111 Androidのソフトウェア構成を考える
  • 112 プロセスがkillされた時の挙動を確認する
  • 113 処理の中断を考える

9.6 単体試験の自動化

  • 114 Activityを試験する
  • 115 Activityの画面またぎを試験する
  • 116 Content Providerを試験する
  • 117 Serviceを試験する
  • 118 データベースを試験する
  • 119 Loaderを試験する
  • 120 Webサイトを試験する
  • 121 Espressoを利用する

第10章 Google Playでアプリを安全にリリースする

10.1 端末のスペックで公開を制限する

  • 122 公開制限の必要性を理解する
  • 123 APIレベルで公開を制限する
  • 124 画面サイズや密度で公開を制限する
  • 125 搭載機能で公開を制限する
  • 126 ライブラリで公開を制限する

10.2 指定した端末への公開を制限する

  • 127 公開端末一覧を確認する
  • 128 端末のフィルタリングを確認する

10.3 公開前のテスト配布

  • 129 テスト用バイナリを配布する
  • 130 ベータ版テスト,アルファ版テストを実施する
  • 131 テスターを作成する
  • 132 テスターを承認する
  • 133 テスト版アプリをダウンロードする
  • 134 バージョンアップ時の不備を避ける
  • 135 署名を確認する
  • 136 バイナリを最適化する

10.4 公開後に押さえておくポイント

  • 137 アプリの公開状況を確認する
  • 138 アプリの公開状況を変更する
  • 139 レポートを確認する

Appendix ネイティブコードに強くなる

  • A.1 NDKの環境を構築する
  • A.2 ネイティブコードで実装する
  • Column Eclipseの構文解析エラー
  • A.3 C++利用時の注意点
  • A.4 ネイティブコードからJavaをコールする

著者プロフィール

木田学(きだまなぶ)

3,5,6,9章を担当。
テックファーム入社後,ずっとiアプリの開発を担当。その後,技術調査案件でスマホの素晴らしさを学ぶ。
趣味はAndroid,iOS,iアプリなど携帯アプリを作ること。一発当てようとiPhoneアプリをリリースするが泣かず飛ばず。東尋坊で崖にむかって進むことが大好き。


おかじゅん

1,4,6,7章を担当。
テックファームのゴミ係兼傘係(らしい)。フィーチャーフォン全盛期にBREW向けFeliCaアプリを書いていた化石エンジニア。
Paul Gilbertのフレーズを弾くのが趣味。ただしテンポは1/10。


渡辺考裕(わたなべたかひろ)

2章を担当。
テックファームに入社後,iアプリやAndroidなど,モバイルアプリの開発をメインに担当。
趣味は最近健康ブームが到来し,そこそこストイックに取り組んでいるが,健康になる兆しはなく,さっそく膝を壊す。


奈良進(ならすすむ)

8章を担当。
多くのゲーム機開発を経験した後,ゲームセンターが廃れる頃から流行始めた携帯業界へ転職。CPU BD,Firmware,OS開発など低レイヤー層の開発から上位レイヤーのアプリ開発へ。RDBMSは使うより作るほうが得意で,高速なインメモリDBの開発経験がある。ここ5年ぐらいは,AndroidやiOSの開発案件を担当している。
プライベートではライブフォトグラファーとして活動。雑誌の表紙やアー写に使われている。


荒川祐一郎(あらかわゆういちろう)

10章+各章の図を担当。
2006年テックファーム入社。Webアプリケーション開発を経験し,現在はAndroid,iOSのスマートフォンアプリの開発に従事。「AT-Scan」「受付はこちら」などの自社製品の開発・運用も担当。
趣味は東京タワー登り。上京して長い年月が経ち何度も登っているはずなのだが,今なおテンションが上がる。


兒島友三郎(こじまともさぶろう)

Appendixを担当。
1990年の高校3年生の時に「UNIXとC言語とシステム・ネットワーク管理を学べる」ということで,日本最北端の短大のサマースクールへ参加。その時に聞いたストールマンの話と,Sunのワークステーションが使いたい放題という環境が気に入って,5年ほど稚内で過ごす。その後,仕事を求めて南下を続け,2000年4月からテックファームへ。キャリア向けSSLテスト環境構築,携帯Javaの実行環境の動作サポート,技術コンサルティングなどを経て,パフォーマンス重視のサーバプログラミングを極めつつある41歳のエンジニア。アーキテクト兼プログラマー。
趣味は関数型言語・コード自動生成・形式手法などを仕事に応用できないかをモヤモヤと考えること。


石立宏志(いしたてひろし)

執筆メンバーへのプレッシャーがけを担当。
2002年にIBMに入社,Webシステム開発やオフショア開発のサポートなどを経験。2005年にテックファームに入社し,おもにFeliCaやNFCなど非接触ICを使ったモバイルアプリケーションの開発に携わる。現在はスマートフォン向けのアプリケーション開発やWebサービス開発,ソリューション提案をメインに活動。
趣味はサッカー,フットサル,車,プログラミング。良いプログラムを書くために,休日は体を動かし頭をリフレッシュすること大事。そのために,平日は深夜まで働いている!?


小林正興(こばやしまさおき)

コラムを複数担当。
iモードサービス前からスマートフォン時代まで16年,携帯電話技術の最前線で設計や開発,エンジニア組織のしくみ作りまでに従事。現在はテックファームの技術顧問として技術者のモチベーション教育に力を注いでいる。
コーヒーに魅せられ30年あまり。最高の一杯のために,日夜,豆に器具に水に厳選を重ねつつ,コンビニコーヒーも愛飲している。