新書推薦:
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:HK$
193.2
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:HK$
135.7
《
《日本文学史序说》讲演录
》
售價:HK$
74.8
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:HK$
102.4
《
治盗之道:清代盗律的古今之辨
》
售價:HK$
125.4
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:HK$
210.6
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:HK$
300.2
《
欲望与家庭小说
》
售價:HK$
101.2
|
編輯推薦: |
1 一线专家和工程师何红辉、徐宜生 、何俊林、安卓巴士技术社区、潘辰星、周泰良、杨强、Tamic联袂力荐
2 《Android进阶解密》基于Android 8.0,将系统源码和应用开发结合讲解,帮助读者融会贯通,破解Android应用开发进阶秘密。
3 《Android进阶之光》介绍了 Android应用开发所需的系统源码知识,还介绍了JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,以及热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。
|
內容簡介: |
本书是一本Android进阶书籍,主要针对Android 8.0系统源码并结合应用开发相关知识进行介绍。本书共分为17章,从3个方面来组织内容。*方面介绍Android应用开发所需要掌握的系统源码知识,第二方面介绍JNI、ClassLoader、Java虚拟机、DVM&ART虚拟机和Hook等技术,第三方面介绍热修复原理、插件化原理、绘制优化和内存优化等与应用开发相关的知识点。3个方面有所关联并形成一个知识体系,从而使Android开发者能通过阅读本书达到融会贯通的目的。本书适合有一定基础的Android应用开发工程师、Android系统开发工程师和对Android系统源码感兴趣的读者阅读。
|
關於作者: |
刘望舒,资深开发工程师,Android进阶二部曲《Android进阶之光》《Android进阶解密》的作者,公众号刘望舒的作者,CSDN人气博主。他在博客中构建了Android相关原创知识体系,该体系全面且深入并广获好评。他拥有近10年的开发经验和多年的技术管理经验,对Android框架层及应用层开发有着独到、深入的理解。
|
目錄:
|
第1章Android系统架构1
1.1Android系统架构1
1.2Android系统源码目录4
1.2.1整体结构4
1.2.2应用层部分5
1.2.3应用框架层部分6
1.2.4CC程序库部分6
1.3源码阅读7
1.3.1在线阅读7
1.3.2使用Source Insight9
1.4本章小结12
第2章Android系统启动13
2.1init进程启动过程13
2.1.1引入init进程13
2.1.2init进程的入口函数14
2.1.3解析init.rc17
2.1.4解析Service类型语句19
2.1.5init启动Zygote20
2.1.6属性服务23
2.1.7init进程启动总结27
2.2Zygote进程启动过程27
2.2.1Zygote概述28
2.2.2Zygote启动脚本28
2.2.3Zygote进程启动过程介绍30
2.2.4Zygote进程启动总结38
2.3SystemServer处理过程39
2.3.1Zygote处理SystemServer进程39
2.3.2解析SystemServer进程44
2.3.3SystemServer进程总结48
2.4Launcher启动过程48
2.4.1Launcher概述48
2.4.2Launcher启动过程介绍49
2.4.3Launcher中应用图标显示过程54
2.5Android系统启动流程59
2.6本章小结60
第3章应用程序进程启动过程61
3.1应用程序进程简介61
3.2应用程序进程启动过程介绍62
3.2.1AMS发送启动应用程序进程请求62
3.2.2Zygote接收请求并创建应用程序进程68
3.3Binder线程池启动过程75
3.4消息循环创建过程78
3.5本章小结80
第4章四大组件的工作过程81
4.1根Activity的启动过程82
4.1.1Launcher请求AMS过程82
4.1.2AMS到ApplicationThread的调用过程85
4.1.3ActivityThread启动Activity的过程94
4.1.4根Activity启动过程中涉及的进程99
4.2Service的启动过程101
4.2.1ContextImpl到AMS的调用过程101
4.2.2ActivityThread启动Service103
4.3Service的绑定过程110
4.3.1ContextImpl到AMS的调用过程111
4.3.2Service的绑定过程112
4.4广播的注册、发送和接收过程122
4.4.1广播的注册过程122
4.4.2广播的发送和接收过程127
4.5Content Provider的启动过程137
4.5.1query方法到AMS的调用过程137
4.5.2AMS启动Content Provider的过程143
4.6本章小结148
第5章理解上下文Context149
5.1Context的关联类149
5.2Application Context的创建过程151
5.3Application Context的获取过程156
5.4Activity的Context创建过程156
5.5Service的Context创建过程161
5.6本章小结163
第6章理解ActivityManagerService164
6.1AMS家族164
6.1.1Android 7.0的AMS家族164
6.1.2Android 8.0的AMS家族170
6.2AMS的启动过程171
6.3AMS与应用程序进程174
6.4AMS重要的数据结构176
6.4.1解析ActivityRecord177
6.4.2解析TaskRecord177
6.4.3解析ActivityStack178
6.5Activity栈管理181
6.5.1Activity任务栈模型181
6.5.2Launch Mode182
6.5.3Intent的FLAG182
6.5.4taskAffinity185
6.6本章小结186
第7章理解WindowManager187
7.1Window、WindowManager和WMS187
7.2WindowManager的关联类188
7.3Window的属性193
7.3.1Window的类型和显示次序193
7.3.2Window的标志195
7.3.3软键盘相关模式196
7.4Window的操作196
7.4.1系统窗口的添加过程197
7.4.2Activity的添加过程202
7.4.3Window的更新过程203
7.5本章小结206
第8章理解WindowManagerService207
8.1WMS的职责207
8.2WMS的创建过程209
8.3WMS的重要成员217
8.4Window的添加过程(WMS处理部分)219
8.5Window的删除过程225
8.6本章小结230
第9章JNI原理231
9.1系统源码中的JNI232
9.2MediaRecorder框架中的JNI233
9.2.1Java Framework层的MediaRecorder233
9.2.2JNI层的MediaRecorder234
9.2.3Native方法注册235
9.3数据类型的转换239
9.3.1基本数据类型的转换240
9.3.2引用数据类型的转换240
9.4方法签名242
9.5解析JNIEnv244
9.5.1jfieldID和jmethodID245
9.5.2使用jfieldID和jmethodID247
9.6引用类型249
9.6.1本地引用249
9.6.2全局引用249
9.6.3弱全局引用250
9.7本章小结251
第10章Java虚拟机252
10.1概述252
10.1.1Java虚拟机家族253
10.1.2Java虚拟机执行流程253
10.2Java虚拟机结构254
10.2.1Class文件格式255
10.2.2类的生命周期256
10.2.3类加载子系统257
10.2.4运行时数据区域258
10.3对象的创建260
10.4对象的堆内存布局262
10.5oop-klass模型263
10.6垃圾标记算法266
10.6.1Java中的引用266
10.6.2引用计数算法267
10.6.3根搜索算法269
10.7Java对象在虚拟机中的生命周期270
10.8垃圾收集算法271
10.8.1标记清除算法271
10.8.2复制算法272
10.8.3标记压缩算法273
10.8.4分代收集算法274
10.9本章小结275
第11章Dalvik和ART276
11.1Dalvik虚拟机276
11.1.1DVM与JVM的区别276
11.1.2DVM架构278
11.1.3DVM的运行时堆280
11.1.4DVM的GC日志280
11.2ART虚拟机281
11.2.1ART与DVM的区别281
11.2.2ART的运行时堆282
11.2.3ART的GC日志283
11.3DVM和ART的诞生285
11.4本章小结288
第12章理解ClassLoader289
12.1Java中的ClassLoader289
12.1.1ClassLoader的类型289
12.1.2ClassLoader的继承关系291
12.1.3双亲委托模式292
12.1.4自定义ClassLoader295
12.2Android中的ClassLoader298
12.2.1ClassLoader的类型298
12.2.2ClassLoader的继承关系300
12.2.3ClassLoader的加载过程302
12.2.4BootClassLoader的创建306
12.2.5PathClassLoader的创建309
12.3本章小结311
第13章热修复原理312
13.1热修复的产生312
13.2热修复框架的种类和对比313
13.3资源修复314
13.3.1Instant Run概述314
13.3.2Instant Run的资源修复315
13.4代码修复318
13.4.1类加载方案319
13.4.2底层替换方案321
13.4.3Instant Run方案322
13.5动态链接库的修复323
13.5.1System的load和loadLibarary方法323
13.5.2nativeLoad方法分析327
13.6本章小结333
第14章Hook技术334
14.1Hook技术概述334
14.2Hook技术分类336
14.3代理模式336
14.3.1代理模式简单实现337
14.3.2动态代理的简单实现338
14.4Hook startActivity方法339
14.4.1Hook Activity的startActivity方法340
14.4.2Hook Context的startActivity方法343
14.4.3Hook startActivity总结344
14.5本章小结345
第15章插件化原理346
15.1动态加载技术346
15.2插件化的产生347
15.2.1应用开发的痛点和瓶颈347
15.2.2插件化思想348
15.2.3插件化定义350
15.3插件化框架对比351
15.4Activity插件化352
15.4.1Activity的启动过程回顾352
15.4.2Hook IActivityManager方案实现354
15.4.3Hook Instrumentation方案实现364
15.4.4总结367
15.5Service插件化368
15.5.1插件化方面Service与Activity的不同368
15.5.2代理分发实现370
15.6ContentProvider插件化376
15.6.1ContentProvider的启动过程回顾376
15.6.2VirtualApk的实现377
15.7BroadcastReceiver的插件化385
15.7.1广播插件化思路386
15.7.2VirtualApk的实现386
15.8资源的插件化387
15.8.1系统资源加载387
15.8.2VirtualApk实现389
15.9so的插件化390
15.10本章小结393
第16章绘制优化394
16.1绘制性能分析394
16.1.1绘制原理395
16.1.2Profile GPU Rendering396
16.1.3Systrace398
16.1.4Traceview404
16.2布局优化407
16.2.1布局优化工具407
16.2.2布局优化方法411
16.2.3避免GPU过度绘制419
16.3本章小结420
第17章内存优化421
17.1避免可控的内存泄漏421
17.1.1什么是内存泄漏421
17.1.2内存泄漏的场景422
17.2Memory Monitor428
17.2.1使用Memory Monitor429
17.2.2大内存申请与GC430
17.2.3内存抖动430
17.3Allocation Tracker430
17.3.1使用Allocation Tracker431
17.3.2alloc文件分析431
17.4Heap Dump434
17.4.1使用Heap Dump434
17.4.2检测内存泄漏436
17.5内存分析工具MAT438
17.5.1生成hprof文件438
17.5.2MAT分析hprof文件440
17.6LeakCanary448
17.6.1使用LeakCanary449
17.6.2LeakCanary应用举例449
17.7本章小结453
|
內容試閱:
|
为什么写这本书
Android进阶二部曲包括《Android进阶之光》和本书,因此写这本书的原因和《Android进阶之光》有些关联,主要有以下几点:
(1)《Android进阶之光》适合初、中级工程师阅读,因此我需要写一本适合中、高级工程师阅读的进阶书。
(2)目前市场上的系统源码分析的书大部分不是专门为应用开发编写的,因此我要专门为Android应用开发编写一本系统源码分析的书,不仅如此,我还要将系统源码和应用开发相结合。
(3)目前Android应用综合类进阶书籍很少,在2017年出版的只有《Android进阶之光》,在2018年我仍要贡献出自己的力量。
(4)目前市面上的源码分析类书籍大部分是基于Android 6.0以前版本的,需要有一本书籍来对更新版本的系统源码进行分析。
(5)《Android进阶之光》覆盖的知识点还远远不够,我希望能覆盖更多的知识点,让更多的人受益。
本书内容
本书共分为17章,各章内容如下:
? 第1章介绍Android系统架构、系统源码目录和如何阅读源码,带领大家走进Android系统源码的世界。
? 第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应用开发者所编写的源码分析类书籍,并且将系统源码和应用开发相结合。
? 本书是目前市面上少有的讲解插件化和热修复原理的书。
? 本书为了更好地讲解知识点,会先介绍一些知识点做铺垫,比如要学习插件化原理,就需要先学习四大组件工作过程、AMS、ClassLoader和Hook技术等相关知识点。
读者对象
本书适合以下读者阅读:
? 有一定基础的Android应用开发工程师。
? Android系统开发工程师。
? 对Android系统源码感兴趣的读者。
致谢
感谢本书的策划编辑付睿,她在CSDN博客中发现了我,并积极推动本书的出版进度,才使得本书能够及时出版。感谢我的父母以及所有关注我的朋友们,你们的鼓励和认可为我写书以及写博客带来了源源不断的动力。
勘误与互动
本人虽已竭尽全力,但书中难免会有错误,欢迎大家向我反馈,我也会在独立博客和CSDN博客中定期发布本书的勘误信息。
刘望舒
2018年6月于北京
|
|