本書系統(tǒng)介紹Flutter跨平臺技術(shù)的底層原理,橫跨Java、C++、Dart 3種編程語言,可以幫助程序員學習前沿的跨平臺技術(shù),編寫高質(zhì)量的代碼,深刻理解Flutter的內(nèi)部運行機制。
本書共11章。第1章~第3章講解閱讀Flutter內(nèi)核源碼的前置知識,如何獲取和構(gòu)建源碼,以及Dart的高級特性等。第4章~第7章講解Flutter內(nèi)核源碼的核心內(nèi)容,涉及Embedder層、Engine層、Framework層等。第8章~第11章基于對Flutter內(nèi)核源碼的分析,探討如何編寫高性能的業(yè)務(wù)代碼,定位代碼中的性能瓶頸,使用DevTool等工具的高階特性,以及底層原理等高級主題。
本書適合對跨平臺技術(shù)感興趣的開發(fā)人員、前端開發(fā)人員、Android/iOS開發(fā)人員,希望深入了解Flutter或有性能調(diào)優(yōu)需求的開發(fā)人員,對移動端渲染框架感興趣的開發(fā)人員,以及渴望深入了解Flutter底層實現(xiàn)的開發(fā)人員閱讀。
1.內(nèi)容豐富。
從Flutter的源碼出發(fā),從組件開發(fā)到技術(shù)綜合應(yīng)用,多角度介紹Flutter項目開發(fā)的方方面面,為開發(fā)人員提供一條高效的學習途徑。
2.講解由淺入深。
由淺入深剖析Flutter項目開發(fā)過程種遇到的問題,涉及源碼的獲取與構(gòu)建,功能模塊的實現(xiàn)以及Flutter應(yīng)用的性能探測,監(jiān)控和調(diào)優(yōu)等。
3.舉一反三。
系統(tǒng)且深入闡釋了Flutter跨平臺技術(shù)的底層原理,橫跨Java、C++、Dart這3種編程語言,覆蓋Flutter 1.0 和 2.0 版本。
本書以Flutter的源碼為主要脈絡(luò),按照功能模塊,從相關(guān)工具的準備、源碼的獲取與構(gòu)建,再到啟動流程、宿主通信、UI構(gòu)建、狀態(tài)管理等的實現(xiàn),最后,基于原理剖析,講解如何對Flutter應(yīng)用做性能探測、監(jiān)控和調(diào)優(yōu)。
本書適合對跨平臺技術(shù)感興趣的開發(fā)人員、前端開發(fā)人員、 Android/iOS開發(fā)人員,希望深入了解Flutter或有性能調(diào)優(yōu)需求的開發(fā)人員,對移動端渲染框架感興趣的開發(fā)人員,以及渴望深入了解 Flutter底層實現(xiàn)的開發(fā)人員閱讀。
趙裕,畢業(yè)于大連理工大學計算機與科學專業(yè),目前就職于騰訊公司,負責PCG客戶端開發(fā)工作。擁有多年軟件開發(fā)經(jīng)驗,在博客上發(fā)表了眾多編程相關(guān)知識,獲得了讀者一致好評。目前重點關(guān)注Android、Flutter以及Java、Dart、Kotlin等。
第 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 分層架構(gòu)模型 7
1.2.2 響應(yīng)式與Widgets 8
1.2.3 初識渲染管道 9
1.2.4 平臺嵌入與交互 10
1.3 本章小結(jié) 10
第 2章 環(huán)境搭建 11
2.1 Flutter源碼獲取 11
2.2 Flutter源碼結(jié)構(gòu) 14
2.3 Flutter源碼構(gòu)建 15
2.4 Flutter源碼調(diào)試 17
2.4.1 Framework源碼調(diào)試 18
2.4.2 Embedder源碼調(diào)試 20
2.4.3 Engine源碼調(diào)試 22
2.5 本章小結(jié) 25
第3章 flutter tool 26
3.1 flutter tool啟動流程 26
3.1.1 基于Bash的環(huán)境準備 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 環(huán)境準備階段 57
3.4.2 服務(wù)連接階段 62
3.4.3 增量編譯階段 64
3.5 flutter run詳解 70
3.6 本章小結(jié) 73
第4章 啟動流程 74
4.1 Embedder啟動流程 74
4.1.1 Embedder關(guān)鍵類分析 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關(guān)鍵類分析 91
4.2.2 JNI接口綁定 92
4.2.3 Settings解析 94
4.2.4 關(guān)鍵類初始化 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創(chuàng)建流程 116
4.4.3 Isolate啟動流程 124
4.5 Framework啟動流程 134
4.5.1 Framework關(guān)鍵類分析 134
4.5.2 Binding啟動流程 135
4.6 本章小結(jié) 138
第5章 渲染管道 139
5.1 首幀渲染 139
5.1.1 Widget、Element與RenderObject 139
5.1.2 根節(jié)點構(gòu)建流程 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響應(yīng)階段 158
5.2.4 Framework響應(yīng)階段 161
5.2.5 Continuation設(shè)計分析 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 Compositing-State Mark階段 177
5.5.2 Compositing-State Flush階段 179
5.5.3 Paint Mark階段 180
5.5.4 Paint Flush階段 181
5.6 Composition流程分析 186
5.6.1 Mark階段 187
5.6.2 Flush階段 187
5.7 Rasterize流程分析 193
5.8 本章小結(jié) 199
第6章 Box布局模型 201
6.1 Box布局概述 201
6.2 Align布局流程分析 202
6.3 Flex布局流程分析 205
6.4 本章小結(jié) 213
第7章 Sliver布局模型 214
7.1 Sliver布局概述 214
7.2 RenderViewport布局流程分析 215
7.3 RenderSliverToBoxAdapter布局流程分析 224
7.4 本章小結(jié) 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 網(wǎng)絡(luò)圖片加載 274
8.6.3 緩存管理 274
8.7 Navigation原理分析 277
8.8 本章小結(jié) 281
第9章 Embedder探索 282
9.1 Platform Channel原理分析 282
9.1.1 Platform Channel架構(gòu)分析 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架構(gòu) 293
9.2.2 Virtual Display原理分析 294
9.2.3 Hybrid Composition原理分析 301
9.3 Plugin原理分析 315
9.4 本章小結(jié) 317
第 10章 Engine探索 318
10.1 消息循環(huán)原理分析 318
10.1.1 消息循環(huán)啟動 319
10.1.2 任務(wù)注冊 323
10.1.3 任務(wù)執(zhí)行 324
10.2 動態(tài)線程合并技術(shù) 325
10.2.1 合并、維持與消解 326
10.2.2 合并狀態(tài)下的任務(wù)執(zhí)行 330
10.3 本章小結(jié) 331
第 11章 優(yōu)化實踐 332
11.1 平臺資源復(fù)用 332
11.2 Flex布局實戰(zhàn) 337
11.3 本章小結(jié) 338