Androidアプリ開発の極意
~プロ品質を実現するための現場の知恵とテクニック

[表紙]Androidアプリ開発の極意 ~プロ品質を実現するための現場の知恵とテクニック

A5判/480ページ

定価(本体3,280円+税)

ISBN 978-4-7741-8817-1

電子版

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

書籍の概要

この本の概要

「iタウンページ」「ANA」「しゃべってコンシェル」などの開発実績を持つテックファームが,Androidアプリの開発手法をおしみなく紹介! 「プロジェクトの円滑な進め方」「意図しない動作の回避」「強制終了しない」「処理の切り分け」「品質を向上させる」「安全なリリースを行う」といった,開発会社の視点で気をつけなければならないポイントが満載です。「とりあえず動く」アプリの先を目指す,Androidアプリ開発者必携の1冊。
※本書は2014年に刊行された『良いAndroidアプリを作る139の鉄則』の改訂版です。

こんな方におすすめ

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

目次

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

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

  • 1 顧客の理解を得る
  • 2 対象端末を選定する
  • 3 マルチスクリーンの対応可否を決める
  • 4 Androidのバージョンを選定する
  • COLUMN 大画面タブレット
  • 5 責任範囲を明確にする
  • 6 サービスインまでのスケジュールを立てる
  • 7 顧客と調整すべきことを考慮する
  • COLUMN バージョンの定義をすりあわせる

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

  • 8 他社開発アプリを引き継ぐ時に注意すること
  • 9 チーム内のルールを決める
  • 10 アプリ開発中に押さえるべきポイント
  • 11 サービスイン後に押さえておくべきポイント
  • COLUMN コードネームがお好き

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

2.1 安全なActivityを設計する

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

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

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

2.3 届かないBroadcastに対処する

  • 18 Broadcastの配信順を考慮する
  • 19 受信できないタイミングを考慮する
  • 20 パーミッション要求を適切に行う

2.4 省電力時に機能制限を受ける前提で設計する

  • 21 DozeとApp Standbyを考える
  • 22 省電力時に機能制限を受けないようにする

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

3.1 ANR回避のテクニック

  • 23 アプリでANRを起こさないために
  • 24 受信契機のANRを回避する
  • 25 遅くないレイアウトを考える
  • 26 ANRの原因を分析する

3.2 適切な例外の処置

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

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

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

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

  • 37 Activity強制終了時にデータを保持させる
  • 38 Fragment強制終了時にデータを保持させる
  • 39 データの共有方法を考える

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

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

  • 40 ユーザーに状況を伝える
  • 41 ProgressBar以外の方法で進捗を表示する
  • 42 スプラッシュ画面をデータロードに利用する
  • 43 細かい配慮で処理効率をあげる
  • 44 データの保存タイミングを考慮する
  • 45 セルラー通信の時は重い通信を避ける
  • 46 エラー発生時にもユーザーを不安にさせない
  • 47 NDKの利用は慎重に判断する
  • COLUMN プロセッサー

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

  • 48 新しいコンポーネントをチェックする
  • 49 斬新なコンポーネントを取り入れる
  • 50 誤操作を防ぐために

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

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

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

5.2 AsyncTaskやLoaderを使いこなす

  • 53 AsyncTaskとAsyncTaskLoaderを切り分ける
  • 54 AsyncTaskとAsyncTaskLoaderを使い分ける
  • 55 AsyncTask,AsyncTaskLoaderの中断処理を実装する
  • 56 CursorLoaderを使用する
  • 57 標準APIを使わない実装について

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

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

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

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

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

6.3 バックグラウンド処理の最適化(N機能)

  • 73 省電力実装のプラクティス
  • 74 Android Nのバックグラウンド処理を変更する

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

7.1 解析ツールの脅威

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

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

  • 79 暗号化処理の実装を検討する
  • 80 鍵の保持方法を考える
  • 81 AES暗号化でデータベースを守る
  • COLUMN CardboardとDaydream
  • 82 オープンソースソフトを利用する
  • COLUMN 暗号化処理は輸出規制の対象

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

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

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

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

  • 86 搭載機能を整理する
  • COLUMN Androidに関わるライセンス
  • 87 フォン型とタブレット型の両方に対応する

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

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

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

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

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

  • 95 外部・内部ストレージの利用可能領域を知る
  • 96 そのほかの機種依存を知る
  • COLUMN MiracastとAirPlayとGoogle Cast

8.5 マルチユーザーの対応

  • 97 マルチユーザー対応時の注意点
  • 98 複数プロセスを考慮する
  • 99 画面のズームを考慮する
  • 100 マルチウィンドウに対応する

第9章 品質向上のための開発とテスト

9.1 品質を上げるための開発ポイント

  • 101 Gradleのビルドで環境を切り分ける
  • 102 静的コード解析を行う

9.2 性能試験の観点

  • 103 処理が遅かった場合の対処
  • 104 リソース負荷を測定する
  • 105 アプリ機能に負荷を与える
  • 106 メモリリークを取り除く
  • COLUMN メモリ情報詳細の取得について
  • 107 端末・OSに関わる試験の観点を明確にする

9.3 開発工程に試験を組み込む

  • 108 単体試験を行う
  • 109 UI試験を行う
  • 110 継続的インテグレーションを行う
  • 111 Bazelでビルドする場合を考える
  • 112 単体試験しやすい実装を考える

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

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

  • 113 公開制限の必要性を理解する
  • 114 API Levelで公開を制限する
  • 115 画面サイズや密度で公開を制限する
  • 116 搭載機能で公開を制限する
  • 117 ライブラリで公開を制限する

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

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

10.3 公開前のテスト配布

  • 120 テスト用バイナリを配布する
  • 121 ベータ版テスト,アルファ版テストを実施する
  • 122 テスターグループを設定する
  • 123 テスターを承認する
  • 124 テスト版アプリをダウンロードする
  • 125 バージョンアップ時の不備を避ける
  • 126 署名を確認する
  • 127 バイナリを最適化する

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

  • 128 アプリの公開状況を確認する
  • 129 アプリの公開状況を変更する
  • 130 レポートを確認する

著者プロフィール

木田学(きだまなぶ)

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


おかじゅん

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


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

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


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

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


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

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