书籍详情

Android进阶指北

Android进阶指北

作者:刘望舒 著

出版社:电子工业出版社

出版时间:2020-09-01

ISBN:9787121393754

定价:¥109.00

购买这本书可以去
内容简介
  本书是一本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
猜您喜欢

读书导航