Flutter 內核源碼剖析
內容描述
本書系統介紹Flutter跨平臺技術的底層原理,橫跨Java、C++、Dart 3種編程語言,可以幫助程序員學習前沿的跨平臺技術,編寫高質量的代碼,深刻理解Flutter的內部運行機制。
本書共11章。第1章~第3章講解閱讀Flutter內核源碼的前置知識,如何獲取和構建源碼,以及Dart的高級特性等。第4章~第7章講解Flutter內核源碼的核心內容,涉及Embedder層、Engine層、Framework層等。第8章~第11章基於對Flutter內核源碼的分析,探討如何編寫高性能的業務代碼,定位代碼中的性能瓶頸,使用DevTool等工具的高階特性,以及底層原理等高級主題。
本書適合對跨平臺技術感興趣的開發人員、前端開發人員、Android/iOS開發人員,希望深入瞭解Flutter或有性能調優需求的開發人員,對移動端渲染框架感興趣的開發人員,以及渴望深入瞭解Flutter底層實現的開發人員閱讀。
目錄大綱
第1章 準備工作 1
1.1 移動端跨平台簡史 1
1.1.1 跨平台的起源 1
1.1.2 跨平台的價值 1
1.1.3 跨平台的演進 2
1.1.4 跨平台的未來 5
1.2 Flutter框架概覽 6
1.2.1 分層架構模型 7
1.2.2 響應式與Widgets 8
1.2.3 初識渲染管道 9
1.2.4 平台嵌入與交互 10
1.3 本章小結 10
第2章 環境搭建 11
2.1 Flutter源碼獲取 11
2.2 Flutter源碼結構 14
2.3 Flutter源碼構建 15
2.4 Flutter源碼調試 17
2.4.1 Framework源碼調試 18
2.4.2 Embedder源碼調試 20
2.4.3 Engine源碼調試 22
2.5 本章小結 25
第3章 flutter tool 26
3.1 flutter tool啟動流程 26
3.1.1 基於Bash的環境準備 27
3.1.2 基於Zone的上下文管理 32
3.1.3 基於args的子命令管理 37
3.2 flutter create詳解 38
3.3 flutter build詳解 40
3.3.1 BuildApkCommand流程分析 40
3.3.2 flutter. gradle流程分析 42
3.3.3 AssembleCommand流程分析 48
3.4 flutter attach詳解 57
3.4.1 環境準備階段 57
3.4.2 服務連接階段 62
3.4.3 增量編譯階段
3.5 flutter run詳解 70
3.6 本章小結 73
第4章 啟動流程 74
4.1 Embedder啟動流程 74
4.1.1 Embedder關鍵類分析 74
4.1.2 啟動準備階段 76
4.1.3 FlutterEngine初始化 78
4.1.4 FlutterView初始化 83
4.1.5 Framework啟動 89
4.1.6 Engine入口整理 89
4.2 Engine啟動流程 90
4.2.1 Engine關鍵類分析 91
4.2.2 JNI接口綁定 92
4.2.3 Settings解析 94
4.2.4 關鍵類初始化 95
4.3 Surface啟動流程 104
4.3.1 Flutter繪製體系介紹 104
4.3.2 PlatformViewAndroid初始化 106
4.3.3 Surface初始化 109
4.4 Dart Runtime啟動流程 115
4.4.1 Dart Runtime介紹 115
4.4.2 Dart VM創建流程 116
4.4.3 Isolate啟動流程 124
4.5 Framework啟動流程 134
4.5.1 Framework關鍵類分析 134
4.5.2 Binding啟動流程 135
4.6 本章小結 138
第5章 渲染管道 139
5.1 首幀渲染 139
5.1.1 Widget、Element與RenderObject 139
5.1.2 根節點構建流程 141
5.1.3 案例分析 143
5.1.4 請求渲染 151
5.2 Vsync機制分析 154
5.2.1 Vsync準備階段 154
5.2.2 Vsync註冊階段 156
5.2.3 Vsync響應階段 158
5.2.4 Framework響應階段 161
5.2.5 Continuation設計分析 163
5.3 Build流程分析 165
5.3.1 Mark階段 165
5.3.2 Flush階段 166
5.3.3 清理階段 170
5.4 Layout流程分析 171
5.4.1 Mark階段 171
5.4.2 Flush階段 172
5.4.3 Layout實例分析 174
5.5 Paint流程分析 176
5.5.1 Comiting-State Mark階段 177
5.5.2 Comiting-State Flush階段 179
5.5.3 Paint Mark階段 180
5.5.4 Paint Flush階段 181
5.6 Comition流程分析 186
5.6.1 Mark階段 187
5.6.2 Flush階段 187
5.7 Rasterize流程分析 193
5.8 本章小結 199
第6章 Box佈局模型 201
6.1 Box佈局概述 201
6.2 Align佈局流程分析 202
6.3 Flex佈局流程分析 205
本章小結 213
第7章 Sliver佈局模型 214
7.1 Sliver佈局概述 214
7.2 RenderViewport佈局流程分析 215
7.3 RenderSliverToBoxAdapter佈局流程分析 224
7.4 本章小結 229
第8章 Framework探索 230
8.1 StatefulWidget生命週期分析 230
8.2 InheritedWidget原理分析 233
8.3 Key原理分析 237
8.3.1 GlobalKey 238
8.3.2 LocalKey 240
8.4 Animation原理分析 244
8.4.1 補間動畫 245
8.4.2 物理動畫 251
8.5 Gesture原理分析 252
8.5.1 目標收集 254
8.5.2 手勢競爭 256
8.5.3 雙擊事件 259
8.5.4 拖曳事件與列表滑動 263
8.6 Image原理分析 268
8.6.1 框架分析 268
8.6.2 網絡圖片加載 274
8.6.3 緩存管理 274
8.7 Navigation原理分析 277
8.8 本章小結 281
第9章 Embedder探索 282
9.1 Platform Channel原理分析 282
9.1.1 Platform Channel架構分析 282
9.1.2 BasicMessageChannel流程詳解 283
9.1.3 MethodChannel流程分析 289
9.1.4 EventChannel原理分析 291
9.2 Platform View原理分析 293
9.2.1 Platform View架構 293
9.2.2 Virtual Display原理分析 294
9.2.3 Hybrid Comition原理分析 301
9.3 Plugin原理分析 315
9.4 本章小結 317
第10章 Engine探索 318
10.1 消息循環原理分析 318
10.1.1 消息循環啟動 319
10.1.2 任務註冊 323
10.1.3 任務執行 324
10.2 動態線程合併技術 325
10.2.1 合併、維持與消解 326
10.2.2 合併狀態下的任務執行 330
10.3 本章小結 331
第11章 優化實踐 332
11.1 平台資源復用 332
11.2 Flex佈局實戰 337
11.3 本章小結 338
作者介紹
趙裕,畢業於大連理工大學計算機與科學專業,目前就職於騰訊公司,負責PCG客戶端開發工作。擁有多年軟件開發經驗,在博客上發表了眾多編程相關知識,獲得了讀者一致好評。目前重點關注Android、Flutter以及Java、Dart、Kotlin等。