书籍详情
《安卓开发入门到精通Android进阶之光+ 进阶解密+进阶指北开发工程师Flutter系统源码》[52M]百度网盘|亲测有效|pdf下载
  • 安卓开发入门到精通Android进阶之光+ 进阶解密+进阶指北开发工程师Flutter系统源码

  • 热度:8418
  • 上架时间:2024-06-30 08:52:20
  • 价格:9.0
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍


9787121315305 9787121348389 9787121393754

内容简介

本书是一本Android进阶类书籍,书中各知识点由浅入深、环环相扣,最终这些知识点形成了一个体系结构。本书共分为11章。第1章介绍Android 5.0到Android 7.0的新特性。第2章介绍Material Design。第3章介绍View体系,包括View的事件分发、工作流程、自定义View等知识点。第4章介绍多线程的知识。第5章介绍网络编程与网络框架的知识。第6章介绍常用的设计模式。第7章介绍事件总线。第8到第10章介绍架构设计所需要的知识点。第11章简单介绍Android系统框架与MediaPlayer框架。本书详细并深入讲解Android开发者必备的和前沿的知识,适合有一定开发基础的开发者阅读,这有助于他们提高技术水平;同时,本书系统的知识体系结构也令高级开发者从中获益良多。

目录

第1章 Android新特性 1


1.1 Android 5.0新特性 1


1.1.1 Android 5.0主要新特性概述 1


1.1.2 替换ListView和GridView的RecyclerView 3


1.1.3 卡片CardView 13


1.1.4 3种Notification 18


1.1.5 Toolbar与Palette 23


1.2 Android 6.0新特性 29


1.2.1 Android 6.0主要新特性概述 29


1.2.2 运行时权限机制 30


1.3 Android 7.0新特性 43


1.3.1 Android 7.0主要新特性概述 43


1.3.2 多窗口模式 44


1.4 本章小结 47


第2章 Material Design 48


2.1 Material Design概述 48


2.1.1 核心思想 48


2.1.2 材质与空间 49


2.1.3 动画 49


2.1.4 样式 50


2.1.5 图标 51


2.1.6 图像 51


2.1.7 组件 51


2.2 Design Support Library常用控件详解 54


2.2.1 Snackbar的使用 54


2.2.2 用TextInputLayout实现登录界面 55


2.2.3 FloatingActionButton的使用 60


2.2.4 用TabLayout实现类似网易选项卡的动态滑动效果 61


2.2.5 用NavigationView实现抽屉菜单界面 68


2.2.6 用CoordinatorLayout实现Toolbar隐藏和折叠 74


2.3 本章小结 86


第3章 View体系与自定义View 87


3.1 View与ViewGroup 87


3.2 坐标系 89


3.2.1 Android坐标系 89


3.2.2 View坐标系 90


3.3 View的滑动 91


3.3.1 layout()方法 92


3.3.2 offsetLeftAndRight()与offsetTopAndBottom() 94


3.3.3 LayoutParams(改变布局参数) 95


3.3.4 动画 95


3.3.5 scrollTo与scollBy 96


3.3.6 Scroller 98


3.4 属性动画 99


3.5 解析Scroller 105


3.6 View的事件分发机制 108


3.6.1 源码解析Activity的构成 108


3.6.2 源码解析View的事件分发机制 112


3.7 View的工作流程 119


3.7.1 View的工作流程入口 119


3.7.2 理解MeasureSpec 122


3.7.3 View的measure流程 126


3.7.4 View的layout流程 132


3.7.5 View的draw流程 135


3.8 自定义View 139


3.8.1 继承系统控件的自定义View 140


3.8.2 继承View的自定义View 141


3.8.3 自定义组合控件 147


3.8.4 自定义ViewGroup 152


3.9 本章小结 164


第4章 多线程编程 165


4.1 线程基础 165


4.1.1 进程与线程 165


4.1.2 线程的状态 167


4.1.3 创建线程 168


4.1.4 理解中断 170


4.1.5 安全地终止线程 171


4.2 同步 173


4.2.1 重入锁与条件对象 173


4.2.2 同步方法 175


