Android进阶解密

Android进阶解密
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2018-10
版次: 1
ISBN: 9787121348389
定价: 99.00
装帧: 其他
开本: 16开
纸张: 胶版纸
页数: 468页
字数: 702千字
129人买过
  • 本书是一本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.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 Insight9

    1.4  本章小结12

    第2章  Android系统启动13

    2.1  init进程启动过程13

    2.1.1  引入init进程13

    2.1.2  init进程的入口函数14

    2.1.3  解析init.rc17

    2.1.4  解析Service类型语句19

    2.1.5  init启动Zygote20

    2.1.6  属性服务23

    2.1.7  init进程启动总结27

    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

    4.2.1  ContextImpl到AMS的调用过程101

    4.2.2  ActivityThread启动Service103

    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章  理解上下文Context149

    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章  理解ActivityManagerService164

    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  解析ActivityRecord177

    6.4.2  解析TaskRecord177

    6.4.3  解析ActivityStack178

    6.5  Activity栈管理181

    6.5.1  Activity任务栈模型181

    6.5.2  Launch Mode182

    6.5.3  Intent的FLAG182

    6.5.4  taskAffinity185

    6.6  本章小结186

    第7章  理解WindowManager187

    7.1  Window、WindowManager和WMS187

    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章  理解WindowManagerService207

    8.1  WMS的职责207

    8.2  WMS的创建过程209

    8.3  WMS的重要成员217

    8.4  Window的添加过程(WMS处理部分)219

    8.5  Window的删除过程225

    8.6  本章小结230

    第9章  JNI原理231

    9.1  系统源码中的JNI232

    9.2  MediaRecorder框架中的JNI233

    9.2.1  Java Framework层的MediaRecorder233

    9.2.2  JNI层的MediaRecorder234

    9.2.3  Native方法注册235

    9.3  数据类型的转换239

    9.3.1  基本数据类型的转换240

    9.3.2  引用数据类型的转换240

    9.4  方法签名242

    9.5  解析JNIEnv244

    9.5.1  jfieldID和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.1  Java虚拟机家族253

    10.1.2  Java虚拟机执行流程253

    10.2  Java虚拟机结构254

    10.2.1  Class文件格式255

    10.2.2  类的生命周期256

    10.2.3  类加载子系统257

    10.2.4  运行时数据区域258

    10.3  对象的创建260

    10.4  对象的堆内存布局262

    10.5  oop-klass模型263

    10.6  垃圾标记算法266

    10.6.1  Java中的引用266

    10.6.2  引用计数算法267

    10.6.3  根搜索算法269

    10.7  Java对象在虚拟机中的生命周期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.1  Dalvik虚拟机276

    11.1.1  DVM与JVM的区别276

    11.1.2  DVM架构278

    11.1.3  DVM的运行时堆280

    11.1.4  DVM的GC日志280

    11.2  ART虚拟机281

    11.2.1  ART与DVM的区别281

    11.2.2  ART的运行时堆282

    11.2.3  ART的GC日志283

    11.3  DVM和ART的诞生285

    11.4  本章小结288

    第12章  理解ClassLoader289

    12.1  Java中的ClassLoader289

    12.1.1  ClassLoader的类型289

    12.1.2  ClassLoader的继承关系291

    12.1.3  双亲委托模式292

    12.1.4  自定义ClassLoader295

    12.2  Android中的ClassLoader298

    12.2.1  ClassLoader的类型298

    12.2.2  ClassLoader的继承关系300

    12.2.3  ClassLoader的加载过程302

    12.2.4  BootClassLoader的创建306

    12.2.5  PathClassLoader的创建309

    12.3  本章小结311

    第13章  热修复原理312

    13.1  热修复的产生312

    13.2  热修复框架的种类和对比313

    13.3  资源修复314

    13.3.1  Instant Run概述314

    13.3.2  Instant Run的资源修复315

    13.4  代码修复318

    13.4.1  类加载方案319

    13.4.2  底层替换方案321

    13.4.3  Instant Run方案322

    13.5  动态链接库的修复323

    13.5.1  System的load和loadLibarary方法323

    13.5.2  nativeLoad方法分析327

    13.6  本章小结333

    第14章  Hook技术334

    14.1  Hook技术概述334

    14.2  Hook技术分类336

    14.3  代理模式336

    14.3.1  代理模式简单实现337

    14.3.2  动态代理的简单实现338

    14.4  Hook startActivity方法339

    14.4.1  Hook Activity的startActivity方法340

    14.4.2  Hook Context的startActivity方法343

    14.4.3  Hook 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.4  Activity插件化352

    15.4.1  Activity的启动过程回顾352

    15.4.2  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.2  代理分发实现370

    15.6  ContentProvider插件化376

    15.6.1  ContentProvider的启动过程回顾376

    15.6.2  VirtualApk的实现377

    15.7  BroadcastReceiver的插件化385

    15.7.1  广播插件化思路386

    15.7.2  VirtualApk的实现386

    15.8  资源的插件化387

    15.8.1  系统资源加载387

    15.8.2  VirtualApk实现389

    15.9  so的插件化390

    15.10  本章小结393

    第16章  绘制优化394

    16.1  绘制性能分析394

    16.1.1  绘制原理395

    16.1.2  Profile GPU Rendering396

    16.1.3  Systrace398

    16.1.4  Traceview404

    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.2  Memory Monitor428

    17.2.1  使用Memory Monitor429

    17.2.2  大内存申请与GC430

    17.2.3  内存抖动430

    17.3  Allocation Tracker430

    17.3.1  使用Allocation Tracker431

    17.3.2  alloc文件分析431

    17.4  Heap Dump434

    17.4.1  使用Heap Dump434

    17.4.2  检测内存泄漏436

    17.5  内存分析工具MAT438

    17.5.1  生成hprof文件438

    17.5.2  MAT分析hprof文件440

    17.6  LeakCanary448

    17.6.1  使用LeakCanary449

    17.6.2  LeakCanary应用举例449

    17.7  本章小结453
  • 内容简介:
    本书是一本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.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 Insight9

    1.4  本章小结12

    第2章  Android系统启动13

    2.1  init进程启动过程13

    2.1.1  引入init进程13

    2.1.2  init进程的入口函数14

    2.1.3  解析init.rc17

    2.1.4  解析Service类型语句19

    2.1.5  init启动Zygote20

    2.1.6  属性服务23

    2.1.7  init进程启动总结27

    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

    4.2.1  ContextImpl到AMS的调用过程101

    4.2.2  ActivityThread启动Service103

    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章  理解上下文Context149

    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章  理解ActivityManagerService164

    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  解析ActivityRecord177

    6.4.2  解析TaskRecord177

    6.4.3  解析ActivityStack178

    6.5  Activity栈管理181

    6.5.1  Activity任务栈模型181

    6.5.2  Launch Mode182

    6.5.3  Intent的FLAG182

    6.5.4  taskAffinity185

    6.6  本章小结186

    第7章  理解WindowManager187

    7.1  Window、WindowManager和WMS187

    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章  理解WindowManagerService207

    8.1  WMS的职责207

    8.2  WMS的创建过程209

    8.3  WMS的重要成员217

    8.4  Window的添加过程(WMS处理部分)219

    8.5  Window的删除过程225

    8.6  本章小结230

    第9章  JNI原理231

    9.1  系统源码中的JNI232

    9.2  MediaRecorder框架中的JNI233

    9.2.1  Java Framework层的MediaRecorder233

    9.2.2  JNI层的MediaRecorder234

    9.2.3  Native方法注册235

    9.3  数据类型的转换239

    9.3.1  基本数据类型的转换240

    9.3.2  引用数据类型的转换240

    9.4  方法签名242

    9.5  解析JNIEnv244

    9.5.1  jfieldID和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.1  Java虚拟机家族253

    10.1.2  Java虚拟机执行流程253

    10.2  Java虚拟机结构254

    10.2.1  Class文件格式255

    10.2.2  类的生命周期256

    10.2.3  类加载子系统257

    10.2.4  运行时数据区域258

    10.3  对象的创建260

    10.4  对象的堆内存布局262

    10.5  oop-klass模型263

    10.6  垃圾标记算法266

    10.6.1  Java中的引用266

    10.6.2  引用计数算法267

    10.6.3  根搜索算法269

    10.7  Java对象在虚拟机中的生命周期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.1  Dalvik虚拟机276

    11.1.1  DVM与JVM的区别276

    11.1.2  DVM架构278

    11.1.3  DVM的运行时堆280

    11.1.4  DVM的GC日志280

    11.2  ART虚拟机281

    11.2.1  ART与DVM的区别281

    11.2.2  ART的运行时堆282

    11.2.3  ART的GC日志283

    11.3  DVM和ART的诞生285

    11.4  本章小结288

    第12章  理解ClassLoader289

    12.1  Java中的ClassLoader289

    12.1.1  ClassLoader的类型289

    12.1.2  ClassLoader的继承关系291

    12.1.3  双亲委托模式292

    12.1.4  自定义ClassLoader295

    12.2  Android中的ClassLoader298

    12.2.1  ClassLoader的类型298

    12.2.2  ClassLoader的继承关系300

    12.2.3  ClassLoader的加载过程302

    12.2.4  BootClassLoader的创建306

    12.2.5  PathClassLoader的创建309

    12.3  本章小结311

    第13章  热修复原理312

    13.1  热修复的产生312

    13.2  热修复框架的种类和对比313

    13.3  资源修复314

    13.3.1  Instant Run概述314

    13.3.2  Instant Run的资源修复315

    13.4  代码修复318

    13.4.1  类加载方案319

    13.4.2  底层替换方案321

    13.4.3  Instant Run方案322

    13.5  动态链接库的修复323

    13.5.1  System的load和loadLibarary方法323

    13.5.2  nativeLoad方法分析327

    13.6  本章小结333

    第14章  Hook技术334

    14.1  Hook技术概述334

    14.2  Hook技术分类336

    14.3  代理模式336

    14.3.1  代理模式简单实现337

    14.3.2  动态代理的简单实现338

    14.4  Hook startActivity方法339

    14.4.1  Hook Activity的startActivity方法340

    14.4.2  Hook Context的startActivity方法343

    14.4.3  Hook 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.4  Activity插件化352

    15.4.1  Activity的启动过程回顾352

    15.4.2  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.2  代理分发实现370

    15.6  ContentProvider插件化376

    15.6.1  ContentProvider的启动过程回顾376

    15.6.2  VirtualApk的实现377

    15.7  BroadcastReceiver的插件化385

    15.7.1  广播插件化思路386

    15.7.2  VirtualApk的实现386

    15.8  资源的插件化387

    15.8.1  系统资源加载387

    15.8.2  VirtualApk实现389

    15.9  so的插件化390

    15.10  本章小结393

    第16章  绘制优化394

    16.1  绘制性能分析394

    16.1.1  绘制原理395

    16.1.2  Profile GPU Rendering396

    16.1.3  Systrace398

    16.1.4  Traceview404

    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.2  Memory Monitor428

    17.2.1  使用Memory Monitor429

    17.2.2  大内存申请与GC430

    17.2.3  内存抖动430

    17.3  Allocation Tracker430

    17.3.1  使用Allocation Tracker431

    17.3.2  alloc文件分析431

    17.4  Heap Dump434

    17.4.1  使用Heap Dump434

    17.4.2  检测内存泄漏436

    17.5  内存分析工具MAT438

    17.5.1  生成hprof文件438

    17.5.2  MAT分析hprof文件440

    17.6  LeakCanary448

    17.6.1  使用LeakCanary449

    17.6.2  LeakCanary应用举例449

    17.7  本章小结453
查看详情
您可能感兴趣 / 更多
Android进阶解密
Android进阶之光(第2版)
刘望舒
Android进阶解密
Android进阶指北
刘望舒
Android进阶解密
Android进阶之光
刘望舒 著