找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 75|回复: 0

安卓进阶三部曲之《Android进阶指北》

[复制链接]

2万

主题

128

回帖

10万

积分

管理员

积分
105773
发表于 2023-12-26 22:26:43 | 显示全部楼层 |阅读模式 IP:山东省临沂市 移动

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
资源来自互联网分享,侵权请告知删除。
如链接失效,请联系管理


安卓进阶三部曲之《Android进阶指北》



2.png


《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%,付费后可阅读全文。 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|IOTsec-Zone|在线工具|CTF WiKi|CTF平台汇总|CTF show|ctfhub|棱角安全|rutracker|攻防世界|php手册|peiqi文库|CyberChef|猫捉鱼铃|手机版|小黑屋|cn-sec|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2024-5-5 19:22

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表