4.2.3 同步代码块 176


4.2.4 volatile 177


4.3 阻塞队列 183


4.3.1 阻塞队列简介 183


4.3.2 Java中的阻塞队列 184


4.3.3 阻塞队列的实现原理 186


4.3.4 阻塞队列的使用场景 188


4.4 线程池 190


4.4.1 ThreadPoolExecutor 190


4.4.2 线程池的处理流程和原理 192


4.4.3 线程池的种类 193


4.5 AsyncTask的原理 197


4.6 本章小结 203


第5章 网络编程与网络框架 204


5.1 网络分层 204


5.2 TCP的三次握手与四次挥手 205


5.3 HTTP协议原理 207


5.3.1 HTTP简介 207


5.3.2 HTTP请求报文 208


5.3.3 HTTP响应报文 209


5.3.4 HTTP的消息报头 210


5.3.5 抓包应用举例 211


5.4 HttpClient与HttpURLConnection 212


5.4.1 HttpClient 212


5.4.2 HttpURLConnection 216


5.5 解析Volley 218


5.5.1 Volley基本用法 218


5.5.2 源码解析Volley 223


5.6 解析OkHttp 231


5.6.1 OkHttp基本用法 232


5.6.2 源码解析OkHttp 240


5.7 解析Retrofit 255


5.7.1 Retrofit基本用法 255


5.7.2 源码解析Retrofit 261


5.8 本章小结 270


第6章 设计模式 271


6.1 设计模式六大原则 271


6.2 设计模式分类 273


6.3 创建型设计模式 273


6.3.1 单例模式 274


6.3.2 简单工厂模式 277


6.3.3 工厂方法模式 279


6.3.4 建造者模式 281


6.4 结构型设计模式 284


6.4.1 代理模式 285


6.4.2 装饰模式 288


6.4.3 外观模式 291


6.4.4 享元模式 295


6.5 行为型设计模式 298


6.5.1 策略模式 298


6.5.2 模板方法模式 301


6.5.3 观察者模式 304


6.6 本章小结 307


第7章 事件总线 308


7.1 解析EventBus 308


7.1.1 使用EventBus 308


7.1.2 源码解析EventBus 314


7.2 解析otto 324


7.2.1 使用otto 324


7.2.2 源码解析otto 327


第8章 函数响应式编程 333


8.1 RxJava基本用法 333


8.1.1 RxJava概述 333


8.1.2 RxJava基本实现 334


8.1.3 RxJava的不完整定义回调 336


8.2 RxJava的Subject 338


8.3 RxJava操作符入门 339


8.3.1 创建操作符 339


8.3.2 变换操作符 340


8.3.3 过滤操作符 344


8.3.4 组合操作符 349


8.3.5 辅助操作符 352


8.3.6 错误处理操作符 355


8.3.7 条件操作符和布尔操作符 357


8.3.8 转换操作符 360


8.4 RxJava的线程控制 362


8.5 RxJava的使用场景 362


8.5.1 RxJava结合OkHttp访问网络 362


8.5.2 RxJava结合Retrofit访问网络 364


8.5.3 用RxJava实现RxBus 368


8.6 RxJava源码解析 370


8.6.1 RxJava的订阅过程 371


8.6.2 RxJava的变换过程 372


8.6.3 RxJava的线程切换过程 376


8.7 本章小结 381


第9章 注解与依赖注入框架 382


9.1 注解 382


9.1.1 注解分类 382


9.1.2 定义注解 384


9.1.3 注解处理器 385


9.2 依赖注入的原理 392


9.2.1 控制反转与依赖注入 392


9.2.2 依赖注入的实现方式 393


9.3 依赖注入框架 395


9.3.1 为何使用依赖注入框架 395


9.3.2 解析ButterKnife 395


9.3.3 解析Dagger2 405


9.4 本章小结 421


第10章 应用架构设计 422


10.1 MVC模式 422


10.2 MVP模式 423


10.2.1 应用MVP模式 424


10.2.2 MVP结合RxJava和Dagger2 431


10.3 MVVM模式 438


10.3.1 解析Data Binding 439


10.3.2 应用Data Binding 457


