登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
资源来自互联网分享,侵权请告知删除。
如链接失效,请联系管理

安卓进阶三部曲之《Android进阶指北》
《Android进阶指北》是一本Android进阶图书,结合《Android进阶之光》和《Android进阶解密》两本书介绍的知识,一同建立起Android应用开发进阶知识体系。全书共分13章,主要从3个方面来组织内容:(1)Android应用开发所需要掌握的系统源码知识,包括系统源码的下载、编译、调试,包管理机制,输入系统,Native Binder,Java Binder;(2)应用开发必需的知识点,包括Groovy基础、Gradle核心思想、Gradle的Android插件、Android Jetpack架构组件;(3)与跨平台开发相关的知识点,包括跨平台技术演进、Dart基础、Flutter基础。 本书适合有一定基础的Android应用开发工程师和对Android系统源码感兴趣的读者阅读。 目录
- 第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
下载地址:
试读已结束,请付费阅读全文。   本文只能试读96%,付费后可阅读全文。  |