温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
Android
进阶
解密
CMYCMMYCYCMYKAndroid解密fy.pdf 1 2018/9/27 9:30:56 内 容 简 介 本书是一本 Android 进阶书籍,主要针对 Android 8.0 系统源码并结合应用开发相关知识进行介绍。本书共分为 17 章,从 3 个方面来组织内容。第一方面介绍 Android 应用开发所需要掌握的系统源码知识,第二方面介绍 JNI、ClassLoader、Java虚拟机、DVM&ART 虚拟机和 Hook 等技术,第三方面介绍热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。3 个方面有所关联并形成一个知识体系,从而使 Android 开发者能通过阅读本书达到融会贯通的目的。本书适合有一定基础的 Android 应用开发工程师、Android 系统开发工程师和对 Android 系统源码感兴趣的读者阅读。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 Android 进阶解密/刘望舒著.北京:电子工业出版社,2018.10 ISBN 978-7-121-34838-9.A.刘.移动终端应用程序程序设计.TN929.53 中国版本图书馆 CIP 数据核字(2018)第 179236 号 策划编辑:付 睿 责任编辑:牛 勇 特约编辑:赵树刚 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:787980 1/16 印张:29.25 字数:702 千字 版 次:2018 年 10 月第 1 版 印 次:2018 年 10 月第 1 次印刷 定 价:99.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件到 。本书咨询联系方式:010-51260888-819,。前言 为什么写这本书 Android 进阶二部曲包括Android 进阶之光和本书,因此写这本书的原因和Android进阶之光有些关联,主要有以下几点:(1)Android 进阶之光适合初、中级工程师阅读,因此我需要写一本适合中、高级工程师阅读的进阶书。(2)目前市场上的系统源码分析的书大部分不是专门为应用开发编写的,因此我要专门为Android 应用开发编写一本系统源码分析的书,不仅如此,我还要将系统源码和应用开发相结合。(3)目前 Android 应用综合类进阶书籍很少,在 2017 年出版的只有Android 进阶之光,在 2018 年我仍要贡献出自己的力量。(4)目前市面上的源码分析类书籍大部分是基于 Android 6.0 以前版本的,需要有一本书籍来对更新版本的系统源码进行分析。(5)Android 进阶之光覆盖的知识点还远远不够,我希望能覆盖更多的知识点,让更多的人受益。本书内容 本书共分为 17 章,各章内容如下:第 1 章介绍 Android 系统架构、系统源码目录和如何阅读源码,带领大家走进 Android系统源码的世界。Android 进阶解密 IV 第 2 章介绍 Android 系统启动过程,为下面的章节做好铺垫。第 3 章介绍应用程序进程启动过程。第 4 章介绍四大组件的工作过程,包括根 Activity 的启动过程,Service 的启动和绑定过程,广播的注册、发送和接收过程,Content Provider 的启动过程。第 5 章从源码角度分析上下文 Context。第 6 章介绍 ActivityManagerService,包括 AMS 家族、AMS 的启动过程、AMS 重要的数据结构和 Activity 栈管理等内容。第 7 章介绍 WindowManager,包括 WindowManager 的关联类、Window 的属性和 Window的操作等内容。第8章介绍WindowManagerService,包括WMS的创建过程、WMS的重要成员和Window的添加过程等内容。第 9 章结合 MediaRecorder 框架来介绍 JNI 的原理。第 10 章介绍 Android 开发所需要了解的 Java 虚拟机知识。第 11 章介绍 Dalvik 和 ART 虚拟机。第 12 章介绍 ClassLoader,它是理解热修复原理和插件化原理必备的知识点。第 13 章介绍热修复原理,包括热修复框架的对比、资源修复、代码修复和动态链接库的修复。第 14 章介绍 Hook 技术,为讲解插件化原理做铺垫。第 15 章介绍插件化原理,包括插件化的产生、四大组件的插件化、资源的插件化和 so的插件化。第 16 章介绍绘制优化,包括绘制性能分析和布局优化。第17章介绍内存优化,从避免内存泄漏开始讲起,然后介绍常用的内存分析工具Memory Monitor、Allocation Tracker 和 Heap Dump,最后介绍分析内存泄漏的利器 MAT 和LeakCanary。本书特色 本书主要有以下特点:本书的知识点自成体系并且环环相扣,每一个章节都或多或少地与其他章节有所关联。本书是目前市面上少有的专门为 Android 应用开发者所编写的源码分析类书籍,并且将系统源码和应用开发相结合。前言 V 本书是目前市面上少有的讲解插件化和热修复原理的书。本书为了更好地讲解知识点,会先介绍一些知识点做铺垫,比如要学习插件化原理,就需要先学习四大组件工作过程、AMS、ClassLoader 和 Hook 技术等相关知识点。读者对象 本书适合以下读者阅读:有一定基础的 Android 应用开发工程师。Android 系统开发工程师。对 Android 系统源码感兴趣的读者。致谢 感谢本书的策划编辑付睿,她在 CSDN 博客中发现了我,并积极推动本书的出版进度,才使得本书能够及时出版。感谢我的父母以及所有关注我的朋友们,你们的鼓励和认可为我写书以及写博客带来了源源不断的动力。勘误与互动 本人虽已竭尽全力,但书中难免会有错误,欢迎大家向我反馈,我也会在独立博客和 CSDN博客中定期发布本书的勘误信息。本书互动地址 独立博客:http:/ CSDN 博客:http:/ Github:https:/ 微信公众号:刘望舒 QQ 交流群:499174415 刘望舒 2018 年 6 月于北京 目录 第 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 目录 VII 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 Android 进阶解密 VIII 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 目录 IX 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 的