10.4 本章小结 459


第11章 系统架构与MediaPlayer框架 460


11.1 Android系统架构 460


11.2 Android系统源码目录 463


11.2.1 整体结构 463


11.2.2 应用层部分 464


11.2.3 应用框架层部分 465


11.2.4 C/C++程序库部分 465


11.3 Source Insights使用 466


11.4 MediaPlayer框架 467


11.4.1 Java Framework层的MediaPlayer分析 467


11.4.2 JNI层的MediaPlayer分析 469


11.4.3 Native层的MediaPlayer分析 471


11.5 本章小结 478

内容简介

《Android进阶解密》是一本Android进阶书籍,主要针对Android 8.0系统源码并结合应用开发相关知识进行介绍。《Android进阶解密》共分为17章,从3个方面来组织内容。 第1方面介绍Android应用开发所需要掌握的系统源码知识,第二方面介绍JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,第三方面介绍热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。3个方面有所关联并形成一个知识体系,从而使Android开发者能通过阅读本书达到融会贯通的目的。

《Android进阶解密》适合有一定基础的Android应用开发工程师、Android系统开发工程师和对Android系统源码感兴趣的读者阅读。

目录

第1章 Android系统架构 1

1.1 Android系统架构 1

1.2 Android系统源码目录 4

1.2.1 整体结构 4

1.2.2 应用层部分 5

1.2.3 应用框架层部分 6

1.2.4 C/C++程序库部分 6

1.3 源码阅读 7

1.3.1 在线阅读 7

1.3.2 使用Source Insight 9

1.4 本章小结 12

第2章 Android系统启动 13

2.1 init进程启动过程 13

2.1.1 引入init进程 13

2.1.2 init进程的入口函数 14

2.1.3 解析init.rc 17

2.1.4 解析Service类型语句 19

2.1.5 init启动Zygote 20

2.1.6 属性服务 23

2.1.7 init进程启动总结 27

2.2 Zygote进程启动过程 27

2.2.1 Zygote概述 28

2.2.2 Zygote启动脚本 28

2.2.3 Zygote进程启动过程介绍 30

2.2.4 Zygote进程启动总结 38

2.3 SystemServer处理过程 39

2.3.1 Zygote处理SystemServer进程 39

2.3.2 解析SystemServer进程 44

2.3.3 SystemServer进程总结 48

2.4 Launcher启动过程 48

2.4.1 Launcher概述 48

2.4.2 Launcher启动过程介绍 49

2.4.3 Launcher中应用图标显示过程 54

2.5 Android系统启动流程 59

2.6 本章小结 60

第3章 应用程序进程启动过程 61

3.1 应用程序进程简介 61

3.2 应用程序进程启动过程介绍 62

3.2.1 AMS发送启动应用程序进程请求 62

3.2.2 Zygote接收请求并创建应用程序进程 68

3.3 Binder线程池启动过程 75

3.4 消息循环创建过程 78

3.5 本章小结 80

第4章 四大组件的工作过程 81

4.1 根Activity的启动过程 82

4.1.1 Launcher请求AMS过程 82

4.1.2 AMS到ApplicationThread的调用过程 85

4.1.3 ActivityThread启动Activity的过程 94

4.1.4 根Activity启动过程中涉及的进程 99

4.2 Service的启动过程 101

4.2.1 ContextImpl到AMS的调用过程 101

4.2.2 ActivityThread启动Service 103

4.3 Service的绑定过程 110

4.3.1 ContextImpl到AMS的调用过程 111

4.3.2 Service的绑定过程 112

4.4 广播的注册、发送和接收过程 122

4.4.1 广播的注册过程 122

4.4.2 广播的发送和接收过程 127

4.5 Content Provider的启动过程 137

4.5.1 query方法到AMS的调用过程 137

4.5.2 AMS启动Content Provider的过程 143

4.6 本章小结 148

第5章 理解上下文Context 149

5.1 Context的关联类 149

5.2 Application Context的创建过程 151

5.3 Application Context的获取过程 156

5.4 Activity的Context创建过程 156

5.5 Service的Context创建过程 161

5.6 本章小结 163

