致谢 xxvii
作者简介 xxix
引言 1
I Android 平台概述 9
第1 章 Android 简介 11
1.1 移动软件开发简史 11
1.1.1 遥想当年…… 11
1.1.2 “ 砖” 13
1.1.3 无线应用协议(WAP) 15
1.1.4 专有移动平台 17
1.2 开放手机联盟 19
1.3 Google 进入无线市场 19
1.3.1 开放手机联盟的形成 20
1.3.2 制造商:设计Android 设备 20
1.3.3 移动运营商:提供Android 体验 21
1.3.4 应用程序驱动设备的销售:开发Android 应用程序 22
1.3.5 利用所有Android 设备的优势 23
1.3.6 Android 市场:现在我们在哪里 23
1.4 Android 平台的差异 24
1.4.1 Android :下一代的平台 25
1.4.2 自由和开放的源码 26
1.4.3 熟悉和廉价的开发工具 26
1.4.4 合理的开发学习曲线 27
1.4.5 功能强大的应用开发的支持 27
1.4.6 丰富和安全的应用程序集成 28
1.4.7 没有昂贵的开发费用 28
1.4.8 应用程序的“自由市场” 28
1.4.9 一个不断发展的平台 30
1.5 Android 平台 30
1.5.1 Android 的底层架构 31
1.5.2 安全和权限 32
1.5.3 探寻Android 应用程序 34
1.6 总结 37
1.7 小测验 38
1.8 练习题 38
1.9 参考内容和更多信息 38
第2 章 搭建你的Android 开发环境 39
2.1 配置你的开发环境 39
2.1.1 配置你的操作系统用于设备调试 42
2.1.2 配置你的Android 进行调试 42
2.1.3 更新Android SDK 44
2.1.4 Android SDK 的问题 45
2.2 探索Android SDK 45
2.2.1 了解Android SDK 的许可协议 45
2.2.2 阅读Android SDK 文档 47
2.2.3 探索Android 应用框架核心部分 47
2.2.4 探索Android 核心工具 50
2.2.5 探索Android 示例应用程序 54
2.3 总结 55
2.4 小测验 56
2.5 练习题 56
2.6 参考资料和更多信息 56
第3 章 编写你的第一个Android 程序 57
3.1 测试你的开发环境 57
3.1.1 使用SDK 管理器加入Android 示例程序 58
3.1.2 添加Snake 项目到你的Android IDE 工作区 60
3.1.3 为你的Snake 项目创建一个AVD 63
3.1.4 为你的Snake 项目创建一个启动配置 66
3.1.5 在Android 模拟器中运行Snake 应用程序 68
3.2 构建你的第一个Android 应用 70
3.2.1 创建并配置一个新的Android 项目 71
3.2.2 Android 应用的核心文件和目录 74
3.2.3 为你的项目创建一个AVD 77
3.2.4 为你的项目创建一个启动配置 77
3.2.5 在模拟器中运行你的Android 应用 79
3.2.6 在模拟器中调试你的Android 应用 82
3.2.7 为你的Android 应用增加日志记录 85
3.2.8 为你的应用程序增加媒体支持 87
3.2.9 在你的程序中增加基于位置的服务 90
3.2.10 在实体硬件上调试你的应用 93
3.3 小结 95
3.4 小测验 97
3.5 练习题 97
3.6 参考资料和更多信息 98
II Android 应用程序基础 99
第4 章 了解Android 应用结构 101
4.1 掌握重要的Android 术语 101
viii Android 应用程序开发权威指南(第四版)
4.2 应用程序 Context 102
4.2.1 获取应用程序Context 102
4.2.2 使用应用程序Context 103
4.3 使用Activity 执行应用程序任务 104
4.3.1 Android Activity 的生命周期 105
4.4 使用Fragment 来组织Activity 组件 110
4.5 使用Intent 管理Activity 之间的切换 112
4.5.1 通过Intent 切换Activity 112
4.5.2 通过Activity 和Intent 来组织应用程序导航 115
4.6 使用服务 116
4.7 接收和广播Intent 117
4.8 总结 117
4.9 小测验 118
4.10 练习题 118
4.11 参考资料和更多信息 118
第5 章 使用Android 清单文件定义你的应用 119
5.1 使用Android 清单文件配置Android 应用 119
5.1.1 编辑Android 清单文件 120
5.2 管理你的应用程序ID 126
5.2.1 控制你的应用程序版本号 126
5.2.2 设置应用程序的名称和图标 127
5.3 设置应用程序的系统需求 127
5.3.1 针对特定的SDK 版本 128
5.3.2 设置应用的平台需求 131
5.3.3 使用外部库 134
5.3.4 其他应用程序配置和过滤器 135
5.4 在Android 清单文件中注册Activity 135
5.4.1 使用Intent 过滤器为你的应用指定一个主入口Activity 136
5.4.2 配置其他的Intent 过滤器 136
5.4.3 注册其他应用程序组件 137
5.5 访问权限 138
5.5.1 注册你的应用程序所需的权限 138
5.5.2 注册你的应用其他的权限 139
5.6 探索其他清单文件的设置 140
5.7 总结 141
5.8 小测验 141
5.9 练习题 141
5.10 参考资料和更多信息 142
第6 章 管理应用程序资源 143
6.1 什么是资源 143
6.1.1 存储应用程序资源 143
6.1.2 资源类型 144
6.1.3 以编程方式访问资源 148
6.2 使用Android IDE 设置简单的资源值 149
6.3 使用不同类型的资源 153
6.3.1 使用字符串资源 153
6.3.2 使用格式化的字符串资源 154
6.3.3 使用带数量的字符串 156
6.3.4 使用字符串数组 157
6.3.5 使用布尔类型资源 158
6.3.6 使用整型资源 159
6.3.7 使用颜色资源 160
6.3.8 使用尺寸资源 160
6.3.9 可绘制资源 162
6.3.10 使用图像 164
6.3.11 使用颜色状态列表 166
6.3.12 使用动画 168
6.3.13 使用菜单 170
6.3.14 使用XML 文件 172
6.3.15 使用原始文件 173
6.3.16 引用资源 174
6.3.17 使用布局 175
6.3.18 引用系统资源 182
6.4 总结 183
6.5 小测验 183
6.6 练习题 183
6.7 参考资料和更多信息 184
III Android 用户界面设计要点 185
第7 章 探索用户界面构建模块 187
7.1 Android 的视图和布局介绍 187
7.1.1 Android 视图 187
7.1.2 Android 控件 187
7.1.3 Android 布局 188
7.2 使用TextView 来显示文本给用户 189
7.2.1 配置布局和大小 190
7.2.2 在文本中创建上下文链接 191
7.3 使用文本字段从用户获取数据 193
7.3.1 使用EditText 控件获取输入文本 194
7.3.2 使用输入过滤器限制用户的输入 195
7.3.3 使用自动完成功能帮助用户 197
7.4 使用Spinner 控件让用户选择 199
7.5 使用Button 和Switch 允许用户进行简单的选择 201
7.5.1 使用基本Button 202
7.5.2 使用CheckBox 和ToggleButton 控件 205
7.5.3 使用RadioGroup 和RadioButton 206
7.6 使用Pickers 来获取用户的数据、时间和数字 209
7.7 使用指示控件来给用户显示进度和活动 212
7.7.1 使用ProgressBar 指示进度 212
7.7.2 使用Activity Bars 和Activity Circles 来指示Activity 214
7.8 使用SeekBar 调整进度 215
7.9 其他有价值的用户界面控件 216
7.9.1 使用RatingBar 显示评价数据 216
7.9.2 使用Chronometer 显示时间的流逝 217
7.9.3 显示时间 218
7.10 总结 220
7.11 小测验 220
7.12 练习 220
7.13 参考资料和更多信息 221
第8 章 布局设计 223
8.1 在Android 中创建用户界面 223
8.1.1 使用XML 资源文件创建布局 223
8.1.2 使用编程方式创建布局 225
8.2 组织你的用户界面 228
8.2.1 使用ViewGroup 子类来设计布局 229
8.2.2 使用ViewGroup 子类作为View 容器 229
8.3 使用内置的布局类 230
8.3.1 使用LinearLayout 232
8.3.2 使用RelativeLayout 234
8.3.3 使用FrameLayout 237
8.3.4 使用TableLayout 240
8.3.5 使用GridLayout 242
8.3.6 在屏幕上使用多个布局 246
8.4 使用容器控件类 247
8.4.1 使用数据驱动的容器 247
8.4.2 添加滚动支持 252
8.4.3 探索其他View 容器 253
8.5 总结 254
8.6 小测验 254
8.7 练习 255
8.8 参考资料和更多信息 255
第9 章 用Fragment 分割用户界面 257
9.1 理解Fragment 257
9.1.1 了解Fragment 的生命周期 259
9.1.2 使用特殊类型的Fragment 262
9.1.3 设计基于Fragment 的应用 263
9.2 使用Android 支持包 272
9.2.1 为以前的应用添加Fragment 支持 272
9.2.2 在新应用中使用Fragment 针对于旧平台 273
9.2.3 将Android 支持包链接到你的项目 273
9.3 探索嵌套的Fragment 274
9.4 总结 275
9.5 小测验 275
9.6 练习 276
9.7 参考资料和更多信息 276
第10 章 显示对话框 279
10.1 选择你的Dialog 实现方式 279
10.2 探索不同类型的Dialog 280
10.3 使用Dialog 和Dialog Fragment 282
10.3.1 跟踪Dialog 和DialogFragment 的生命周期 282
10.3.2 使用自定义Dialog 285
10.4 使用支持包中的Dialog Fragment 286
10.5 总结 289
10.6 小测验 290
10.7 练习 290
10.8 参考资料和更多信息 290
IV Android 应用设计要点 293
第11 章 使用Android 首选项 295
11.1 使用应用首选项 295
11.1.1 确定首选项是否合适 295
11.1.2 存储不同类型的首选项值 296
11.1.3 创建一个Activity 私有的首选项设置 296
11.1.4 创建多个Activity 共享的首选项设置 297
11.1.5 搜索和读取首选项设置 297
11.1.6 添加、更新和删除首选项设置 298
11.1.7 首选项修改时的反应 300
11.2 在Android 文件系统中查找首选项数据 300
11.3 创建可管理的用户首选项 301
11.3.1 创建一个首选项资源文件 301
11.3.2 使用PreferenceActivity 类 304
11.3.3 组织首选项设置的标头 308
11.4 了解Android 应用的云存储 312
11.5 总结 312
11.6 小测验 312
11.7 练习 313
11.8 参考资料和更多信息 313
第12 章 使用文件和目录 315
12.1 使用设备的应用程序数据 315
12.2 实现良好的文件管理 316
12.3 了解Android 系统的文件权限 317
12.4 使用文件和目录 318
12.4.1 探索Android 应用程序目录 319
12.4.2 使用Android 文件系统上的其他目录和文件 325
12.5 总结 327
12.6 小测验 327
12.7 练习 328
12.8 参考资料和更多信息 328
第13 章 使用内容提供者 329
13.1 探索Android 的内容提供者 329
13.1.1 使用MediaStore 内容提供者 330
13.1.2 使用CallLog 内容提供者 332
13.1.3 使用浏览器内容提供者 334
13.1.4 使用CalendarContract 内容提供者 336
13.1.5 使用UserDictionary 内容提供者 336
13.1.6 使用VoicemailContract 内容提供者 336
13.1.7 使用Settings 内容提供者 337
13.1.8 ContactsContract 内容提供者的介绍 337
13.2 修改内容提供者数据 340
13.2.1 添加记录 340
13.2.2 更新记录 341
13.2.3 删除记录 342
13.3 使用第三方的内容提供者 343
13.4 总结 344
13.5 小测验 344
13.6 练习 344
13.7 参考资料和更多信息 345
第14 章 设计兼容的应用 347
14.1 最大程度提供应用程序兼容性 347
14.2 设计兼容的用户界面 350
14.2.1 使用Fragment 351
14.2.2 使用Android 支持库 351
14.2.3 支持特定的屏幕类型 352
14.2.4 使用Nine-Patch 可缩放图形 353
14.2.5 使用“工作区块”原则 353
14.3 提供替代应用程序资源 354
14.3.1 了解资源是如何被解析的 355
14.3.2 使用限定符组织替代资源 356
14.3.3 为不同屏幕方向提供资源 361
14.3.4 在程序中使用替代资源 363
14.3.5 高效地组织应用程序资源 363
14.4 针对平板、电视和其他新设备 364
14.4.1 针对平板设备 364
14.4.2 针对Google 电视设备 365
14.5 针对Google Chromecast 设备 367
14.6 总结 367
14.7 小测验 367
14.8 练习 368
14.9 参考资料和更多信息 368
V 发布和部署Android 应用程序 371
第15 章 学习Android 软件开发流程 373
15.1 移动端开发流程概述 373
15.2 选择正确的软件方法论 374
15.2.1 理解瀑布流(Waterfall)模式的危险性 374
15.2.2 理解迭代的价值 375
15.3 收集应用程序的需求 375
15.3.1 明确项目需求 375
15.3.2 为移动端应用程序编写用例 378
15.3.3 结合第三方的需求和建议 379
15.3.4 管理设备数据库 380
15.4 评估项目风险 383
15.4.1 确认目标设备 383
15.4.2 获取目标设备 385
15.4.3 判断应用程序需求的可行性 386
15.4.4 理解质量保证(QA)的风险 387
15.5 编写至关重要的项目文档 388
15.5.1 为保证产品质量而制定测试计划 389
15.5.2 为第三方提供需要的文档 389
15.5.3 为维护和移植提供文档 390
15.6 运用配置管理系统 390
15.6.1 选择一个合适的源码控制系统 390
15.6.2 实现一个可用的应用程序版本系统 390
15.7 设计移动应用程序 391
15.7.1 理解移动设备的资源限制 391
15.7.2 研究通用的移动应用程序架构 391
15.7.3 为可扩展性和可维护性而设计 392
15.7.4 设计应用程序的互通性 394
15.8 开发移动端应用程序 394
15.9 测试移动端应用程序 395
15.9.1 控制测试版的发布 395
15.10 部署移动应用程序 396
15.10.1 选取目标市场 397
15.11 支持和维护移动应用程序 397
15.11.1 跟踪并解决用户提交的宕机报告 398
15.11.2 测试固件升级 398
15.11.3 维护应用程序文档 398
15.11.4 管理服务器的实时变化 398
15.11.5 鉴别低风险的移植机会 398
15.11.6 应用程序功能特性的选择 399
15.12 总结 399
15.13 小测验 399
15.14 练习 399
15.15 参考资料和更多信息 400
第16 章 设计和开发可靠的Andriod 应用程序 401
16.1 设计可靠的移动应用程序的最佳实践 401
16.1.1 满足移动端用户的需求 402
16.1.2 为移动设备设计用户交互界面 402
16.1.3 设计稳定并且响应迅速的移动应用程序 404
16.1.4 设计安全的移动应用程序 405
16.1.5 如何将应用程序利润最大化 406
16.1.6 遵循Android 应用程序的质量指导方针 407
16.1.7 利用第三方的质量标准 408
16.1.8 开发易于维护和升级的移动应用程序 408
16.1.9 利用应用程序诊断手段 409
16.1.10 设计便于升级的应用程序 410
16.1.11 利用Android 的工具辅助应用程序的设计 411
16.2 避免在Android 应用程序设计中犯低级错误 411
16.3 开发可靠移动应用程序的最佳实践 412
16.3.1 设计适用于移动端的研发流程 412
16.3.2 尽早并经常测试应用程序的可行性 412
16.3.3 使用编码标准,审阅以及单元测试来改进代码质量 413
16.3.4 处理单个设备中出现的缺陷 416
16.3.5 利用Android 提供的工具来做开发 417
16.3.6 避免在Android 应用程序开发中犯低级错误 417
16.4 总结 418
16.5 小测验 418
16.6 练习 418
16.7 参考资料和更多信息 419
第17 章 提升Android 应用程序的用户体验 421
17.1 思考目标 421
17.1.1 用户目标 422
17.1.2 小组目标 422
17.1.3 其他股东的目标 423
17.2 集中研发精力的一些技巧 423
17.2.1 人物角色 423
17.2.2 发现和组织个体 424
17.2.3 用例和用例图 425
17.3 绘制应用程序的功能导航图 426
17.3.1 Android 应用程序的导航场景 426
17.3.2 执行任务(Tasks)以及在Back Stack 中导航 430
17.3.3 在Fragments 间导航 430
17.3.4 规划应用程序导航 431
17.3.5 Android 的导航设计模式 433
17.4 引导用户使用应用程序 438
17.4.1 菜单 438
17.4.2 操作栏 438
17.4.3 对话框 443
17.4.4 从应用程序内容中发起的操作 443
17.5 塑造应用程序的个性 444
17.6 针对不同屏幕的布局设计 445
17.7 正确处理视觉反馈 446
17.8 观察程序的可用性 446
17.8.1 应用程序的仿制 447
17.8.2 测试发布版本 448
17.9 总结 448
17.10 小测验 448
17.11 练习 449
17.12 参考和更多信息 449
第18 章 测试Android 应用程序 451
18.1 测试移动应用程序的最佳实践 451
18.1.1 设计移动应用程序的问题追踪系统 451
18.1.2 管理测试环境 453
18.1.3 让测试覆盖率最大化 456
18.1.4 利用Android 的SDK 工具来做应用程序测试 464
18.1.5 避免Android 应用程序测试中的一些低级错误 465
18.2 Android 应用程序测试精要 466
18.2.1 利用JUnit 进行单元测试 467
18.2.2 PasswordMatcher 应用程序入门 468
18.2.3 确认测试的预期结果 471
18.2.4 创建一个Android 测试工程 472
18.2.5 编写测试代码 479
18.2.6 添加其他测试用例 485
18.3 更多Android 自动化测试程序和API 488
18.4 总结 488
18.5 小测验 489
18.6 练习 489
18.7 参考资料和更多信息 489
第19 章 发布你的Android 应用程序 491
19.1 选择正确的分发模型 491
19.1.1 保护你的知识产权 492
19.1.2 遵循Google Play 的政策 493
19.1.3 向用户收费 493
19.2 为即将发布的应用程序打包 494
19.2.1 为打包工作准备好代码 495
19.2.2 打包应用程序并签名 497
19.2.3 测试用于发布的应用程序包 500
19.3 在Google Play 中发布程序 501
19.3.1 将你的应用程序上传到Google Play 中 505
19.3.2 上传应用程序营销相关的资源 506
19.3.3 配置定价和发布详情 508
19.3.4 配置额外的应用程序选项 509
19.3.5 管理其他开发者控制台选项 509
19.3.6 将应用程序发布到Google Play 中 510
19.3.7 在Google Play 中管理应用程序 510
19.4 Google Play 平台上的“阶段性展示产品” 511
19.5 通过Google Play 的私有渠道发布程序 512
19.6 翻译你的应用程序 512
19.7 通过其他方式发布应用程序 512
19.8 自行发布应用程序 513
19.9 总结 515
19.10 小测验 515
19.11 练习 516
19.12 参考资料和更多信息 516
VI 附录 517
附录A 掌握Android 开发工具 519
A.1 使用Android 文档 520
A.2 利用Android 模拟器 523
A.3 通过LogCat 查看应用程序日志 524
A.4 利用DDMS 来调试应用程序 525
A.5 使用Android 调试桥(ADB) 526
A.6 使用资源编辑器和UI 设计器 527
A.7 使用Android 的“层级浏览器” 529
A.7.1 启动层级浏览器 531
A.7.2 在布局视图模式下工作 531
A.7.3 优化你的用户接口 533
A.7.4 在“像素级”模式下工作 533
A.8 利用Nine-Patch 可拉伸图像 534
A.9 使用其他的Android 工具 537
A.10 总结 540
A.11 小测验 540
A.12 练习 540
A.13 参考资料和更多信息 541
附录B 快速入手指南:Android 模拟器 543
B.1 模拟现实世界:模拟器的用途 543
B.2 使用Android 虚拟设备 545
B.2.1 使用Android 虚拟设备管理器 547
B.2.2 创建一个AVD 547
B.2.3 定制AVD 的硬件配置 549
B.3 以特定的AVD 配置启动模拟器 550
B.3.1 维护模拟器性能 551
B.3.2 配置模拟器的启动参数 552
B.3.3 启动模拟器来运行应用程序 552
B.3.4 从Android 虚拟设备管理器中启动一个模拟器 555
B.4 配置模拟器的GPS 位置 555
B.5 在两个模拟器实例间互相通话 556
B.6 在两个模拟器实例间发送短信 559
B.7 通过控制台来与模拟器进行交互 560
B.7.1 使用控制台来模拟来电 560
B.7.2 使用控制台来模拟SMS 信息 560
B.7.3 使用控制台来发送GPS 坐标 562
B.7.4 使用控制台来监视网络状态 562
B.7.5 使用控制台来操纵电源设置 563
B.7.6 使用控制台的其他命令 564
B.8 享受模拟器的功能 564
B.9 理解模拟器的限制 565
B.10 总结 566
B.11 小测验 566
B.12 练习 567
B.13 参考资料和更多信息 567
附录C 快速入手指南:Android DDMS 569
C.1 将DDMS 作为独立程序和Android IDE 配合使用 569
C.2 使用DDMS 的核心功能 571
C.3 与进程、线程和堆进行交互工作 571
C.3.1 为Android 应用程序关联一个调试器 572
C.3.2 终止进程 572
C.3.3 监视Android 应用程序的线程活动 572
C.3.4 监视堆的活动 573
C.3.5 执行垃圾回收 574
C.3.6 创建并使用一个HPROF 文件 575
C.4 使用内存分配追踪器 576
C.5 观察网络数据 577
C.6 使用File Explorer 577
C.6.1 浏览模拟器或者设备的文件系统 578
C.6.2 从模拟器或者设备中复制文件 579
C.6.3 将文件传送到模拟器或者设备中 580
C.6.4 从模拟器或者设备中删除文件 580
C.7 使用Emulator Control 580
C.7.1 改变电话状态 581
C.7.2 模拟语音来电 581
C.7.3 模拟SMS 来信 582
C.7.4 发送坐标修正信息 583
C.8 使用System Information 583
C.9 为模拟器和设备执行截屏操作 584
C.10 使用应用程序的日志追踪功能 585
C.11 总结 586
C.12 小测验 586
C.13 练习 586
C.14 参考资料和更多信息 586
附录D Android IDE 和Eclipse 使用技巧 589
D.1 正确组织你的Android IDE 工作区 589
D.1.1 集成源码控制服务 589
D.1.2 重新调整各视图栏的位置 590
D.1.3 最大化窗口 590
D.1.4 最小化窗口 591
D.1.5 并排浏览窗口 591
D.1.6 查看同一个文件的两个不同区域 591
D.1.7 关闭不需要的页面 593
D.1.8 让窗口可控 593
D.1.9 创建定制的日志过滤条件 593
D.1.10 搜索你的工程 594
D.1.11 组织Android IDE 任务 594
D.2 使用Java 语言来编程 595
D.2.1 使用自动完成功能 595
D.2.2 创建新的类和方法 595
D.2.3 导入(Imports)功能 596
D.2.4 格式化代码 596
D.2.5 为几乎所有事物重命名 597
D.2.6 重构代码 597
D.2.7 重新组织代码 599
D.2.8 使用快速修正功能 599
D.2.9 提供Javadoc 风格的文档 600
D.3 解决某些诡异的编译错误 600
D.4 总结 601
D.5 小测验 601
D.6 练习 601
D.7 参考资料和更多信息 601
附录E 小测验答案 603
· · · · · · (
收起)