[套装书]Android开发与应用+深入理解Android:Java虚拟机ART(2册)

作者
马玉春邓凡平
丛书名
高等学校计算机专业规划教材
出版社
机械工业出版社
ISBN
9781910141461
简要
简介
这是一部从源代码角度分析和讲解Android虚拟机ART的鸿篇巨著,核心内容和价值体现在3个方面: 第一,细致、深入地分析了ART虚拟机的架构、设计与实现原理,能让读者对ART虚拟机有透彻了解; 第二,能让Andriod系统工程师和应用工程师从底层了解整个Android系统的运行机理,从而写出更高质量的应用; 第三,Java虚拟机是一个“庞然大物”,学习和理解的门槛较高,ART是迄今应用最为广泛的JVM实现,本书为读者学习JVM提供了独特的视角和更为容易的路径。 全书共14章: 第1章介绍了在学习ART虚拟机前需要准备的工具和环境,以及本书的内容结构和阅读注意事项,建议仔细读和反复读; 第2~4章详细讲解了Class文件、dex文件和ELF文件的格式和内容,理解Class文件是学习JVM的第一步,dex和ELF者是学习Dalvik虚拟机和ART虚拟机的的前提和基础; . 第5章详细讲解了ART虚拟机的实现语言C++11,是阅读ART源代码必备的知识; 第6~8章详细讲解了ART虚拟机中与编译和Runtime相关的大量知识,这是虚拟机的核心和难点; 第9章详细讲解了dex字节码转机器码的核心进程dex2oat以及.oat和.art的文件格式; 第10~11章详细讲解了虚拟机的解释执行、JIT部分以及异常的投递和处理的过程,以及JNI在ART虚拟机中的实现。 第12~14章详细讲解了虚拟机中Java线程的执行、内存分配和释放、垃圾回收的原理与实现。 本书是经典丛书“深入理解Android”系列的第8本,继承了该系列图书严谨、细致、深入、编排考究的优点,相信所有Android工程师和Java工程师都能从中受益。
目录



---------------------------Android开发与应用---------------------------