第6章 理解ActivityManagerService 164

6.1 AMS家族 164

6.1.1 Android 7.0的AMS家族 164

6.1.2 Android 8.0的AMS家族 170

6.2 AMS的启动过程 171

6.3 AMS与应用程序进程 174

6.4 AMS重要的数据结构 176

6.4.1 解析ActivityRecord 177

6.4.2 解析TaskRecord 177

6.4.3 解析ActivityStack 178

6.5 Activity栈管理 181

6.5.1 Activity任务栈模型 181

6.5.2 Launch Mode 182

6.5.3 Intent的FLAG 182

6.5.4 taskAffinity 185

6.6 本章小结 186

第7章 理解WindowManager 187

7.1 Window、WindowManager和WMS 187

7.2 WindowManager的关联类 188

7.3 Window的属性 193

7.3.1 Window的类型和显示次序 193

7.3.2 Window的标志 195

7.3.3 软键盘相关模式 196

7.4 Window的操作 196

7.4.1 系统窗口的添加过程 197

7.4.2 Activity的添加过程 202

7.4.3 Window的更新过程 203

7.5 本章小结 206

第8章 理解WindowManagerService 207

8.1 WMS的职责 207

8.2 WMS的创建过程 209

8.3 WMS的重要成员 217

8.4 Window的添加过程(WMS处理部分) 219

8.5 Window的删除过程 225

8.6 本章小结 230

第9章 JNI原理 231

9.1 系统源码中的JNI 232

9.2 MediaRecorder框架中的JNI 233

9.2.1 Java Framework层的MediaRecorder 233

9.2.2 JNI层的MediaRecorder 234

9.2.3 Native方法注册 235

9.3 数据类型的转换 239

9.3.1 基本数据类型的转换 240

9.3.2 引用数据类型的转换 240

9.4 方法签名 242

9.5 解析JNIEnv 244

9.5.1 jfieldID和jmethodID 245

9.5.2 使用jfieldID和jmethodID 247

9.6 引用类型 249

9.6.1 本地引用 249

9.6.2 全局引用 249

9.6.3 弱全局引用 250

9.7 本章小结 251

第10章 Java虚拟机 252

10.1 概述 252

10.1.1 Java虚拟机家族 253

10.1.2 Java虚拟机执行流程 253

10.2 Java虚拟机结构 254

10.2.1 Class文件格式 255

10.2.2 类的生命周期 256

10.2.3 类加载子系统 257

10.2.4 运行时数据区域 258

10.3 对象的创建 260

10.4 对象的堆内存布局 262

10.5 oop-klass模型 263

10.6 垃圾标记算法 266

10.6.1 Java中的引用 266

10.6.2 引用计数算法 267

10.6.3 根搜索算法 269

10.7 Java对象在虚拟机中的生命周期 270

10.8 垃圾收集算法 271

10.8.1 标记—清除算法 271

10.8.2 复制算法 272

10.8.3 标记—压缩算法 273

10.8.4 分代收集算法 274

10.9 本章小结 275

第11章 Dalvik和ART 276

11.1 Dalvik虚拟机 276

11.1.1 DVM与JVM的区别 276

11.1.2 DVM架构 278

11.1.3 DVM的运行时堆 280

11.1.4 DVM的GC日志 280

11.2 ART虚拟机 281

11.2.1 ART与DVM的区别 281

11.2.2 ART的运行时堆 282

11.2.3 ART的GC日志 283

11.3 DVM和ART的诞生 285

11.4 本章小结 288

第12章 理解ClassLoader 289

12.1 Java中的ClassLoader 289

12.1.1 ClassLoader的类型 289

12.1.2 ClassLoader的继承关系 291

12.1.3 双亲委托模式 292

12.1.4 自定义ClassLoader 295

12.2 Android中的ClassLoader 298

12.2.1 ClassLoader的类型 298

12.2.2 ClassLoader的继承关系 300

12.2.3 ClassLoader的加载过程 302

12.2.4 BootClassLoader的创建 306

12.2.5 PathClassLoader的创建 309

12.3 本章小结 311

第13章 热修复原理 312

