Android进阶解密 出版时间:2018内容简介 《Android进阶解密》是一本Android进阶书籍,主要针对Android 8.0系统源码并结合应用开发相关知识进行介绍。《Android进阶解密》共分为17章,从3个方面来组织内容。 第1方面介绍Android应用开发所需要掌握的系统源码知识,第二方面介绍JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,第三方面介绍热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。3个方面有所关联并形成一个知识体系,从而使Android开发者能通过阅读本书达到融会贯通的目的。 《Android进阶解密》适合有一定基础的Android应用开发工程师、Android系统开发工程师和对Android系统源码感兴趣的读者阅读。目录第1章 Android系统架构 11.1 Android系统架构 11.2 Android系统源码目录 41.2.1 整体结构 41.2.2 应用层部分 51.2.3 应用框架层部分 61.2.4 C/C++程序库部分 61.3 源码阅读 71.3.1 在线阅读 71.3.2 使用Source Insight 91.4 本章小结 12第2章 Android系统启动 132.1 init进程启动过程 132.1.1 引入init进程 132.1.2 init进程的入口函数 142.1.3 解析init.rc 172.1.4 解析Service类型语句 192.1.5 init启动Zygote 202.1.6 属性服务 232.1.7 init进程启动总结 272.2 Zygote进程启动过程 272.2.1 Zygote概述 282.2.2 Zygote启动脚本 282.2.3 Zygote进程启动过程介绍 302.2.4 Zygote进程启动总结 382.3 SystemServer处理过程 392.3.1 Zygote处理SystemServer进程 392.3.2 解析SystemServer进程 442.3.3 SystemServer进程总结 482.4 Launcher启动过程 482.4.1 Launcher概述 482.4.2 Launcher启动过程介绍 492.4.3 Launcher中应用图标显示过程 542.5 Android系统启动流程 592.6 本章小结 60第3章 应用程序进程启动过程 613.1 应用程序进程简介 613.2 应用程序进程启动过程介绍 623.2.1 AMS发送启动应用程序进程请求 623.2.2 Zygote接收请求并创建应用程序进程 683.3 Binder线程池启动过程 753.4 消息循环创建过程 783.5 本章小结 80第4章 四大组件的工作过程 814.1 根Activity的启动过程 824.1.1 Launcher请求AMS过程 824.1.2 AMS到ApplicationThread的调用过程 854.1.3 ActivityThread启动Activity的过程 944.1.4 根Activity启动过程中涉及的进程 994.2 Service的启动过程 1014.2.1 ContextImpl到AMS的调用过程 1014.2.2 ActivityThread启动Service 1034.3 Service的绑定过程 1104.3.1 ContextImpl到AMS的调用过程 1114.3.2 Service的绑定过程 1124.4 广播的注册、发送和接收过程 1224.4.1 广播的注册过程 1224.4.2 广播的发送和接收过程 1274.5 Content Provider的启动过程 1374.5.1 query方法到AMS的调用过程 1374.5.2 AMS启动Content Provider的过程 1434.6 本章小结 148第5章 理解上下文Context 1495.1 Context的关联类 1495.2 Application Context的创建过程 1515.3 Application Context的获取过程 1565.4 Activity的Context创建过程 1565.5 Service的Context创建过程 1615.6 本章小结 163第6章 理解ActivityManagerService 1646.1 AMS家族 1646.1.1 Android 7.0的AMS家族 1646.1.2 Android 8.0的AMS家族 1706.2 AMS的启动过程 1716.3 AMS与应用程序进程 1746.4 AMS重要的数据结构 1766.4.1 解析ActivityRecord 1776.4.2 解析TaskRecord 1776.4.3 解析ActivityStack 1786.5 Activity栈管理 1816.5.1 Activity任务栈模型 1816.5.2 Launch Mode 1826.5.3 Intent的FLAG 1826.5.4 taskAffinity 1856.6 本章小结 186第7章 理解WindowManager 1877.1 Window、WindowManager和WMS 1877.2 WindowManager的关联类 1887.3 Window的属性 1937.3.1 Window的类型和显示次序 1937.3.2 Window的标志 1957.3.3 软键盘相关模式 1967.4 Window的操作 1967.4.1 系统窗口的添加过程 1977.4.2 Activity的添加过程 2027.4.3 Window的更新过程 2037.5 本章小结 206第8章 理解WindowManagerService 2078.1 WMS的职责 2078.2 WMS的创建过程 2098.3 WMS的重要成员 2178.4 Window的添加过程(WMS处理部分) 2198.5 Window的删除过程 2258.6 本章小结 230第9章 JNI原理 2319.1 系统源码中的JNI 2329.2 MediaRecorder框架中的JNI 2339.2.1 Java Framework层的MediaRecorder 2339.2.2 JNI层的MediaRecorder 2349.2.3 Native方法注册 2359.3 数据类型的转换 2399.3.1 基本数据类型的转换 2409.3.2 引用数据类型的转换 2409.4 方法签名 2429.5 解析JNIEnv 2449.5.1 jfieldID和jmethodID 2459.5.2 使用jfieldID和jmethodID 2479.6 引用类型 2499.6.1 本地引用 2499.6.2 全局引用 2499.6.3 弱全局引用 2509.7 本章小结 251第10章 Java虚拟机 25210.1 概述 25210.1.1 Java虚拟机家族 25310.1.2 Java虚拟机执行流程 25310.2 Java虚拟机结构 25410.2.1 Class文件格式 25510.2.2 类的生命周期 25610.2.3 类加载子系统 25710.2.4 运行时数据区域 25810.3 对象的创建 26010.4 对象的堆内存布局 26210.5 oop-klass模型 26310.6 垃圾标记算法 26610.6.1 Java中的引用 26610.6.2 引用计数算法 26710.6.3 根搜索算法 26910.7 Java对象在虚拟机中的生命周期 27010.8 垃圾收集算法 27110.8.1 标记—清除算法 27110.8.2 复制算法 27210.8.3 标记—压缩算法 27310.8.4 分代收集算法 27410.9 本章小结 275第11章 Dalvik和ART 27611.1 Dalvik虚拟机 27611.1.1 DVM与JVM的区别 27611.1.2 DVM架构 27811.1.3 DVM的运行时堆 28011.1.4 DVM的GC日志 28011.2 ART虚拟机 28111.2.1 ART与DVM的区别 28111.2.2 ART的运行时堆 28211.2.3 ART的GC日志 28311.3 DVM和ART的诞生 28511.4 本章小结 288第12章 理解ClassLoader 28912.1 Java中的ClassLoader 28912.1.1 ClassLoader的类型 28912.1.2 ClassLoader的继承关系 29112.1.3 双亲委托模式 29212.1.4 自定义ClassLoader 29512.2 Android中的ClassLoader 29812.2.1 ClassLoader的类型 29812.2.2 ClassLoader的继承关系 30012.2.3 ClassLoader的加载过程 30212.2.4 BootClassLoader的创建 30612.2.5 PathClassLoader的创建 30912.3 本章小结 311第13章 热修复原理 31213.1 热修复的产生 31213.2 热修复框架的种类和对比 31313.3 资源修复 31413.3.1 Instant Run概述 31413.3.2 Instant Run的资源修复 31513.4 代码修复 31813.4.1 类加载方案 31913.4.2 底层替换方案 32113.4.3 Instant Run方案 32213.5 动态链接库的修复 32313.5.1 System的load和loadLibarary方法 32313.5.2 nativeLoad方法分析 32713.6 本章小结 333第14章 Hook技术 33414.1 Hook技术概述 33414.2 Hook技术分类 33614.3 代理模式 33614.3.1 代理模式简单实现 33714.3.2 动态代理的简单实现 33814.4 Hook startActivity方法 33914.4.1 Hook Activity的startActivity方法 34014.4.2 Hook Context的startActivity方法 34314.4.3 Hook startActivity总结 34414.5 本章小结 345第15章 插件化原理 34615.1 动态加载技术 34615.2 插件化的产生 34715.2.1 应用开发的痛点和瓶颈 34715.2.2 插件化思想 34815.2.3 插件化定义 35015.3 插件化框架对比 35115.4 Activity插件化 35215.4.1 Activity的启动过程回顾 35215.4.2 Hook IActivityManager方案实现 35415.4.3 Hook Instrumentation方案实现 36415.4.4 总结 36715.5 Service插件化 36815.5.1 插件化方面Service与Activity的不同 36815.5.2 代理分发实现 37015.6 ContentProvider插件化 37615.6.1 ContentProvider的启动过程回顾 37615.6.2 VirtualApk的实现 37715.7 BroadcastReceiver的插件化 38515.7.1 广播插件化思路 38615.7.2 VirtualApk的实现 38615.8 资源的插件化 38715.8.1 系统资源加载 38715.8.2 VirtualApk实现 38915.9 so的插件化 39015.10 本章小结 393第16章 绘制优化 39416.1 绘制性能分析 39416.1.1 绘制原理 39516.1.2 Profile GPU Rendering 39616.1.3 Systrace 39816.1.4 Traceview 40416.2 布局优化 40716.2.1 布局优化工具 40716.2.2 布局优化方法 41116.2.3 避免GPU过度绘制 41916.3 本章小结 420第17章 内存优化 42117.1 避免可控的内存泄漏 42117.1.1 什么是内存泄漏 42117.1.2 内存泄漏的场景 42217.2 Memory Monitor 42817.2.1 使用Memory Monitor 42917.2.2 大内存申请与GC 43017.2.3 内存抖动 43017.3 Allocation Tracker 43017.3.1 使用Allocation Tracker 43117.3.2 alloc文件分析 43117.4 Heap Dump 43417.4.1 使用Heap Dump 43417.4.2 检测内存泄漏 43617.5 内存分析工具MAT 43817.5.1 生成hprof文件 43817.5.2 MAT分析hprof文件 44017.6 LeakCanary 44817.6.1 使用LeakCanary 44917.6.2 LeakCanary应用举例 44917.7 本章小结 453 上一篇: 自己动手实现Lua:虚拟机、编译器和标准库 下一篇: 一个APP的诞生 从零开始设计你的手机应用