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

【最新 – Androidアプリ開発を学ぶおすすめ本 – 入門・独学勉強法】も確認する

上級者に向けたテクニック本

初級の本、中級の本と、経てきた方が、本当の開発者としての能力を獲得するための本です。
Android開発において注意すべき点がコンパクトにまとまっているので、アプリを開発する際、手元に置いて設計漏れ等はないかなどのチェックにも使えます。

木田 学 (著), おかじゅん (著), 渡辺 考裕 (著), 荒川 祐一郎 (著), 小林 正興 (著), テックファーム (監修)
技術評論社 (2017/3/16)、出典:出版社HP

 

はじめに

2014年に『良い Android アプリを作る 139 の鉄則』という本を執筆させていた だきました。非常に好評で、テックファームの新入社員やお客様から「書店でよ くみかける」と言われました。前回苦労して執筆したメンバーや素晴らしい編集 をしていただいた技術評論社に本当に感謝しております。

とりわけ第1章が特に好評で、ほかの開発会社向けに、「Android プロジェク トの進め方」というセミナーを何回か開催する機会もうまれました。受講者から Android プロジェクトの開発の進め方について多くの質問を受けました。出版後 の反応を体感して、もっと開発会社として伝えられることがあるのではないか? ということを考えるようになりました。

また出版後、Android L、M、N と OS がバージョンアップされ本を出した当初 と開発手法や開発のはまりポイントも変わってきました。前回は Android 2.1 ~ 4.4を中心とした内容になっていましたが、2017年2月現在市場で使用される端 末は Android 4.1~6.0 の割合が多くなっています。

そんな中、前回の書籍の内容をバージョンアップする本の改版というありがたいお話をいただきました。そこで、今回は前回の書籍から一新して最新の OS を 中心に対応ポイントや開発手法などを紹介しています。さらに、開発会社という視点で開発を行う場合に気をつけなければいけないことや話せる限りの実体験も踏まえて、開発会社としてどう Android を開発していかなければいけないのかという内容をより濃く伝えたいと思っています。

前回好評だったAndroid プロジェクトの進め方ももう少し突き詰めて、
・もっと円滑に Android 開発を進めるにはどうしたらよいか?
・顧客に納得してもらう価値のあるAndroid開発のポイントとは?
といったテーマを中心に解説しました。

2017年3月 著者代表 木田学

木田 学 (著), おかじゅん (著), 渡辺 考裕 (著), 荒川 祐一郎 (著), 小林 正興 (著), テックファーム (監修)
技術評論社 (2017/3/16)、出典:出版社HP

目次

はじめに

第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 設定ファイルから機能が丸見えになる
177 ツールを使えばソースコードを覗ける
178 エミュレータでかんたんにデータベースが見られる

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 レポートを確認する

索引

木田 学 (著), おかじゅん (著), 渡辺 考裕 (著), 荒川 祐一郎 (著), 小林 正興 (著), テックファーム (監修)
技術評論社 (2017/3/16)、出典:出版社HP