本書是一本Android進階技術與實踐應用相結合的書籍,主要從3個方面來組織內容。第一個方面,Android工程構建體系實踐與進階,其中不僅包含了移動數據技術、工具基建進階、效能進階,還包含了工具應用進階、工程構建進階等內容;第二個方面,對當前移動端前沿技術的探索,包含容器技術、大前端技術和AI技術;第三個方面,移動應用的安全攻防技術和設計模式進階實踐。本書內容全面,側重實戰經驗和進階技能,通過本書不僅能學到最新的移動端技術,以及進階技術與實踐應用相結合的知識,更重要的是能領悟到作者對技術的鉆研精神和思維方式,從而幫助Android開發者高效進階。本書適合移動應用開發者、Android系統開發人員、Android系統安全工程師,以及Android領域的移動技術負責人閱讀。
胡強(花名:得塔),阿里巴巴高級無線技術專家(P8),進入互聯網行業已10年,先后從事過前端、后端、大數據和移動互聯網的架構及研發工作。2014年加入阿里巴巴至今,專注于移動互聯網技術,先后主導了UC和豌豆莢的架構設計,并先后應邀在GMTC、云棲大會、架構師私享會、GeekPwn和Google Lab等上進行過技術演講和交流。
目錄
第1章 Android數據技術 1
1.1 數據采集 1
1.1.1 數據格式 1
1.1.2 多端協同技巧 3
1.1.3 數據分級方案 5
1.1.4 多進程解決方案 7
1.2 數據綁定 8
1.2.1 控件數據綁定 8
1.2.2 內容曝光框架 9
1.3 數據存儲和上報 10
1.3.1 數據加密方案 11
1.3.2 數據存儲策略 11
1.3.3 數據上報策略 14
1.4 前端埋點 15
1.4.1 代碼埋點 16
1.4.2 聲明式埋點 17
1.4.3 無痕埋點 18
第2章 Android下的工具基建進階 30
2.1 帶有反劫持功能的下載SDK 30
2.1.1 分段式多線程網絡通信 30
2.1.2 常見的下載劫持 32
2.1.3 下載劫持監控 32
2.1.4 在下載中實現反劫持 33
2.1.5 下載SDK的應用 34
2.2 沉浸式交互組件 34
2.2.1 碎片化導致沉浸式適配困難 34
2.2.2 Android官方沉浸式狀態欄方式 35
2.2.3 主流廠商的沉浸式方式簡介 36
2.3 基于信息流的圖片加載框架 38
2.3.1 圖片加載 38
2.3.2 圖片緩存機制 39
2.3.3 圖片加載過程中遇到的問題 40
2.3.4 基于信息流的圖片加載設計 47
2.3.5 基于信息流的圖片加載實現 48
2.4 進程保活 49
2.4.1 常規的保活技術 49
2.4.2 保活的悖論 52
2.4.3 系統發展對保活的影響 53
2.5 Android文件系統掃描 53
2.5.1 什么是文件系統 54
2.5.2 文件系統掛載 54
2.5.3 虛擬文件系統層 56
2.5.4 超級塊 57
2.5.5 文件掃描算法 58
2.5.6 結合系統機制進行進階掃描設計 61
2.5.7 掃描實現設計 62
2.5.8 C語言實現的掃描邏輯 63
2.6 高可用前置通道 64
2.6.1 前置通道簡介 64
2.6.2 常駐通知欄 64
2.6.3 Android推送能力介紹 65
2.6.4 主流廠商推送SDK適配 65
2.6.5 Android統一推送聯盟 67
2.6.6 桌面懸浮窗 67
第3章 Android下的效能進階 68
3.1 App性能監測實現 68
3.1.1 App性能監測背景 68
3.1.2 App性能監測總體設計 68
3.1.3 啟動速度框架 69
3.1.4 內存監測系統 69
3.1.5 頁面卡頓解決方案 70
3.1.6 處理App性能問題的經驗 72
3.2 App真機檢測系統 75
3.2.1 為什么需要真機檢測 75
3.2.2 真機檢測整體設計 75
3.2.3 Monkey穩定性檢測 76
3.2.4 自動化敏感權限檢測 77
3.2.5 面向游戲的真機檢測 77
3.3 APK信息一站式修改 79
3.3.1 APK文件構成 79
3.3.2 APK簽名校驗流程 80
3.3.3 V1與V2簽名 82
3.3.4 如何打造渠道包 82
第4章 Android工具應用進階 86
4.1 游戲加速器 86
4.1.1 游戲加速器的使用場景 86
4.1.2 基于性能的加速實現 86
4.1.3 基于流量劫持(VPN)的加速實現 91
4.1.4 基于VPN加速器的整體設計 93
4.2 近場傳輸 94
4.2.1 近場傳輸場景 95
4.2.2 近場傳輸設計 95
4.2.3 Wi-Fi創建 97
4.2.4 Wi-Fi掃描 99
4.2.5 Wi-Fi連接 100
4.2.6 數據傳輸邏輯處理 102
4.3 微信清理 103
4.3.1 微信清理背景 103
4.3.2 微信清理設計 103
4.3.3 微信清理實現 103
4.4 Google安裝器 105
4.4.1 Google安裝器背景 105
4.4.2 Google服務框架 106
4.4.3 Google服務框架安裝器GSI實現 108
第5章 Android工程構建進階 111
5.1 工程構建基礎 111
5.1.1 應用基本信息 111
5.1.2 編譯過程 112
5.2 工程構建進階 115
5.2.1 多渠道打包 115
5.2.2 渠道信息批量寫入 116
5.2.3 資源混淆 116
5.2.4 發布到Maven倉庫 118
5.2.5 搭建私有Maven倉庫 120
5.3 工程構建定制 123
5.3.1 認識Gradle DSL 123
5.3.2 自定義打包邏輯 125
5.3.3 Freeline秒級編譯淺析及接入 129
第6章 移動場景下的容器技術 133
6.1 MoveToDex方案 134
6.1.1 Dalvik虛擬機dex加載機制 134
6.1.2 方法數超過65 536B問題 136
6.1.3 DexOpt LinearAlloc大小限制問題 139
6.1.4 MoveToDex按需加載方案 140
6.2 MultiDex方案優化 141
6.2.1 如何使用MultiDex 141
6.2.2 MultiDex痛點剖析 142
6.2.3 MultiDex方案回歸 143
6.2.4 如何優化MultiDex 144
6.3 插件化與組件化 145
6.3.1 插件化與組件化的區別 145
6.3.2 為什么要做容器化 147
6.3.3 容器化技術演進 147
6.3.4 容器化框架的弊端 150
6.3.5 Android P下的容器化技術前進方向 150
6.3.6 App Bundle解析 151
第7章 移動混合前端技術 153
7.1 H5方案 153
7.1.1 輕量化方案——H5應用 153
7.1.2 H5交互與接口實現 154
7.1.3 H5的缺點 155
7.2 Weex和React Native 155
7.2.1 Weex和React Native簡介 156
7.2.2 Weex和React Native的對比 156
7.2.3 如何使用 159
7.3 Flutter 164
7.3.1 Flutter簡介 165
7.3.2 Dark語言簡介 165
7.3.3 Flutter原理淺析 167
第8章 移動場景下的AI技術 170
8.1 移動AI現狀 170
8.1.1 背景 170
8.1.2 移動AI落地方案 172
8.2 AI的應用場景 173
8.2.1 圖像處理 173
8.2.2 語音處理 175
8.2.3 模式識別 177
8.3 移動AI框架 177
8.3.1 Caffe2 178
8.3.2 TensorFlow Lite 180
8.3.3 Caffe2與TensorFlow Lite的對比 191
8.4 移動AI業務實踐 192
8.4.1 接入成本 192
8.4.2 模型的動態更新 192
8.4.3 兼容性與局限性 194
第9章 移動場景下的安全攻防技術 195
9.1 靜態分析Android應用 195
9.1.1 使用ShakaApktool反編譯APK 196
9.1.2 使用JEB分析Java代碼 197
9.1.3 使用IDA Pro靜態分析so文件 203
9.2 動態分析Android應用 207
9.2.1 使用IDA Pro動態調試APK 207
9.2.2 使用Xposed Hook Java代碼 211
9.2.3 使用Cydia Substrate Hook Java和Native 219
9.2.4 使用Frida Hook Java和Native代碼 228
第10章 Android平臺下的設計模式進階 237
10.1 SOLID設計原則 237
10.1.1 單一職責原則 237
10.1.2 開閉原則 239
10.1.3 里氏替換原則 244
10.1.4 接口隔離原則 246
10.1.5 依賴倒置原則 248
10.2 并行程序設計模式 253
10.2.1 Amdahl定律 253
10.2.2 Future模式 255
10.2.3 Master-Worker模式 256
10.2.4 Guarded Suspension模式 259
10.2.5 不變模式 260
10.3 設計模式在Android源碼中的應用 261
10.3.1 策略模式 262
10.3.2 適配器模式 262
10.3.3 命令模式 263
10.3.4 建造者模式 263
10.3.5 享元模式 264
10.3.6 備忘錄模式 267
10.3.7 觀察者模式 269
10.3.8 原型模式 270
10.3.9 代理模式 271
10.3.10??狀態模式 274