加载中…
个人资料
行者无疆-超越
行者无疆-超越
  • 博客等级:
  • 博客积分:0
  • 博客访问:23,494
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

《深入解析Android5.0系统》目录

(2014-04-27 06:50:51)
标签:

android

it

分类: Android调试和测试

以下内容选自《深入解析Android5.0系统》,京东,当当,亚马逊上有售。


导读 1
第1章 建立系统开发环境 3
1.1 安装操作系统 3
1.1.1 安装方式的选择 3
1.1.2 下载和安装Ubuntu 4
1.1.3 使用Ubuntu遇到的问题 4
1.2 安装开发包 5
1.2.1 安装编译需要的开发包 5
1.2.2 安装JDK 5
1.3 安装一些有用的工具 6
1.3.1 安装Android SDK 6
1.3.2 安装Android Studio 6
1.3.3 安装Source Insight 7
1.3.4 安装比较工具Meld 7
1.4 下载源码 7
1.4.1 Git and Repo简介 7
1.4.2 源码版本历史 8
1.4.3 下载Android 源码 9
1.4.4 下载Kernel 源码 10
第2章 Android的Build系统 13
2.1 Android Build系统核心 13
2.1.1 编译环境的建立 14
2.1.2 Build系统的层次关系 17
2.1.3 分析main.mk文件 20
2.1.4 Build系统的编译目标介绍 23
2.1.5 分析config.mk文件 24
2.1.6 分析product_config.mk文件 28
2.2 Android的产品配置文件 30
2.2.1 分析hammerhead的配置文件 31
2.2.2 编译类型eng,user和userdebug 35
2.2.3 产品的Image文件 36
2.2.4 如何加快编译速度 38
2.3 编译Android的模块 38
2.3.1 模块编译变量简介 39
2.3.2 常用模块定义实例 41
2.3.3 预编译模块的目标定义 43
2.3.4 常用“LOCAL_” 变量 44
2.4 Android中的签名 47
2.4.1 Android应用签名方法 47
2.4.2 Android系统签名介绍 50
2.4.3 Android签名漏洞分析 50
第3章 Android的Bionic 53
3.1 Bionic简介 53
3.1.1 Bionic的特性 53
3.1.2 Bionic中的模块简介 56
3.2 Bionic C库中的系统调用 58
3.2.1 系统调用简介 58
3.2.2 系统调用的实现方法 59
3.3 Bionic中的内存管理函数 60
3.3.1 系统调用brk和mmap 60
3.3.2 dlmalloc简介 61
3.3.3 dlmalloc函数用法指南 63
3.4 管道 67
3.4.1 匿名管道PIPE和命名管道FIFO 67
3.4.2 匿名管道的使用方法 68
3.5 Bionic中的线程管理函数 68
3.5.1 Bionic线程函数的特性 69
3.5.2 创建线程和线程的属性 69
3.5.3 退出线程的方法 71
3.5.4 线程本地存储TLS 73
3.5.5 线程的互斥量(Mutex)函数 73
3.5.6 线程的条件量(Condition)函数 75
3.6 Futex同步机制 76
3.6.1 Futex的系统调用 76
3.6.2 Futex的用户态操作 78
3.6.3 Mutex类使用Futex实现同步 78
3.7 Android的 Log模块 79
3.7.1 Android Log 系统的架构 79
3.7.2 Log系统的接口和用法 81
3.7.3 Log系统的实现分析 83
3.8 可执行文件格式分析 87
3.8.1 ELF格式简介 87
3.8.2 ELF文件头格式 88
3.8.3 程序头部表 90
3.8.4 DYNAMIC段 92
3.8.5 函数的重定位过程 95
3.9 Bionic中的Linker模块 98
3.9.1 可执行程序的装载 99
3.9.2 可执行程序的初始化 100
3.9.3 Linker装载动态库 102
第4章 Android的Binder 107
4.1 Binder简介 107
4.1.1 Binder对象定义 108
4.1.2 Binder的架构 108
4.1.3 组件Service和匿名Binder服务 110
4.1.4 Binder的层次 110
4.2 如何使用Binder 111
4.2.1 使用Binder服务 111
4.2.2 Binder的混合调用 112
4.2.3 用Jave开发Binder服务 113
4.2.4 用C++开发Binder服务 114
4.3 Binder应用层的核心类 117
4.3.1 IInterface中的两个宏 117
4.3.2 Binder核心类的关系 118
4.3.3 函数asInterface的奥秘 120
4.3.4 Binder的“死亡通知” 121
4.3.5 Jave层的Binder类 123
4.4 Binder的实现原理 127
4.4.1 Binder的线程模型 128
4.4.2 Binder对象的传递 131
4.4.3 分析IPCThreadState类 135
4.5 Binder驱动 140
4.5.1 应用层和驱动的消息协议 140
4.5.2 Binder驱动的代码分析 144
4.5.3 Binder的内存共享机制 145
4.5.4 驱动的ioctl操作 147
4.5.5 Binder调用过程 149
4.5.6 处理传递的Binder对象 154
4.6 ServiceManager的作用 158
4.6.1 ServiceManager的架构 158
4.6.2 ServiceManger提供的服务 160
4.7 匿名共享内存ashmem 163
4.7.1 ashmem的作用和用法 163
4.7.2 ashmem驱动的实现原理 165
4.7.3 ashemem驱动的代码分析 166
4.7.4 进程间传递文件描述符 170
第5章 Android 的JNI 173
5.1 JNI的作用 173
5.2 JNI用法介绍 174
5.2.1 从Java到C/C++ 174
5.2.2 从C/C++到Java的调用 178
5.3 JNI环境详解 180
5.3.1 结构JNIEnv分析 181
5.3.2 JNIEnv的创建和初始化 183
5.3.3 JNI中的异常处理 184
5.3.4 JNI中的引用 184
第6章 Android的同步和消息机制 187
6.1 原子操作 187
6.1.1 Android的原子操作函数 187
6.1.2 原子操作的实现原理 188
6.1.3 内存屏障和编译屏障 189
6.2 Android native层的同步方法 191
6.2.1 互斥体Mutex和自动锁Autolock 192
6.2.2 条件类Condition 194
6.3 Android Java层的同步机制 195
6.3.1 同步关键字synchronized 195
6.3.2 Object类在同步中的作用 197
6.4 Android的消息机制 198
6.4.1 消息模型 198
6.4.2 理解Looper类 200
6.4.3 理解Handler类 202
6.4.4 Message类的setAsynchronous()方法 204
6.4.5 分析MessageQueue类 205
6.5 进程间的消息传递 210
6.5.1 理解Messenger类 211
6.5.2 AsyncChannel类的作用 211
第7章 Android的Init进程 217
7.1 Init进程的初始化过程 219
7.1.1 main函数的流程 219
7.1.2 启动Service进程 225
7.2 解析启动脚本init.rc 228
7.2.1 init.rc文件格式介绍 228
7.2.2 Init脚本的关键字定义 229
7.2.3 脚本文件的解析过程 232
7.2.4 init中启动的守护进程 237
7.3 Init进程对信号的处理 239
7.3.1 “僵尸”(Zombie)进程介绍 239
7.3.2 初始化SIGCHLD信号 240
7.3.3 响应子进程死亡事件 241
7.4 属性系统 243
7.4.1 属性系统介绍 244
7.4.2 创建属性系统的共享空间 246
7.4.3 初始化属性系统的值 247
7.4.4 用户进程初始化属性系统 248
7.4.5 响应修改属性的请求 249
7.5 ueventd介绍 251
7.5.1 ueventd的初始化 251
7.5.2 Netlink Socket简介 253
7.5.3 创建设备节点文件 254
7.6 watchdogd介绍 256
第8章 Android的Zygote进程 259
8.1 Zygote简介 259
8.2 Zygote进程的初始化 260
8.2.1 app_porcess的main函数 261
8.2.2 AndroidRuntime类 263
8.2.3 启动Dalvik虚拟机 263
8.2.4 ZygoteInit类 266
8.3 Zygote启动应用程序 266
8.3.1 注册Zygote的socket 267
8.3.2 请求启动应用 268
8.3.3 处理启动应用的请求 269
8.3.4 Fork应用进程 270
8.3.5 子进程的初始化 272
8.4 预加载系统类和资源 275
8.4.1 预加载Java类 276
8.4.2 preload-classes文件 277
8.4.3 预加载系统资源 278
第9章 Android的资源管理 281
9.1 资源系统简介 281
9.1.1 缺省资源和候选资源 281
9.1.2 常用术语和单位 282
9.1.3 资源类型 282
9.1.4 系统资源定义 283
9.2 Android资源的制作 285
9.2.1 资源的存储目录 285
9.2.2 候选资源目录的命名规则 286
9.2.3 资源匹配算法 290
9.3 Android资源的使用 291
9.3.1 常规的资源使用方法 291
9.3.2 使用公开和非公开资源 292
9.3.3 图片资源的缩放问题 293
9.4 Android资源管理的实现原理 295
9.4.1 Resources类的作用 295
9.4.2 AssetManager类的作用 299
9.4.3 理解AssetManager的设计 301
第10章 Android的SystemServer进程 309
10.1 SystemServer的创建过程 309
10.1.1 创建SystemServer进程 309
10.1.2 SystemServer初始化 311
10.1.3 SystemServer的服务大全 312
10.2 SystemServer中的WatchDog 315
10.2.1 启动Watchdog 315
10.2.2 WatchDog监控的服务和线程 316
10.2.3 WatchDog监控的原理 318
第11章 Android的应用管理 323
11.1 PackageManagerService初始化过程 324
11.1.1 理解Packages.xml和Settings类 324
11.1.2 服务的初始化过程 327
11.1.3 处理permission文件 334
11.1.4 扫描应用目录的过程 336
11.1.5 解析AndroidManifest文件 341
11.2 应用的安装过程 342
11.2.1 第一阶段:拷贝文件 343
11.2.2 第二阶段:装载应用 350
11.3 系统运行时的应用管理 354
11.3.1 卸载应用 354
11.3.2 通过Intent查询组件 357
11.3.3 监视应用目录的变化 359
11.4 守护进程installd 360
11.4.1 installd的初始化 360
11.4.2 更改installd的权限 361
11.4.3 installd中的命令 362
11.4.4 install(安装)命令 363
11.4.5 dexopt(优化)命令 365
11.4.6 movefiles(移动)命令 366
11.5 总结 367
第12章 Android的组件管理 369
12.1 应用进程的组成 369
12.1.1 ApplicationThread的作用 370
12.1.2 理解Context 371
12.1.3 Application类 372
12.2 ActivityManagerService服务 375
12.2.1 AMS的初始化 376
12.2.2 理解setSystemProcess()方法 382
12.2.3 理解systemReady()方法 383
12.3 Process管理 388
12.3.1 启动进程的过程 388
12.3.2 调整进程的位置 390
12.3.3 ProcessList的常量 393
12.3.4 调整进程的oom_adj值 395
12.4 Activity管理 398
12.4.1 Activity的生命周期 398
12.4.2 理解Intent 400
12.4.3 Task和LauncherMode 401
12.5 应用的启动过程 404
12.5.1 启动Activity 404
12.5.2 resumeTopActivitiesLocked方法 408
12.5.3 ActivityThread的main方法 411
12.5.4 AMS的attachApplication方法 412
12.5.5 应用的handleBindApplication方法 414
12.6 Service管理 416
12.6.1 Service 的生命周期 417
12.6.2 理解Service的管理类 418
12.6.3 Service的启动过程 418
12.7 ContentProvider管理 424
12.7.1 理解ContentProvider 424
12.7.2 获取ContentProvider 427
12.7.3 应用中安装ContentProvider 431
12.7.4 发布ContentProvider 433
12.8 BroadcastReceiver管理 435
12.8.1 理解BroadcastReceiver 435
12.8.2 广播的种类 437
12.8.3 广播的数据结构 437
12.8.4 广播的注册过程 438
12.8.5 广播的发送过程 441
第13章 Android的多用户模式 449
13.1 UserManagerService服务 449
13.1.1 初始化的过程 449
13.1.2 添加用户 451
13.1.3 删除用户 453
13.1.4 Guest用户 455
13.2 PackageManagerService和多用户 455
13.2.1 创建用户的应用数据 455
13.2.2 删除用户的应用数据 456
13.3 AcitivtyManagerServier和多用户 457
13.3.1 用户的状态 457
13.3.2 切换当前用户 457
13.3.3 停止用户运行 462
第14章 Android的图形显示系统 465
14.1 理解Surface 465
14.1.1 应用中Surface的创建过程 465
14.1.2 WMS中Surface的创建过程 468
14.1.3 ComposerService的作用 471
14.1.4 SurfaceFlinger中创建Surface 473
14.1.5 BufferQueue管理缓冲区 477
14.1.6 创建GraphicBuffer对象 480
14.2 图像显示原理 484
14.2.1 Project Buffer简介 484
14.2.2 VSync信号的生成 488
14.2.3 Framebuffer的工作原理 491
14.2.4 分配图像缓冲区的内存 494
14.3 SurfaceFlinger服务 498
14.3.1 SurfaceFlinger的启动过程 499
14.3.2 MessageQueue和EventThread 501
14.3.3 理解DisplayDevice类 504
14.3.4 VSync信号的分发过程 507
14.4 图像的输出过程 512
14.4.1 图像的输出过程 512
14.4.2 理解handleTransaction函数 514
14.4.3 理解handlePageFlip函数 520
14.4.4 理解rebuildLayerStacks函数 522
14.4.5 理解setUpHWComposer函数 525
14.4.6 理解doComposition函数 527
14.4.7 理解postFramebuffer函数 528
14.5 总结 529
第15章 Android的窗口系统 531
15.1 应用进程和WMS的联系 531
15.1.1 应用中的Window对象 531
15.1.2 应用中的WindowManager类 532
15.1.3 建立应用和WMS的联系 534
15.1.4 WMS中建立和应用的联系 537
15.1.5 理解DecorView 539
15.2 WindowManagerService服务 540
15.2.1 PhoneWindowManager对象 541
15.2.2 WindowToken对象 541
15.2.3 窗口类型定义 542
15.2.4 新增窗口的过程 544
15.2.5 确定窗口的Z轴位置 549
15.3 窗口尺寸管理 554
15.3.1 Overscan区域 554
15.3.2 表示窗口尺寸的数据结构 555
15.3.3 计算窗口的尺寸 557
15.4 窗口动画管理 561
15.4.1 接收Vsysnc信号 562
15.4.2 动画的显示过程 565
15.4.3 WindowStateAnimator 569
15.4.4 生成动画并显示 571
15.5 总结 572
第16章 android 的输入管理 573
16.1 InputManagerService 573
16.1.1 服务的启动过程 573
16.1.2 EventHub的作用 576
16.1.3 读取RawEvent 579
16.1.4 处理RawEvent 581
16.1.5 分发输入消息 584
16.2 应用进程处理Input消息 588
16.2.1 理解InputChannel 588
16.2.2 接收Input消息 593
16.2.3 理解InputStage 597
16.2.4 流水线处理Input消息 602
16.3 总结 607
第17章 Android的电源管理 609
17.1 PowerManagerService 609
17.1.1 PMS的初始化化过程 610
17.1.2 PMS的SystemReady方法 612
17.1.3 PMS的userActivity接口 613
17.1.4 PMS的gotoSleep接口 614
17.2 控制系统休眠的机制 615
17.2.1 PMS中WakeLock相关接口 616
17.2.2 WakeLock的native层实现 618
17.2.1 理解updatePowerStateLocked方法 620
17.2.2 管理显示设备 624
17.3 电池管理服务 627
17.3.1 BatteryService类的作用 627
17.3.2 Healthd守护进程 629
17.3.3 BatteryMonitor类 631
第18章 Android的存储系统 635
18.1 Vold守护进程 636
18.1.1 Vold的main函数 636
18.1.2 Vold的NetlinkManager对象 637
18.1.3 处理block类型的uevent 639
18.1.4 处理MountService的命令 643
18.1.5 VolumeManager的作用 646
18.2 MountService服务 650
18.2.1 MountService的启动过程 650
18.2.2 NativeDaemonConnector 652
18.2.3 Obb文件系统 654
18.3 其他存储相关的服务 658
18.3.1 DeviceStorageMonitorService 658
18.3.2 DiskStatsService 661
第19章 Android的网络管理 663
19.1 Netd守护进程 663
19.1.1 Netd的架构 664
19.1.2 处理net 类型的uevent 665
19.1.3 处理NMS的命令 666
19.1.4 DNS服务代理 667
19.1.5 MDnsSdListener的作用 669
19.2 ConnectivityService服务 670
19.2.1 初始化过程 670
19.2.2 网络连接类型 671
19.2.3 NetworkStateTracker对象的作用 674
19.3 NetworkManagementService服务 677
19.4 总结 679
第20章 Android的音频系统 681
20.1 音频系统简介 681
20.1.1 Linux的音频架构 681
20.1.2 手机中的音频设备 682
20.1.3 Audio系统的架构 683
20.2 AudioPolicyService服务 684
20.2.1 服务的创建过程 684
20.2.2 管理音频路由策略 687
20.2.3 管理输入输出设备 692
20.3 AudioFlinger服务 695
20.3.1 AudioFlinger的创建过程 695
20.3.2 AudioFlinger中的线程 697
20.3.3 MixerThread线程 699
20.3.4 OpenOutput函数 702
20.4 一次完整的播放过程 704
20.4.1 创建AudioTrack对象 704
20.4.2 在native层的AudioTrack 709
20.4.3 开始播放 715
20.4.4 传递音频数据 717
20.4.5 AudioFlinger的播放线程 723
第21章 Android的SELinux模块 727
21.1 SELinux简介 727
21.1.1 DAC和MAC 727
21.1.2 SELinux的架构 728
21.1.3 安全上下文 729
21.1.4 域的转移 731
21.1.5 常用命令 733
21.2 SEAndroid简介 733
21.2.1 SEAndroid的组成 734
21.2.2 理解各种策略文件 735
21.3 Android如何使用SELinux 739
21.3.1 Init进程设置SELinux的Policy 739
21.3.2 Init进程初始化安全上下文 742
21.3.3 设置守护进程的安全上下文 745
21.3.4 设置应用进程的安全上下文 746
21.4 总结 750
第22章 Dalvik和ART虚拟机 751
22.1 Dalvik虚拟机简介 751
22.1.1 Dalvik虚拟机的特点 751
22.1.2 即时编译JIT 752
22.2 Dalvik的启动和初始化 753
22.2.1 启动的流程分析 753
22.2.2 初始化gDvm 753
22.3 Dalvik字节码的执行过程 757
22.3.1 执行流程 757
22.3.2 代码分析 758
22.4 Dalvik的内存管理机制 760
22.4.1 堆的初始化过程 761
22.4.2 davlik内存分配机制 769
22.4.3 软引用,弱引用和虚引用 772
22.4.4 Dalvik的内存回收机制 774
22.5 ART模式简介 783
22.5.1 开启ART模式 783
22.5.2 两种模式的区别 784
22.5.3 ART的初始化 785
22.5.4 ART开始运行 788
22.6 总结 789
第23章 Android的Recovery模块 791
23.1 Recovery模块的执行 792
23.1.1 Recovery模块的启动 792
23.1.2 如何传递启动参数 795
23.1.3 执行菜单命令 798
23.2 Recovery的升级过程 800
23.2.1 sideload方式安装 800
23.2.2 升级的入口函数 801
23.3 update-binary模块 804
23.3.1 update-binary的执行流程 805
23.3.2 update-script的语法规则 807
23.4 总结 809
第24章 Android的调试方法 811
24.1 获取和分析系统Log 811
24.1.1 Logcat使用说明 811
24.1.2 如何分析Android Log 813
24.1.3 如何分析ANR 817
24.2 内存泄露的分析方法 820
24.2.1 DDMS的AllocationTracker 820
24.2.2 DDMS的DumpHeap工具 821
24.2.3 使用MAT分析内存泄露 822
24.2.4 使用Valgrind分析内存泄露 823
24.3 Android的自动化测试 825
24.3.1 Monkey 825
24.3.2 Monkeyrunner 828
24.3.3 uiAutomator工具 830

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有