Android 進階指北

劉望舒

  • 出版商: 電子工業
  • 出版日期: 2020-09-01
  • 定價: $654
  • 售價: 8.5$556
  • 語言: 簡體中文
  • 頁數: 484
  • 裝訂: 平裝
  • ISBN: 7121393751
  • ISBN-13: 9787121393754
  • 相關分類: Android
  • 下單後立即進貨 (約2週~3週)

買這商品的人也買了...

商品描述

本書是一本Android進階圖書,結合《Android進階之光》和《Android進階解密》兩本書介紹的知識,
一同建立起Android應用開發進階知識體系。
全書共分13章,主要從3個方面來組織內容:
(1)Android應用開發所需要掌握的系統源碼知識,包括系統源碼的下載、編譯、調試,
包管理機制,輸入系統,Native Binder,Java Binder;
(2)應用開發必需的知識點,包括Groovy基礎、Gradle核心思想、Gradle的Android插件、Android Jetpack架構組件;
(3)與跨平臺開發相關的知識點,包括跨平臺技術演進、Dart基礎、Flutter基礎。

作者簡介

劉望舒

Android技術專家,Android進階三部曲《Android進階之光》 《Android進階解密》 《Android進階指北》作者,
電子工業出版社博文視點2017、2018、2019年度優秀作者。
CSDN知名博主,榮獲CSDN 2018年度博客之星稱號。
GDG Devfest、Droidcon、安卓巴士開發者大會、全球移動開發者大會的特邀演講嘉賓或出品人。
曾在多個知名大廠任職,目前就職於某大型互聯網公司,擔任技術負責人,負責管理和架構相關工作。

目錄大綱

Android進階三部曲知識體系1
第1章系統源碼的下載、編譯、調試5
1.1使用VirtualBox安裝Ubuntu 5
1.1.1安裝Ubuntu的步驟6
1.1.2安裝增強工具12
1. 2 AOSP源碼下載14
1.2.1 AOSP簡介14
1.2.2下載repo 15
1.2.3下載源碼15
1.3內核源碼下載16
1.4系統源碼的整編和單編18
1.4 .1編譯系統概述18
1.4.2編譯源碼的方式20
1.4.3準備編譯環境20
1.4.4源碼整編21
1.4.5源碼單編24
1.5 Source Insight導入系統源碼25
1.5.1新建源碼項目25
1.5.2定位文件27
1.5.3全局搜索28
1.6 Android Studio導入系統源碼29
1.7 Android Studio調試系統源碼33
1.7.1 AOSP源碼項目調試34
1.7.2導入部分源碼調試38
1.7.3新建Android項目調試39
1.8本章小結40

第2章理解包管理機制和PMS 41
2.1 PackageInstaller的初始化41
2.1.1 PackageManager簡介42
2.1.2 APK的文件結構和安裝方式42
2.1.3尋找PackageInstaller入口43
2.1.4 PackageInstallerActivity解析47
2.1.5 PackageInstaller初始化的過程51
2. 2 PackageInstaller安裝APK過程52
2.2.1 PackageInstaller中的處理52
2.2.2 Java框架層的處理57
2.2.3 PackageInstaller安裝APK的過程59
2.3 PMS處理APK的安裝過程59
2. 3.1 PackageHandler處理安裝消息60
2.3.2複製APK的處理66
2.3.3 PMS處理APK安裝70
2.3.4 PMS處理APK安裝的步驟76
2.4 PMS的創建過程77
2. 4.1 SystemServer處理部分77
2.4.2 PMS構造方法80
2.5 APK解析過程91
2.5.1引入PackageParser 91
2.5.2 PackageParser解析APK 92
2.5.3 Package的數據結構99
2.6本章小結100

第3章理解輸入系統和IMS 102
3.1輸入事件傳遞流程的組成部分103
3.2 IMS的誕生105
3.2.1 SystemServer處理部分105
3.2.2 InputManagerService構造方法107
3.3 IMS的啟動過程110
3.4 InputDispatcher的啟動過程112
3.5 InputReader處理事件的過程113
3.6輸入事件的處理總結119
3.7 InputReader的加工類型120
3.8 InputDispatcher的分發過程123
3.8.1喚醒InputDispatcherThread 123
3.8.2 InputDispatcher進行分發124
3.9事件分發到目標窗口的過程128
3.9.1為事件尋找合適的分發目標128
3.9.2處理點擊形式的事件132
3.9.3向目標窗口發送事件135
3 .9.4 Motion事件分發過程總結136
3.10本章小結138