前言
第1章 开发环境搭建与应用入门1
1.1 搭建开发环境1
1.2 创建虚拟设备2
1.3 第一个应用程序3
1.4 工作空间与相关文件4
1.5 程序的调试方法8
1.6 本章小结10
第一部分 编程基础与技巧
第2章 常用开发组件12
2.1 常见属性12
2.2 EditText组件与菜单13
2.3 Button组件17
2.4 ToggleButton组件20
2.5 CheckBox组件22
2.6 RadioButton组件24
2.7 Spinner组件26
2.8 ListView组件29
2.9 Switch组件33
2.10 DatePicker组件36
2.11 AlertDialog组件37
2.12 本章小结45
第3章 常用技术46
3.1 进一步了解Activity46
3.2 绘图47
3.3 用静态库函数设置手机情景模式和音量51
3.4 播放音频55
3.5 利用消息机制处理后退键56
3.6 利用多线程和消息机制获取IP地址59
3.7 定时功能的实现62
3.8 SQLite与自定义ListView64
3.9 查询联系人74
3.10 使用SharedPreferences对象存储数据80
3.11 内部文本文件存取85
3.12 百度地图86
3.13 本章小结91
第4章 Intent的综合应用92
4.1 Intent的基础知识92
4.2 在Activity之间传递数据94
4.3 状态栏通知98
4.4 广播接收器与开机自动启动99
4.5 显示来电和接收短信101
4.6 带回执的短信发送105
4.7 服务的基础知识108
4.8 启动服务的实现110
4.9 绑定服务的实现115
4.10 本章小结117
第二部分 实用案例分析
第5章 课堂随机点名软件120
5.1 主要功能和技术特点120
5.2 软件操作120
5.3 界面布局与资源说明121
5.3.1 字符串定义文件121
5.3.2 菜单项定义文件121
5.3.3 颜色定义文件122
5.3.4 自定义对话框布局文件122
5.3.5 ListView列表布局文件123
5.3.6 版权窗体布局文件124
5.3.7 主窗体布局文件124
5.4 配置文件126
5.5 主窗体源代码127
5.6 本章小结135
第6章 简易英语学习软件136
6.1 主要功能和技术特点136
6.2 软件操作136
6.3 界面布局与资源说明137
6.3.1 适应多屏幕的dimens文件137
6.3.2 菜单项定义文件138
6.3.3 主窗体布局文件138
6.3.4 主题设置文件140
6.4 配置文件141
6.5 与文件处理类源代码141
6.6 文本读取类源代码142
6.7 主窗体源代码144
6.8 本章小结151
第7章 通讯录备份与恢复软件152
7.1 主要功能和技术特点152
7.2 软件操作152
7.3 界面布局153
7.4 配置文件153
7.5 通讯录操作源代码154
7.6 外部文本写入源代码156
7.7 主窗体源代码156
7.8 本章小结161
第8章 服务账号登记软件162
8.1 主要功能和技术特点162
8.2 软件操作163
8.3 配置文件164
8.4 登录窗体165
8.4.1 布局文件165
8.4.2 源代码167
8.5 服务浏览窗体172
8.5.1 适配器布局文件172
8.5.2 窗体布局文件173
8.5.3 适配器源代码174
8.5.4 窗体源代码177
8.6 单位浏览窗体185
8.6.1 适配器布局文件185
8.6.2 窗体布局文件186
8.6.3 拖放阴影源代码187
8.6.4 适配器源代码188
8.6.5 窗体源代码190
8.7 单位详细信息窗体199
8.7.1 适配器布局文件199
8.7.2 窗体布局文件200
8.7.3 适配器源代码201
8.7.4 窗体源代码202
8.8 单位搜索窗体207
8.8.1 布局文件207
8.8.2 源代码208
8.9 本章小结211
第9章 地址定位及辅助服务软件212
9.1 主要功能和技术特点212
9.2 软件操作212
9.3 配置文件213
9.4 广播接收器源代码215
9.4.1 启动完成215
9.4.2 来电处理216
9.4.3 情景模式改变217
9.4.4 屏幕状态变化217
9.4.5 短信接收218
9.4.6 WiFi设置变化221
9.5 服务源代码222
9.6 适配器源代码223
9.7 窗体源代码226
9.8 本章小结229
第10章 地址查询与地图打点软件230
10.1 主要功能和技术特点230
10.2 软件操作230
10.3 配置文件231
10.4 短信接收与处理源代码232
10.5 窗体源代码233
10.6 本章小结234
第三部分 基于互联网的远程温度监测案例
第11章 数据编码与处理技术236
11.1 十六进制字符串的预处理236
11.2 字节与两个十六进制字符相互转换237
11.3 字与十六进制字符串相互转换238
11.4 字节数组与十六进制字符串相互转换238
11.5 字节数组与ByteBuffer对象相互转换239
11.6 英文字符串的多种编码方法239
11.7 适用于汉字的Unicode编码240
11.8 随机字节的生成与数字至字节数组的转换243
11.9 字节的位操作技术243
11.10 本章小结244
第12章 数据包的校验技术245
12.1 枚举类型的定义与说明245
12.2 累加和校验码的生成与检验246
12.3 异或校验码的生成与检验247
12.4 循环冗余校验码的生成与检验249
12.5 累加求补校验码的生成与检验250
12.6 结尾码的处理252
12.7 数据包的综合处理254
12.8 应用实例257
12.9 本章小结257
第13章 通用TCP客户机与服务器测试软件258
13.1 主要功能和技术特点258
13.2 软件操作258
13.3 界面布局259
13.4 配置文件264
13.5 网络处理类265
13.6 通用TCP客户机与服务器类268
13.6.1 各种声明的说明268
13.6.2 构造函数269
13.6.3 获取Socket对象与多线程的启动269
13.6.4 数据接收与发送269
13.6.5 TcpClientServer源代码270
13.7 窗体源代码275
13.8 TCP服务器的关键代码286
13.9 本章小结286
第14章 I-7013D模块仿真软件287
14.1 主要功能和技术特点287
14.2 软件操作287
14.3 界面布局288
14.4 配置文件291
14.5 窗体源代码292
14.6 本章小结298
第15章 I-7013D模块监测软件299
15.1 主要功能和技术特点299
15.2 软件操作299
15.3 配置文件300
15.4 参数设置窗体301
15.4.1 界面布局302
15.4.2 源代码304
15.5 主窗体307
15.5.1 实时温度显示组件307
15.5.2 portrait布局309
15.5.3 landscape布局311
15.5.4 源代码311
15.6 对实物模块的监控320
15.7 本章小结321
参考文献322



---------------------------深入理解Android:Java虚拟机ART---------------------------