13.1 热修复的产生 312

13.2 热修复框架的种类和对比 313

13.3 资源修复 314

13.3.1 Instant Run概述 314

13.3.2 Instant Run的资源修复 315

13.4 代码修复 318

13.4.1 类加载方案 319

13.4.2 底层替换方案 321

13.4.3 Instant Run方案 322

13.5 动态链接库的修复 323

13.5.1 System的load和loadLibarary方法 323

13.5.2 nativeLoad方法分析 327

13.6 本章小结 333

第14章 Hook技术 334

14.1 Hook技术概述 334

14.2 Hook技术分类 336

14.3 代理模式 336

14.3.1 代理模式简单实现 337

14.3.2 动态代理的简单实现 338

14.4 Hook startActivity方法 339

14.4.1 Hook Activity的startActivity方法 340

14.4.2 Hook Context的startActivity方法 343

14.4.3 Hook startActivity总结 344

14.5 本章小结 345

第15章 插件化原理 346

15.1 动态加载技术 346

15.2 插件化的产生 347

15.2.1 应用开发的痛点和瓶颈 347

15.2.2 插件化思想 348

15.2.3 插件化定义 350

15.3 插件化框架对比 351

15.4 Activity插件化 352

15.4.1 Activity的启动过程回顾 352

15.4.2 Hook IActivityManager方案实现 354

15.4.3 Hook Instrumentation方案实现 364

15.4.4 总结 367

15.5 Service插件化 368

15.5.1 插件化方面Service与Activity的不同 368

15.5.2 代理分发实现 370

15.6 ContentProvider插件化 376

15.6.1 ContentProvider的启动过程回顾 376

15.6.2 VirtualApk的实现 377

15.7 BroadcastReceiver的插件化 385

15.7.1 广播插件化思路 386

15.7.2 VirtualApk的实现 386

15.8 资源的插件化 387

15.8.1 系统资源加载 387

15.8.2 VirtualApk实现 389

15.9 so的插件化 390

15.10 本章小结 393

第16章 绘制优化 394

16.1 绘制性能分析 394

16.1.1 绘制原理 395

16.1.2 Profile GPU Rendering 396

16.1.3 Systrace 398

16.1.4 Traceview 404

16.2 布局优化 407

16.2.1 布局优化工具 407

16.2.2 布局优化方法 411

16.2.3 避免GPU过度绘制 419

16.3 本章小结 420

第17章 内存优化 421

17.1 避免可控的内存泄漏 421

17.1.1 什么是内存泄漏 421

17.1.2 内存泄漏的场景 422

17.2 Memory Monitor 428

17.2.1 使用Memory Monitor 429

17.2.2 大内存申请与GC 430

17.2.3 内存抖动 430

17.3 Allocation Tracker 430

17.3.1 使用Allocation Tracker 431

17.3.2 alloc文件分析 431

17.4 Heap Dump 434

17.4.1 使用Heap Dump 434

17.4.2 检测内存泄漏 436

17.5 内存分析工具MAT 438

17.5.1 生成hprof文件 438

17.5.2 MAT分析hprof文件 440

17.6 LeakCanary 448

17.6.1 使用LeakCanary 449

17.6.2 LeakCanary应用举例 449

17.7 本章小结 453

内容简介

本书是一本Android进阶图书,结合《Android进阶之光》和《Android进阶解密》两本书介绍的知识,一同建立起Android应用开发进阶知识体系。全书共分13章,主要从3个方面来组织内容:(1)Android应用开发所需要掌握的系统源码知识,包括系统源码的下载、编译、调试,包管理机制,输入系统,Native Binder,Java Binder;(2)应用开发必需的知识点,包括Groovy基础、Gradle核心思想、Gradle的Android插件、Android Jetpack架构组件;(3)与跨平台开发相关的知识点,包括跨平台技术演进、Dart基础、Flutter基础。

目录

Android进阶三部曲知识体系1


第1章 系统源码的下载、编译、调试5


1.1 使用VirtualBox安装Ubuntu5


1.1.1 安装Ubuntu的步骤6


1.1.2 安装增强工具12


1.2 AOSP源码下载14