第4章IPC機制139
4.1 Linux和Android的IPC機制139
4.1.1 Linux中的IPC機制139
4.1.2 Android中的IPC機制141
4.2開啟多進程142
4.2.1開啟多進程舉例142
4.2.2開啟多進程引出的問題144
4.3用Messenger進行進程間通信146
4.4使用AIDL實現跨進程方法調用150
4.4.1創建AIDL文件150
4.4.2創建服務端152
4.4.3客戶端調用153
4.5用ContentProvider進行進程間通信155
4.5.1建立數據庫,方便ContentProvider使用155
4.5.2使用ContentProvider對數據庫進行操作156
4.5.3在Activity中調用另一個進程的GameProvider方法158
4.6用Socket實現跨進程聊天程序160
4.7本章小結167

第5章Native Binder原理168
5.1學習Binder的前置知識點168
5.1.1 Linux和Binder的IPC通信原理169
5.1.2使用Binder的原因173
5.1.3學習Binder的原因174
5.2 ServiceManager中的Binder機制175
5.2.1基於Binder通信的C/S架構175
5.2.2 MediaServer的main函數176
5.2.3每個進程唯一的ProcessState實例177
5.2.4解析ServiceManager中的Binder機制180
5.2.5小結187
5.3系統服務的註冊過程187
5.3.1從調用鏈角度說明MediaPlayerService的註冊過程187
5.3.2從進程角度說明MediaPlayerService的註冊過程195
5.3.3小結196
5.4 ServiceManager的啟動過程196
5.4.1打開binder設備198
5.4.2註冊成為Binder機制的上下文管理者201
5.4.3循環等待和處理客戶端發來的請求203
5 .5系統服務的獲取過程206
5.5.1客戶端MediaPlayerService請求獲取服務206
5.5.2服務端ServiceManager處理請求212
5.6本章小結218

第6章Java Binder原理219
6.1 Java Binder的JNI註冊219
6.1.1 Binder類的註冊223
6.1.2 BinderInternal類的註冊224
6.2 Java Binder中系統服務的註冊過程225
6.2.1將AMS註冊到ServiceManager 226
6.2. 2引出JavaBBinder 230
6.2.3解析JavaBBinder 232
6.2.4 Java Binder架構234
6.3本章小結235

第7章Groovy基礎236
7.1 Groovy概述236
7.2 Groovy編寫和調試237
7.3變量237
7.4方法237
7.5類238
7.6語句239
7.6.1斷言239
7.6 .2 for循環239
7.6.3 switch語句240
7.7數據類型241
7.7.1字符串241
7.7.2 List 242
7.7.3 Map 242
7.7.4閉包(Closure ) 243
7.8 I/O操作244
7.8.1文件讀取244
7.8.2文件寫入244
7.9其他245
7.9.1 asType 245
7.9.2判斷是否為真245
7.9.3安全取值245
7.9.4 with操作符246
7.10本章小結246

第8章Gradle核心思想247
8.1 Gradle概述247
8.1.1項目自動化248
8.1.2構建工具248
8.1.3 Gradle的特性253
8.2 Gradle基礎知識255
8.2.1配置Gradle環境255
8.2.2實現Hello World 257
8.2.3 Gradle的任務258
8.2.4 Gradle日誌級別260
8.2.5 Gradle命令行261
8.3被忽視的Gradle Wrapper 263
8.3.1為什麼需要Gradle Wrapper 263
8.3.2構建Gradle Wrapper 264
8.3.3配置Gradle Wrapper 265
8.3.4使用Gradle Wrapper 266
8.3.5升級Gradle Wrapper 267
8.3.6自定義Gradle Wrapper 268
8.4 Gradle插件基礎268
8.4.1 Gradle插件概述268
8.4.2應用Gradle插件270
8.4.3插件DSL 272
8.4.4自定義對象插件273
8.4.5 Gradle插件的作用和優點274
8.5自定義Gradle插件274
8.5.1在build.gradle中編寫275
8.5.2在buildSrc工程項目中編寫277
8.5.3在獨立項目中編寫278
8.6本章小結281

第9章Gradle的Android插件282
9.1什麼是Gradle的Android插件282
9.2 Android Studio的模塊類型和項目視圖283
9.3項目build.gradle 284
9.4模塊build.gradle 285
9.4.1 Gradle的Android插件類型286
9.4.2 Android塊286
9.4.3 dependencies塊291
9.5 Android簽名文件配置292
9.5.1自定義簽名信息文件292
9. 5.2本地添加簽名信息文件293
9.6 Gradle的庫依賴294
9.7 Gradle的庫依賴管理295
9.7.1 Gradle的依賴傳遞296
9.7.2 Gradle的依賴檢查296
9.7. 3 Gradle的依賴衝突299
9.8本章小結301

