本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
1 一线专家和工程师何红辉、徐宜生 、何俊林、安卓巴士技术社区、潘辰星、周泰良、杨强、Tamic联袂力荐
□ 《Android进阶解密》基于Android 8.0,将系统源码和应用开发结合讲解,帮助读者融会贯通,破解Android应用开发进阶秘密。
3 《Android进阶之光》介绍了 Android应用开发所需的系统源码知识,还介绍了JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,以及热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。
《Android进阶解密》是一本Android进阶书籍,主要针对Android 8.0系统源码并结合应用开发相关知识进行介绍。《Android进阶解密》共分为17章,从3个方面来组织内容。 第1方面介绍Android应用开发所需要掌握的系统源码知识,第二方面介绍JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,第三方面介绍热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。3个方面有所关联并形成一个知识体系,从而使Android开发者能通过阅读本书达到融会贯通的目的。
《Android进阶解密》适合有一定基础的Android应用开发工程师、Android系统开发工程师和对Android系统源码感兴趣的读者阅读。
为什么写这本书
Android进阶二部曲包括《Android进阶之光》和本书,因此写这本书的原因和《Android进阶之光》有些关联,主要有以下几点:
(1)《Android进阶之光》适合初、中级工程师阅读,因此我需要写一本适合中、高级工程师阅读的进阶书。
(□)目前市场上的系统源码分析的书大部分不是专门为应用开发编写的,因此我要专门为Android应用开发编写一本系统源码分析的书,不仅如此,我还要将系统源码和应用开发相结合。
(3)目前Android应用综合类进阶书籍很少,在□017年出版的只有《Android进阶之光》,在□018年我仍要贡献出自己的力量。
(4)目前市面上的源码分析类书籍大部分是基于Android 6.0以前版本的,需要有一本书籍来对更新版本的系统源码进行分析。
(5)《Android进阶之光》覆盖的知识点还远远不够,我希望能覆盖更多的知识点,让更多的人受益。
本书内容
本书共分为17章,各章内容如下:
□□章介绍Android系统架构、系统源码目录和如何阅读源码,带领大家走进Android系统源码的世界。
第□章介绍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的原理。
□□0章介绍Android开发所需要了解的Java虚拟机知识。
□□1章介绍Dalvik和ART虚拟机。
□□□章介绍ClassLoader,它是理解热修复原理和插件化原理必备的知识点。
□□3章介绍热修复原理,包括热修复框架的对比、资源修复、代码修复和动态链接库的修复。
□□4章介绍Hook技术,为讲解插件化原理做铺垫。
□□5章介绍插件化原理,包括插件化的产生、四大组件的插件化、资源的插件化和so的插件化。
□□6章介绍绘制优化,包括绘制性能分析和布局优化。
□□7章介绍内存优化,从避免内存泄漏开始讲起,然后介绍常用的内存分析工具Memory Monitor、Allocation Tracker和Heap Dump,□后介绍分析内存泄漏的利器MAT和LeakCanary。
本书特色
本书主要有以下特点:
本书的知识点自成体系并且环环相扣,每一个章节都或多或少地与其他章节有所关联。
本书是目前市面上少有的专门为Android应用开发者所编写的源码分析类书籍,并且将系统源码和应用开发相结合。
本书是目前市面上少有的讲解插件化和热修复原理的书。
本书为了更好地讲解知识点,会先介绍一些知识点做铺垫,比如要学习插件化原理,就需要先学习四大组件工作过程、AMS、ClassLoader和Hook技术等相关知识点。
读者对象
本书适合以下读者阅读:
有一定基础的Android应用开发工程师。
Android系统开发工程师。
对Android系统源码感兴趣的读者。
致谢
感谢本书的策划编辑付睿,她在CSDN博客中发现了我,并积极推动本书的出版进度,才使得本书能够及时出版。感谢我的父母以及所有关注我的朋友们,你们的鼓励和认可为我写书以及写博客带来了源源不断的动力。
勘误与互动
本人虽已竭尽全力,但书中难免会有错误,欢迎大家向我反馈,我也会在独立博客和CSDN博客中定期发布本书的勘误信息。
刘望舒
□018年6月于北京
□□章 Android系统架构 1
1.1 Android系统架构 1
1.□ Android系统源码目录 4
1.□.1 整体结构 4
1.□.□ 应用层部分 5
1.□.3 应用框架层部分 6
1.□.4 C/C++程序库部分 6
1.3 源码阅读 7
1.3.1 在线阅读 7
1.3.□ 使用Source Insight 9
1.4 本章小结 1□
第□章 Android系统启动 13
□.1 init进程启动过程 13
□.1.1 引入init进程 13
□.1.□ init进程的入口函数 14
□.1.3 解析init.rc 17
□.1.4 解析Service类型语句 19
□.1.5 init启动Zygote □0
□.1.6 属性服务 □3
□.1.7 init进程启动总结 □7
□.□ Zygote进程启动过程 □7
□.□.1 Zygote概述 □8
□.□.□ Zygote启动脚本 □8
□.□.3 Zygote进程启动过程介绍 30
□.□.4 Zygote进程启动总结 38
□.3 SystemServer处理过程 39
□.3.1 Zygote处理SystemServer进程 39
□.3.□ 解析SystemServer进程 44
□.3.3 SystemServer进程总结 48
□.4 Launcher启动过程 48
□.4.1 Launcher概述 48
□.4.□ Launcher启动过程介绍 49
□.4.3 Launcher中应用图标显示过程 54
□.5 Android系统启动流程 59
□.6 本章小结 60
第3章 应用程序进程启动过程 61
3.1 应用程序进程简介 61
3.□ 应用程序进程启动过程介绍 6□
3.□.1 AMS发送启动应用程序进程请求 6□
3.□.□ Zygote接收请求并创建应用程序进程 68
3.3 Binder线程池启动过程 75
3.4 消息循环创建过程 78
3.5 本章小结 80
第4章 四大组件的工作过程 81
4.1 根Activity的启动过程 8□
4.1.1 Launcher请求AMS过程 8□
4.1.□ AMS到ApplicationThread的调用过程 85
4.1.3 ActivityThread启动Activity的过程 94
4.1.4 根Activity启动过程中涉及的进程 99
4.□ Service的启动过程 101
4.□.1 ContextImpl到AMS的调用过程 101
4.□.□ ActivityThread启动Service 103
4.3 Service的绑定过程 110
4.3.1 ContextImpl到AMS的调用过程 111
4.3.□ Service的绑定过程 11□
4.4 广播的注册、发送和接收过程 1□□
4.4.1 广播的注册过程 1□□
4.4.□ 广播的发送和接收过程 1□7
4.5 Content Provider的启动过程 137
4.5.1 query方法到AMS的调用过程 137
4.5.□ AMS启动Content Provider的过程 143
4.6 本章小结 148
第5章 理解上下文Context 149
5.1 Context的关联类 149
5.□ 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.□ Android 8.0的AMS家族 170
6.□ AMS的启动过程 171
6.3 AMS与应用程序进程 174
6.4 AMS重要的数据结构 176
6.4.1 解析ActivityRecord 177
6.4.□ 解析TaskRecord 177
6.4.3 解析ActivityStack 178
6.5 Activity栈管理 181
6.5.1 Activity任务栈模型 181
6.5.□ Launch Mode 18□
6.5.3 Intent的FLAG 18□
6.5.4 taskAffinity 185
6.6 本章小结 186
第7章 理解WindowManager 187
7.1 Window、WindowManager和WMS 187
7.□ WindowManager的关联类 188
7.3 Window的属性 193
7.3.1 Window的类型和显示次序 193
7.3.□ Window的标志 195
7.3.3 软键盘相关模式 196
7.4 Window的操作 196
7.4.1 系统窗口的添加过程 197
7.4.□ Activity的添加过程 □0□
7.4.3 Window的更新过程 □03
7.5 本章小结 □06
第8章 理解WindowManagerService □07
8.1 WMS的职责 □07
8.□ WMS的创建过程 □09
8.3 WMS的重要成员 □17
8.4 Window的添加过程(WMS处理部分) □19
8.5 Window的删除过程 □□5
8.6 本章小结 □30
第9章 JNI原理 □31
9.1 系统源码中的JNI □3□
9.□ MediaRecorder框架中的JNI □33
9.□.1 Java Framework层的MediaRecorder □33
9.□.□ JNI层的MediaRecorder □34
9.□.3 Native方法注册 □35
9.3 数据类型的转换 □39
9.3.1 基本数据类型的转换 □40
9.3.□ 引用数据类型的转换 □40
9.4 方法签名 □4□
9.5 解析JNIEnv □44
9.5.1 jfieldID和jmethodID □45
9.5.□ 使用jfieldID和jmethodID □47
9.6 引用类型 □49
9.6.1 本地引用 □49
9.6.□ 全局引用 □49
9.6.3 弱全局引用 □50
9.7 本章小结 □51
□□0章 Java虚拟机 □5□
10.1 概述 □5□
10.1.1 Java虚拟机家族 □53
10.1.□ Java虚拟机执行流程 □53
10.□ Java虚拟机结构 □54
10.□.1 Class文件格式 □55
10.□.□ 类的生命周期 □56
10.□.3 类加载子系统 □57
10.□.4 运行时数据区域 □58
10.3 对象的创建 □60
10.4 对象的堆内存布局 □6□
10.5 oop-klass模型 □63
10.6 垃圾标记算法 □66
10.6.1 Java中的引用 □66
10.6.□ 引用计数算法 □67
10.6.3 根搜索算法 □69
10.7 Java对象在虚拟机中的生命周期 □70
10.8 垃圾收集算法 □71
10.8.1 标记—清除算法 □71
10.8.□ □□算法 □7□
10.8.3 标记—压缩算法 □73
10.8.4 分代收集算法 □74
10.9 本章小结 □75
□□1章 Dalvik和ART □76
11.1 Dalvik虚拟机 □76
11.1.1 DVM与JVM的区别 □76
11.1.□ DVM架构 □78
11.1.3 DVM的运行时堆 □80
11.1.4 DVM的GC日志 □80
11.□ ART虚拟机 □81
11.□.1 ART与DVM的区别 □81
11.□.□ ART的运行时堆 □8□
11.□.3 ART的GC日志 □83
11.3 DVM和ART的诞生 □85
11.4 本章小结 □88
□□□章 理解ClassLoader □89
1□.1 Java中的ClassLoader □89
1□.1.1 ClassLoader的类型 □89
1□.1.□ ClassLoader的继承关系 □91
1□.1.3 双亲委托模式 □9□
1□.1.4 自定义ClassLoader □95
1□.□ Android中的ClassLoader □98
1□.□.1 ClassLoader的类型 □98
1□.□.□ ClassLoader的继承关系 300
1□.□.3 ClassLoader的加载过程 30□
1□.□.4 BootClassLoader的创建 306
1□.□.5 PathClassLoader的创建 309
1□.3 本章小结 311
□□3章 热修复原理 31□
13.1 热修复的产生 31□
13.□ 热修复框架的种类和对比 313
13.3 资源修复 314
13.3.1 Instant Run概述 314
13.3.□ Instant Run的资源修复 315
13.4 代码修复 318
13.4.1 类加载方案 319
13.4.□ 底层替换方案 3□1
13.4.3 Instant Run方案 3□□
13.5 动态链接库的修复 3□3
13.5.1 System的load和loadLibarary方法 3□3
13.5.□ nativeLoad方法分析 3□7
13.6 本章小结 333
□□4章 Hook技术 334
14.1 Hook技术概述 334
14.□ Hook技术分类 336
14.3 代理模式 336
14.3.1 代理模式简单实现 337
14.3.□ 动态代理的简单实现 338
14.4 Hook startActivity方法 339
14.4.1 Hook Activity的startActivity方法 340
14.4.□ Hook Context的startActivity方法 343
14.4.3 Hook startActivity总结 344
14.5 本章小结 345
□□5章 插件化原理 346
15.1 动态加载技术 346
15.□ 插件化的产生 347
15.□.1 应用开发的痛点和瓶颈 347
15.□.□ 插件化思想 348
15.□.3 插件化定义 350
15.3 插件化框架对比 351
15.4 Activity插件化 35□
15.4.1 Activity的启动过程回顾 35□
15.4.□ Hook IActivityManager方案实现 354
15.4.3 Hook Instrumentation方案实现 364
15.4.4 总结 367
15.5 Service插件化 368
15.5.1 插件化方面Service与Activity的不同 368
15.5.□ 代理分发实现 370
15.6 ContentProvider插件化 376
15.6.1 ContentProvider的启动过程回顾 376
15.6.□ VirtualApk的实现 377
15.7 BroadcastReceiver的插件化 385
15.7.1 广播插件化思路 386
15.7.□ VirtualApk的实现 386
15.8 资源的插件化 387
15.8.1 系统资源加载 387
15.8.□ VirtualApk实现 389
15.9 so的插件化 390
15.10 本章小结 393
□□6章 绘制优化 394
16.1 绘制性能分析 394
16.1.1 绘制原理 395
16.1.□ Profile GPU Rendering 396
16.1.3 Systrace 398
16.1.4 Traceview 404
16.□ 布局优化 407
16.□.1 布局优化工具 407
16.□.□ 布局优化方法 411
16.□.3 避免GPU过度绘制 419
16.3 本章小结 4□0
□□7章 内存优化 4□1
17.1 避免可控的内存泄漏 4□1
17.1.1 什么是内存泄漏 4□1
17.1.□ 内存泄漏的场景 4□□
17.□ Memory Monitor 4□8
17.□.1 使用Memory Monitor 4□9
17.□.□ 大内存申请与GC 430
17.□.3 内存抖动 430
17.3 Allocation Tracker 430
17.3.1 使用Allocation Tracker 431
17.3.□ alloc文件分析 431
17.4 Heap Dump 434
17.4.1 使用Heap Dump 434
17.4.□ 检测内存泄漏 436
17.5 内存分析工具MAT 438
17.5.1 生成hprof文件 438
17.5.□ MAT分析hprof文件 440
17.6 LeakCanary 448
17.6.1 使用LeakCanary 449
17.6.□ LeakCanary应用举例 449
17.7 本章小结 453
刘望舒,资深开发工程师,Android进阶二部曲《Android进阶之光》《Android进阶解密》的作者,公众号“刘望舒”的作者,CSDN人气博主。他在博客中构建了“Android相关原创知识体系”,该体系全面且深入并广获好评。他拥有近10年的开发经验和多年的技术管理经验,对Android框架层及应用层开发有着独到、深入的理解。
市面上不乏帮助新手入门和深入剖析系统源码的Android书籍,而本书则在入门与深究细节之间找到了□衡点,为广大Android工程师点亮了进阶之光。
——何红辉 《Android源码设计模式解析与实战》、《Android开发进阶:从小工到专家》作者
通过阅读本书,作者将带你从系统设计的角度窥探Android开发的进阶技巧,这是一本进阶好书。
——徐宜生 《Android群英传》作者
源码阅读非常重要,本书很好地诠释了一些我们需要熟知的技术原理,读完本书令人豁然开朗。无论是在面试中,还是在实际工作中,本书介绍的都是非常重要的技术内容。这是一本让你进阶成为资深工程师的好书。
——何俊林 《Android音□□开发》作者、爱奇艺前多媒体开发工程师
强烈建议从事系统架构、核心系统开发的朋友仔细阅读本书,它能解放你的思想,给予你无限的启发。同时也建议正在从事应用层开发工作的朋友不要错过本书,它不仅能让你对手中工具的使用知其然,还能知其所以然。
——安卓巴士技术社区
在这个竞争白热化的时代,Android开发者越来越焦虑,因为各种新语言、新框架、新源码层出不穷,甚至应届生通过使用开源框架,分分钟就能设计出界面漂亮、运行流畅的App。如果想在如此残酷的世界里保持竞争力,就需要让自己向底层挖,挖得越深,根基就越稳。我一直非常希望有一本比较新的源码解析类的书籍,可以带领开发者继续前进,而现在,这本书已经到你手上了。
——潘辰星 □□□□无线开发专家
随着Android开发的深入,Android源码、插件化、热修复等技术是一个Android应用开发者必须要涉及的,但市面上很多文章要么讲得太深,深入Native层的实现细节,根本不适合应用开发;要么讲得太浅,很多关键点一笔带过,没有和应用开发很好地结合起来。而望舒的这本书,将Android源码、插件化和热修复等技术与应用开发结合得恰到好处,不仅有基础知识的铺垫,扫清读者的阅读障碍,而且对讲解深度把控合理,不至于深到应用开发根本涉及不到的层面,同时也非常有助于加深开发者对应用开发的理解。
——周泰良 字节跳动Android开发工程师
市面上大多数源码解析的书籍都意在解析源码、加深理解,往往枯燥乏味,开发者难以领会其中精髓,本书的可贵之处是能够结合系统知识和应用知识,给予读者学以致用的信心。作为一个Framework开发者,我可以负责任地说,本书可以帮助读者深入理解源码及运用所学知识。
——杨强 小米资深开发工程师
本书符合市场需求,通过源码分析,详解主流技术,是Android开发进阶的不错选择!
——Tamic 美团高级工程师,“开发者技术前线”作者