推荐序
前言
第1章 本书必读1
1.1 概述1
1.2 准备环境和工具2
1.2.1 准备源代码2
1.2.2 准备Source Insight2
1.2.3 准备模拟器和自制系统镜像5
1.2.4 小结8
1.3 本书的内容9
1.4 本书资源下载说明12
第2章 深入理解Class文件格式13
2.1 Class文件格式总览13
2.2 常量池及相关内容14
2.2.1 常量项的类型和关系14
2.2.2 信息描述规则18
2.2.3 常量池实例剖析19
2.3 field_info和method_info19
2.4 access_flags介绍21
2.5 属性介绍22
2.5.1 属性概貌22
2.5.2 Code属性23
2.5.3 LineNumberTable属性25
2.5.4 LocalVariableTable属性26
2.6 Java指令码介绍27
2.6.1 指令码和助记符27
2.6.2 如何阅读规范28
2.7 学习路线推荐30
2.8 参考资料30
第3章 深入理解Dex文件格式31
3.1 Dex文件格式总览31
3.1.1 Dex和Class文件格式的区别31
3.1.2 Dex文件格式的概貌35
3.2 认识Dex文件36
3.2.1 header_item36
3.2.2 string_id_item等37
3.2.3 class_def38
3.2.4 code_item40
3.3 Dex指令码介绍41
3.3.1 insns的组织形式41
3.3.2 指令码描述规则42
3.4 学习路线推荐44
3.5 参考资料45
第4章 深入理解ELF文件格式46
4.1 概述46
4.2 ELF文件格式介绍46
4.2.1 ELF文件头结构介绍47
4.2.2 Linking View下的ELF52
4.2.3 Execution View下的ELF61
4.2.4 实例分析:调用动态库中的函数65
4.2.5 ELF总结72
4.3 学习路线推荐73
4.4 参考资料73
第5章 认识C++1174
5.1 数据类型76
5.1.1 基本内置数据类型介绍76
5.1.2 指针、引用和void类型77
5.1.3 字符和字符串81
5.1.4 数组82
5.2 C++源码构成及编译83
5.2.1 头文件示例83
5.2.2 源文件示例85
5.2.3 编译86
5.3 Class介绍88
5.3.1 构造、赋值和析构函数89
5.3.2 类的派生和继承97
5.3.3 友元和类的前向声明103
5.3.4 explicit构造函数105
5.3.5 C++中的struct106
5.4 操作符重载106
5.4.1 操作符重载的实现方式107
5.4.2 输出和输入操作符重载108
5.4.3 ->和*操作符重载110
5.4.4 new和delete操作符重载111
5.4.5 函数调用运算符重载117
5.5 函数模板与类模板118
5.5.1 函数模板119
5.5.2 类模板122
5.6 lambda表达式125
5.7 STL介绍127
5.7.1 string类128
5.7.2 容器类129
5.7.3 算法和函数对象介绍134
5.7.4 智能指针类138
5.7.5 探讨STL的学习140
5.8 其他常用知识141
5.8.1 initializer_list141
5.8.2 带作用域的enum141
5.8.3 constexpr142
5.8.4 static_assert143
5.9 参考资料143
第6章 编译dex字节码为机器码145
6.1 编译器全貌介绍147
6.2 编译器前端介绍150
6.2.1 词法分析和lex151
6.2.2 语法分析和yacc160
6.2.3 语义分析和IR生成介绍171
6.3 优化器介绍175
6.3.1 构造CFG176
6.3.2 分析和处理CFG181
6.3.3 数据流分析与SSA191
6.3.4 IR优化204
6.4 ART中的IR—HInstruction222
6.4.1 ART中的IR222
6.4.2 IR之间的关系225
6.4.3 ART IR对象的初始化231
6.5 寄存器分配233
6.5.1 LSRA介绍235
6.5.2 LSRA相关代码介绍247
6.6 机器码生成相关代码介绍271
6.6.1 GenerateFrameEntry272
6.6.2 VisitAdd和VisitInstance-FieldGet273
6.6.3 GenerateSlowPaths275
6.7 总结277
6.8 参考资料280
第7章 虚拟机的创建283
7.1 概述284
7.1.1 JniInvocation Init函数介绍286
7.1.2 AndroidRuntime startVm函数介绍287
7.2 Runtime Create介绍288
7.2.1 Create函数介绍288
7.2.2 Init函数介绍290
7.3 MemMap与OatFileManager293
7.3.1 MemMap介绍293
7.3.2 OatFileManager介绍298
7.4 FaultManager介绍302
7.4.1 信号处理和SignalAction介绍302
7.4.2 FaultManager介绍307
7.5 Thread介绍311
7.5.1 Startup函数介绍311
7.5.2 Attach函数介绍312
7.6 Heap学习之一325
7.6.1 初识Heap中的关键类326
7.6.2 Heap构造函数第一部分337
7.7 JavaVMExt和JNIEnvExt340
7.7.1 JavaVMExt341
7.7.2 JNIEnvExt343
7.7.3 总结344
7.8 ClassLinker345
7.8.1 关键类介绍345
7.8.2 ClassLinker构造函数352
7.8.3 InitFromBootImage353
7.8.4 ClassLinker总结360
7.9 总结和阅读指导362
第8章 虚拟机的启动363
8.1 Runtime Start364
8.2 初识JNI365
8.2.1 JNI中的数据类型365
8.2.2 ScopedObjectAccess等辅助类367
8.2.3 常用JNI函数介绍369
8.3 Jit LoadCompilerLibrary373
8.4 Runtime InitNativeMethods374
8.4.1 JniConstants Init374
8.4.2 RegisterRuntimeNative Methods375
8.4.3 WellKnownClasses Init和LastInit376
8.5 Thread相关376
8.5.1 Runtime InitThreadGroups377
8.5.2 Thread FinishSetup377
8.5.3 Runtime StartDaemonThreads380
8.6 Runtime CreateSystemClassLoader381
8.7 类的加载、链接和初始化383
8.7.1 关键类介绍383
8.7.2 SetupClass392
8.7.3 LoadClass相关函数393
8.7.4 LinkClass相关函数398
8.7.5 DefineClass414
8.7.6 Verify相关函数416
8.7.7 Initialize相关函数424
8.7.8 ClassLinker中其他常用函数426
8.7.9 ClassLoader介绍437
8.8 虚拟机创建和启动关键内容梳理445
第9章 深入理解dex2oat447
9.1 概述448
9.2 ParseArgs介绍452
9.2.1 CompilerOptions类介绍453
9.2.2 ProcessOptions函数介绍454
9.2.3 InsertCompileOptions函数介绍455
9.3 OpenFile介绍456
9.4 Setup介绍458
9.4.1 Setup代码分析之一458
9.4.2 Setup代码分析之二464
9.4.3 Setup代码分析之三474
9.4.4 Setup代码分析之四484
9.5 CompileImage484
9.5.1 Compile485
9.5.2 ArtCompileDEX496
9.5.3 OptimizingCompiler JniCompile499
9.5.4 OptimizingCompiler Compile527
9.6 OAT和ART文件格式介绍544
9.6.1 OAT文件格式544
9.6.2 ART文件格式550
9.6.3 oatdump介绍554
9.7 总结561
第10章 解释执行和JIT562
10.1 基础知识564
10.1.1 LinkCode564
10.1.2 Runtime ArtMethod566
10.1.3 栈和参数传递572
10.2 解释执行580
10.2.1 art_quick_to_interpreter_bridge580
10.2.2 artQuickToInterpreter-Bridge582
10.2.3 EnterInterpreterFromEntry-Point584
10.2.4 调用栈的管理和遍历593
10.3 ART中的JIT599
10.3.1 Jit、JitCodeCache等600
10.3.2 JIT阈值控制与处理609
10.3.3 OSR的处理612
10.4 HDeoptimize的处理615
10.4.1 VisitDeoptimize相关616
10.4.2 QuickExceptionHandler相关618
10.4.3 解释执行中关于Deoptimize的处理621
10.5 Instrumentation介绍623
10.5.1 MethodEnterEvent和MethodExitEvent624
10.5.2 DexPcMovedEvent625
10.6 异常投递和处理625
10.6.1 抛异常626
10.6.2 异常处理629
10.7 总结635
第11章 ART中的JNI636
11.1 JavaVM和JNIEnv637
11.1.1 JavaVMExt相关介绍638
11.1.2 JNIEnvExt介绍642
11.2 Java native方法的调用644
11.2.1 art_jni_dlsym_lookup_stub644
11.2.2 art_quick_generic_jni_trampoline646
11.3 CallStaticVoidMethod651
11.4 JNI中引用型对象的管理653
11.4.1 关键类介绍653
11.4.2 JniMethodStart和JniMethod-End657
11.4.3 IndirectReferenceTable相关函数658
11.4.4 NewObject和jobject的含义660
11.4.5 JNI中引用对象相关662
11.4.6 PushLocalFrame和PopLocalFrame663
11.4.7 回收引用对象664
11.5 总结666
第12章 CheckPoints、线程同步及信号处理668
12.1 CheckPoints介绍669
12.1.1 设置Check Point标志位670
12.1.2 Check Points的设置672
12.1.3 执行检查点处的任务676
12.2 ThreadList和ThreadState681
12.2.1 线程ID683
12.2.2 RunCheckpoint和Dump684
12.2.3 SuspendAll和ResumeAll687
12.2.4 Thread状态切换690
12.3 线程同步相关知识691
12.3.1 关键类介绍692
12.3.2 synchronized的处理697
12.3.3 Object wait、notifyAll等705
12.4 volatile成员的读写707
12.4.1 基础知识707
12.4.2 解释执行模式下的处理711
12.4.3 机器码执行模式的处理712
12.5 信号处理714
12.5.1 zygote进程的处理714
12.5.2 非zygote进程的处理716
12.6 总结719
第13章 内存分配与释放720
13.1 Space等关键类介绍722
13.2 ZygoteSpace723
13.3 BumpPointerSpace和RegionSpace725
13.3.1 BumpPointerSpace726
13.3.2 RegionSpace733
13.4 DlMallocSpace和RosAlloc-Space740
13.4.1 DlMallocSpace741
13.4.2 RosAllocSpace745
13.4.3 rosalloc介绍748
13.5 LargeObjectMapSpace760
13.6 new-instance/array指令的处理762
13.6.1 设置内存分配器762
13.6.2 解释执行模式下的处理767
13.6.3 机器码执行模式下的处理770
13.6.4 Heap AllocObjectWith-Allocator773
13.7 细观Space779
13.7.1 Space类779
13.7.2 ContinuousSpace和Discon-tinuousSpace类781
13.7.3 MemMapSpace和Continuous MemMapAllocSpace类782
13.7.4 MallocSpace类783
13.8 Heap学习之二784
13.8.1 Heap构造函数784
13.8.2 关键类介绍792
13.8.3 ObjectVisitReferences806
13.9 总结812
第14章 ART中的GC813
14.1 GC基础知识814
14.1.1 Mark-Sweep Collection原理介绍815
14.1.2 Copying Collection原理介绍817
14.1.3 Mark-Compact Collection原理介绍818
14.1.4 其他概念819
14.2 Runtime VisitRoots819
14.2.1 关键数据结构821
14.2.2 Thread VisitRoots824
14.3 ART GC概览827
14.3.1 关键数据结构827
14.3.2 ART GC选项830
14.3.3 创建回收器和设置回收策略832
14.4 MarkSweep835
14.4.1 Heap相关成员变量取值情况835
14.4.2 MarkSweep概貌837
14.4.3 MarkingPhase840
14.4.4 PausePhase848
14.4.5 ReclaimPhase851
14.4.6 FinishPhase857
14.4.7 PartialMarkSweep857
14.4.8 StickyMarkSweep858
14.4.9 Concurrent MarkSweep864
14.4.10 Parallel GC868
14.4.11 MarkSweep小结869
14.5 ConcurrentCopying870
14.5.1 InitalizePhase871
14.5.2 FlipThreadRoots873
14.5.3 MarkingPhase881
14.5.4 ReclaimPhase883
14.5.5ConcurrentCopying小结885
14.6 MarkCompact885
14.6.1 MarkingPhase886
14.6.2 ReclaimPhase889
14.6.3 MarkCompact小结891
14.7 SemiSpace892
14.7.1 InitializePhase893
14.7.2 MarkingPhase894
14.7.3 SemiSpace小结898
14.8 Java Reference对象的处理899
14.8.1 基础知识899
14.8.2 MarkSweep中Reference对象的处理903
14.8.3ReferenceProcessor904
14.8.4 PhantomReference的处理912
14.8.5 finalize函数的调用913
14.8.6 Reference处理小结917
14.9 Heap学习之三917
14.9.1 Heap Trim917
14.9.2 CollectGarbageInternal919
14.9.3 PreZygoteFork924
14.9.4 内存碎片的解决926
14.10 总结927
14.11 参考资料928




有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4