1.2.1 AOSP简介14


1.2.2 下载repo15


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章 理解包管理机制和PMS41


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 引入PackageParser91


2.5.2 PackageParser解析APK92


2.5.3 Package的数据结构99


2.6 本章小结100


第3章 理解输入系统和IMS102


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 唤醒InputDispatcherThread123


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注册到ServiceManager226


6.2.2 引出JavaBBinder230


6.2.3 解析JavaBBinder232


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 List242


7.7.3 Map242


7.7.4 闭包(Closure)243


7.8 I/O操作244


7.8.1 文件读取244


7.8.2 文件写入244


7.9 其他245


7.9.1 asType245


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 World257


8.2.3 Gradle的任务258


8.2.4 Gradle日志级别260


8.2.5 Gradle 命令行261


8.3 被忽视的Gradle Wrapper263


8.3.1 为什么需要Gradle Wrapper263


8.3.2 构建Gradle Wrapper264


8.3.3 配置Gradle Wrapper265


8.3.4 使用Gradle Wrapper266


8.3.5 升级Gradle Wrapper267


8.3.6 自定义Gradle Wrapper268


8.4 Gradle插件基础268


8.4.1 Gradle插件概述268


8.4.2 应用Gradle插件270


8.4.3 插件DSL272


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.gradle284


9.4 模块build.gradle285


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 Architecture304


10.2.2 Foundationy305


10.2.3 Behavior306


10.2.4 UI307


10.3 在应用中引入Jetpack相关组件307


10.4 使用Lifecycle307


10.4.1 为什么需要Lifecycle307


10.4.2 如何使用Lifecycle309


10.4.3 Lifecycle应用举例312


10.4.4 自定义LifecycleOwner315


10.5 Lifecycle的原理316


10.5.1 Lifecycle的生命周期状态事件和状态316


10.5.2 Lifecycle如何观察Activity和Fragment的生命周期317


10.5.3 Lifecycle关联类327


10.6 使用LiveData328


10.6.1 什么是LiveData328


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 使用ViewModel344


10.8.1 什么是ViewModel345


10.8.2 ViewModel的基本使用方法345


10.8.3 ViewModel的生命周期347


10.9 ViewModel的原理348


10.10 本章小结351


第11章 跨平台技术演进352


11.1 Web App353


11.2 Hybrid App353


11.2.1 Cordova354


11.2.2 Ionic355


11.2.3 VasSonic355


11.2.4 微信小程序356


11.3 语言编译转换357


11.4 原生渲染358


11.4.1 React Native358


11.4.2 Weex358


11.4.3 快应用359


11.5 自绘UI360


11.5.1 Qt360


11.5.2 Flutter361


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 Number367


12.6.2 String368


12.6.3 Boolean368


12.6.4 List368


12.6.5 Set369


12.6.6 Map369


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和case372


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 World377


13.1.1 Flutter概述378


13.1.2 Flutter开发环境搭建378


13.1.3 运行一个Flutter Demo383


13.1.4 Hello World385


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 Widget389


13.3.1 代码模板和主题389


13.3.2 文本390


13.3.3 图片391


13.3.4 凸起按钮394


13.3.5 其他Widget395


13.4 Material组件397


13.4.1 MaterialApp398


13.4.2 Scaffold401


13.4.3 AppBar403


13.4.4 BottomNavigationBar405


13.4.5 TabBar407


13.4.6 Drawer411


13.5 Scrolling Widget413


13.5.1 ListView413


13.5.2 GridView418


13.5.3 PageView419


13.6 手势相关Widget421


13.6.1 指针事件421


13.6.2 手势422


13.6.3 使用GestureDetector423


13.6.4 使用Dismissible424


13.7 资源和图片426


13.7.1 指定asset426


13.7.2 加载文本427


13.7.3 加载图片430


13.8 布局Widget433


13.8.1 线性布局Widget433


13.8.2 流式布局Widget434


13.8.3 层式布局Widget436


13.8.4 弹性布局Widget438


13.9 网络请求库Dio440


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调用Android458


13.12.3 Android调用Flutter461


13.13 本章小结465