第1篇Android核心框架层开发 2
第1章Android系统框架 2
1.1 Android系统基础结构 2
1.2 Android的开发环境 3
1.2.1开发环境 3
1.2.2源代码获取 4
1.2.3编译Android源代码 4
1.2.4仿真器运行 5
1.2.5使用工具 5
1.3系统结构和代码结构 7
1.3.1软件系统结构 7
1.3.2源代码结构 9
第2章 编译结构和各种构建 13
2.1 Android的系统构建 13
2.1.1编译环境要求 13
2.1.2构建流程 14
2.1.3环境设置 16
2.1.4系统构建结果 16
2.2各种部件的构建 18
2.2.1 Android.mk的语法 18
2.2.2各种部件的构建方式 19
2.2.3预编译内容的安装 23
2.3 Android编译的板级支持 24
2.3.1支持一个板的工作 24
2.3.2 buildspec.mk文件的作用 25
2.3.3 vendersetup.sh和lunch命令 26
2.3.4 BoardConfig.mk文件的作用 27
2.3.5 AndroidProducts.mk文件 28
2.3.6 AndroidBoard.mk文件 29
2.3.7编译中的层叠加 30
第3章 本地层基础部分 31
3.1本地层基础部分结构 31
3.2 C语言基础:Bionic 31
3.2.1 Bionic各个部分的结构 32
3.2.2 Bionic的头文件 32
3.2.3内存泄露的检查库 33
3.2.4属性系统的支持 34
3.3 C语言底层库 35
3.3.1 Log库 35
3.3.2 C语言工具库libcutils 36
3.3.3属性和套接字支持 40
3.4 init可执行程序和相关脚本 42
3.4.1 init可执行程序的结构 42
3.4.2启动脚本init.rc 43
3.4.3 init的内建动作和初始化 48
3.4.4 init的循环 50
3.4.5设备管理功能 55
3.5 shell工具 57
3.5.1 shell程序sh 57
3.5.2命令工具箱toolbox 59
3.6 Android属性和套接字机制 60
3.6.1属性机制 60
3.6.2套接字机制 63
第4章 本地层框架部分 67
4.1本地层框架部分结构 67
4.2框架层的工具库libutils 67
4.2.1 libutils的结构 68
4.2.2基本的定义和类型 69
4.2.3数据结构和容器类 70
4.2.4工具类 75
4.2.5引用计数和强弱引用指针 77
4.2.6线程类及相关辅助功能 83
4.2.7文件操作的监听循环 87
4.3作为全局守护进程的可执行程序 89
4.3.1 app_process 89
4.3.2 keystore 90
4.3.3 installd 91
4.3.4 vold 92
4.3.5 netd 94
4.4 Binder的IPC机制结构 96
4.4.1 Android Binder机制的层次结构 96
4.4.2具体Binder的实现 97
4.5 Binder库以及相关内容 98
4.5.1具体Binder的实现 98
4.5.2 Binder库的核心功能 99
4.5.3 Binder框架和具体IPC结构的实现 100
4.5.4 IServiceManager相关 110
4.5.5 Binder库中的其他部分 113
4.6 servicemanager可执行程序和服务的实现 115
4.6.1服务管理器可执行程序和进程 115
4.6.2在系统中实现“服务” 118
4.6.3 servicemanager对服务的管理 121
4.6.4 Android中本地服务的层次结构 121
第5章 本地的启动流程、调试和设计结构 123
5.1 Android启动流程的本地阶段 123
5.1.1启动流程概述 123
5.1.2 BootLoader运行及加载内核 124
5.1.3 Linux内核运行和加载根文件系统 125
5.1.4运行用户空间的第一个进程 125
5.1.5挂接各个文件系统 126
5.1.6系统各个进程的运行 126
5.1.7启动图 128
5.2 Android本地部分的调试 130
5.2.1标准Linux调试方法 130
5.2.2使用log的方法 138
5.2.3 Android的特殊调试工具 139
5.3本地程序的结构设计 145
5.3.1目标和设计思路 145
5.3.2守护进程+保留Socket的设计结构 146
5.3.3守护进程+本地层Binder的设计结构 147
第6章Java运行环境 149
6.1 Dalvik虚拟机和相关工具 149
6.1.1 Dalvik的概述 149
6.1.2虚拟机的实现和运行 150
6.1.3 Dalvik工具 154
6.1.4 nativehelper库 156
6.2 Java基础库libcore 156
6.2.1 libcore的源代码结构 156
6.2.2 luni目录中的内容 158
6.2.3 libcore中的其他内容 159
第7章Java框架层 160
7.1 Java框架层结构 160
7.2 Android的Java层的API 161
7.2.1 Java框架层API的含义 161
7.2.2 API的描述文件 162
7.2.3被隐藏的内容 166
7.2.4不赞成使用的(过时的) API 166
7.3 Java框架库framework jar 168
7.3.1框架库的组成和作用 168
7.3.2框架库的API 168
7.3.3框架库的编译结构 169
7.3.4框架库的各个部分 170
7.3.5属性机制 173
7.3.6套接字机制 174
7.4 Java服务库servicesjar 175
7.4.1服务库的组成和作用 176
7.4.2服务管理器 176
7.4.3主要的服务功能 177
7.4.4启动结束的处理 180
7.5资源包framework-res.apk 180
7.5.1资源包的组成和作用 181
7.5.2作为API的资源id 182
7.5.3资源包AndroidManifest.Xml文件 182
7.6策略库 183
7.6.1策略库的组成和作用 183
7.6.2策略库的功能和使用 183
7.7 Java层的Binder机制 184
7.7.1 Java Binder的框架 185
7.7.2 Java框架层的Binder使用 189
7.7.3 Binder中参数和返回值的类型 194
第8章Java本地调用 198
8.1 Android的Java本地调用 198
8.1.1 JNI的基本概念 198
8.1.2 Android的JNI实现基础 198
8.1.3 Android中JNI的存在方式 201
8.2在框架中使用JNI 201
8.2.1框架层使用JNI的结构 201
8.2.2框架层JNI的实现 204
8.3在应用程序包中使用JNI 207
8.3.1应用程序包的JNI部分 207
8.3.2应用程序包中JNI的典型实现方式 207
8.3.3结构上的几种变化 210
8.4 JNI的高级使用 211
8.4.1 JNI的双向调用 211
8.4.2线程的处理 215
8.4.3 JNIHelp中的特殊处理 216
第9章Java启动流程、调试和程序结构 218
9.1 Java部分的启动流程 218
9.1.1启动流程概述 218
9.1.2 Java系统的守护进程 219
9.1.3 ZygoteInit类的执行 220
9.1.4系统服务器部分 222
9.1.5 Java应用程序部分的启动 227
9.2 Java部分的调试 229
9.2.1在Java中使用Log 229
9.2.2 Java层的命令行程序 229
9.2.3代码内容相关的调试 232
9.2.4 DDMS工具 237
9.2.5 HierarchyViewer工具 239
9.3 Java层程序的结构设计 241
9.3.1目标和设计思路 241
9.3.2在系统服务器中服务的设计结构 242
9.3.3 Service组件的设计结构 243
第10章GUI系统和应用程序管理 245
10.1 GUI系统的结构和模块关系 245
10.2 UI框架库及相关 246
10.2.1基本类型方面 246
10.2.2显示相关 247
10.2.3按键和事件的处理 247
10.2.4其他内容 249
10.3 Surface图层系统 249
10.3.1 Surface系统的结构 250
10.3.2 Surface本地的接口部分 251
10.3.3 Surface本地实现部分 254
10.3.4 Surface的JNI代码 255
10.3.5 Surface的Java部分 256
10.4 2D图形系统 258
10.4.1 2D图形系统的结构 258
10.4.2 Skia底层库 259
10.4.3图形系统的JNI接口 263
10.4.4 2D图形包 264
10.5 3D图形系统 264
10.5.1 OpenGL系统的结构 265
10.5.2 OpenGL的本地代码 265
10.5.3 OpenGL的JNI代码 267
10.5.4 OpenGL的Java类 268
10.6窗口和视图部分 270
10.6.1窗口和视图部分的结构 270
10.6.2窗口管理的底层实现 271
10.6.3视图实现和上层的窗口管理器的实现 275
10.7活动和应用程序管理 277
10.7.1活动和应用程序管理的结构 277
10.7.2活动界面的实现 278
10.7.3应用程序管理的实现 282
第2篇Android系统级应用开发要点 288
第11章Android应用层接口结构与安全 288
11.1 Android应用层接口结构 288
11.1.1标准应用程序和源代码开发的应用程序 288
11.1.2第三方应用程序和预置应用程序 290
11.2 Android的安全系统 290
11.2.1安全机制概述 290
11.2.2 Linux的用户和组 291
11.2.3 Android的许可 294
11.3程序签名问题 296
11.3.1 Android应用签名的概念 296
11.3.2 Android应用签名的流程 296
11.3.3不同的程序签名 298
11.3.4证书生成工具 299
11.4安全策略 300
11.4.1安全策略的几个方面 300
11.4.2安全策略的实现 306
11.4.3安全策略的定制 310
第12章 应用层的本地内容和NDK开发 312
12.1本地应用的标准化 312
12.2 NDK环境 313
12.2.1 NDK的基本概念 313
12.2.2从几个方面理解NDK的不同含义 313
12.3 NDK的组成结构 314
12.3.1 NDK环境的结构 314
12.3.2 NDK中包含的内容 315
12.4 NDK开发基础 317
12.4.1编译流程 317
12.4.2 NDK编程要点 318
12.4.3开发结构 319
12.5使用JNI的方式 320
12.5.1 NDK中使用JNI工程结构 320
12.5.2在本地操作Bitmap位图 320
12.5.3在本地使用OpenGL ES绘制 321
12.5.4程序实现 321
12.6在本地构建应用 328
12.6.1本地应用接口基础 328
12.6.2实现本地活动的辅助库:android native_ app_glue 332
12.6.3程序实现 333
第13章 预置的应用程序层 339
13.1预置应用层程序概述 339
13.2预置综合应用程序 340
13.2.1主屏幕 340
13.2.2设置 342
13.2.3联系人和电话 345
13.2.4短信息和彩信 347
13.2.5浏览器和邮件 349
13.2.6音乐 352
13.2.7照相机和录音机 354
13.2.8画廊 358
13.2.9搜索 359
13.2.10时钟、计算器和日历 360
13.3预置内容提供者 361
13.3.1联系人信息提供者 361
13.3.2媒体信息提供者 362
13.3.3电话信息提供者 363
13.3.4下载信息提供者 363
13.4预置输入法 364
13.5活动墙纸系统 365
13.5.1活动墙纸选择器 365
13.5.2几个具体的活动墙纸 366
13.6实现框架功能的应用程序包 366
13.6.1系统界面 367
13.6.2设置信息提供者 368
13.6.3几个主体为Service组件的应用程序包 369
第14章Android系统定制 371
14.1 Android系统定制概述 371
14.2普通应用程序的定制 371
14.2.1普通应用定制的方面 371
14.2.2预置的应用程序的组件可见性 372
14.2.3组件的intent-filter 372
14.3桌面的定制 373
14.3.1桌面程序的入口和功能 374
14.3.2桌面程序细节 375
14.3.3在桌面之前执行的程序 378
14.4系统资源的定制 378
14.4.1定义资源的概念和原则 379
14.4.2一些配置的数值 379
14.4.3可绘制内容的定制 379
14.4.4样式和主题的定制 380
14.4.5内部布局的定制 382
14.5框架内部组件和界面的定制 383
14.5.1内部组件 383
14.5.2内部界面 385
14.6状态栏界面的定制 385
14.6.1状态栏界面的功能和布局 385
14.6.2状态栏界面 387
14.7锁屏界面的定制 389
14.7.1锁屏界面的功能 390
14.7.2锁屏界面 391
14.8开机动画的定制 393
第15章 系统级的调试和测试 396
15.1调试 396
15.1.1命令行调试工具 396
15.1.2界面上的辅助工具 402
15.2测试系统和工具 403
15.2.1测试系统的结构 404
15.2.2 Monkey 404
15.2.3 MonkeyRunner 406
15.3代码级别的测试 409
15.3.1代码测试框架 409
15.3.2代码测试方式 411
15.4兼容性及兼容性测试 414
15.4.1 Android兼容性 414
15.4.2 CTS兼容性验证 416
15.4.3 CTS的相关源代码和原理 419
附录A Android版本演进和Android 4.x 423
A.1 Android版本的演进 423
A.2编译系统的更新 423
A.3本地框架层的更新 425
A.3.1 init.rc中的关键字 425
A.3.2 surfaceflinger作为独立的守护进程 425
A.3.3 netd守护进程 426
A.4 Java框架的更新 426
A.4.1 Java框架的API描述 426
A.4.2 Java类库的升级 427
A.4.3 Java服务包 428
A.4.4工具 428
A.5 GUI系统的更新 429
A.5.1 GUI系统 429
A.5.2 Skia引擎的改动 430
A.5.3 OpenGL引擎的改动 430
A.5.4窗口的变化 430
A.6 Java应用程序层的更新 432
A.6.1 SystemUI 432
A.6.2桌面 432
A.6.3普通应用程序 433
A.7本地标准应用和NDK环境 434