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