第10章Android Jetpack架構組件302
10.1 Android Jetpack簡介303
10.2 Android Jetpack分類303
10.2.1 Architecture 304
10.2.2 Foundationy 305
10. 2.3 Behavior 306
10.2.4 UI 307
10.3在應用中引入Jetpack相關組件307
10.4使用Lifecycle 307
10.4.1為什麼需要Lifecycle 307
10.4.2如何使用Lifecycle 309
10.4.3 Lifecycle應用舉例312
10.4.4自定義LifecycleOwner 315
10.5 Lifecycle的原理316
10.5.1 Lifecycle的生命週期狀態事件和狀態316
10.5.2 Lifecycle如何觀察Activity和Fragment的生命週期317
10.5.3 Lifecycle關聯類327
10.6使用LiveData 328
10.6.1什麼是LiveData 328
10.6. 2 LiveData的基本用法329
10.6.3更改LiveData中的數據330
10.6.4合併多個LiveData數據源332
10.6.5拓展LiveData對象333
10.7 LiveData的原理335
10.7.1 LiveData如何觀察組件生命週期變化335
10.7.2 LiveData的observe方法回調336
10.7.3 postValue/setValue方法分析339
10.7.4 Transformations.map方法分析341
10.7.5 LiveData關聯類343
10.8使用ViewModel 344
10.8.1什麼是ViewModel 345
10.8.2 ViewModel的基本使用方法345
10.8.3 ViewModel的生命週期347
10.9 ViewModel的原理348
10.10本章小結351

第11章跨平台技術演進352
11.1 Web App 353
11.2 Hybrid App 353
11.2.1 Cordova 354
11.2.2 Ionic 355
11.2.3 VasSonic 355
11.2.4微信小程序356
11.3語言編譯轉換357
11.4原生渲染358
11.4.1 React Native 358
11.4.2 Weex 358
11.4.3快應用359
11.5自繪UI 360
11.5.1 Qt 360
11.5.2 Flutter 361
11.6本章小結362

第12章Dart基礎363
12.1 Dart開發環境搭建363
12.2 Dart概述364
12.3 Dart的特性和重要概念365
12.4 Dart關鍵字366
12.5變量367
12. 6基本數據類型367
12.6.1 Number 367
12.6.2 String 368
12.6.3 Boolean 368
12.6.4 List 368
12.6.5 Set 369
12.6.6 Map 369
12.7函數369
12.7 .1可選參數370
12.7.2默認參數值370
12.7.3 main函數371
12.7.4匿名函數371
12.8流程控制語句371
12.8.1 for循環372
12.8. 2 switch和case 372
12.9捕獲異常373
12.10為類添加新的功能373
12.11庫的使用方法374
12.12異步支持375
12.13使類可調用376
12.14創建實例376
12 .15本章小結376

第13章Flutter基礎377
13.1 Flutter開發環境搭建和Hello World 377
13.1.1 Flutter概述378
13.1.2 Flutter開發環境搭建378
13.1.3運行一個Flutter Demo 383
13.1.4 Hello World 385
13.2 Widget基礎386
13.2.1 Widget概述387
13.2.2 Widget的分類387
13.2.3 Widget的狀態分類388
13.2.4根Widget的種類388
13.3 Basic Widget 389
13.3.1代碼模板和主題389
13.3.2文本390
13.3.3圖片391
13.3.4凸起按鈕394
13.3.5其他Widget 395
13.4 Material組件397
13.4.1 MaterialApp 398
13.4 .2 Scaffold 401
13.4.3 AppBar 403
13.4.4 BottomNavigationBar 405
13.4.5 TabBar 407
13.4.6 Drawer 411
13.5 Scrolling Widget 413
13.5.1 ListView 413
13.5.2 GridView 418
13.5.3 PageView 419
13.6手勢相關Widget 421
13.6.1指針事件421
13.6.2手勢422
13.6.3使用GestureDetector 423
13.6.4使用Dismissible 424
13.7資源和圖片426
13.7.1指定asset 426
13.7.2加載文本427
13.7.3加載圖片430
13.8佈局Widget 433
13.8.1線性佈局Widget 433
13.8. 2流式佈局Widget 434
13.8.3層式佈局Widget 436
13.8.4彈性佈局Widget 438
13.9網絡請求庫Dio 440
13.9.1 Dio的使用入門440
13.9.2 Dio訪問網絡441
13.10 JSON數據解析443
13.10.1使用json.decode方法443
13.10.2手動編寫實體類444
13.10.3自動生成實體類445
13.11路由與數據傳遞447
13.11.1新建路由447
13.11.2使用註冊路由450
13. 11.3路由間數據傳遞451
13.12 Flutter與Android的相互通信456
13.12.1 PlatformChannel概述456
13.12.2 Flutter調用Android 458
13.12.3 Android調用Flutter 461
13.13本章小結465