第1部分 Android平台概述 3
第1章 Android概述 3
1.1 Android开源项目(AOSP) 3
1.2 开放手机联盟 4
1.2.1 Google进入移动市场 4
1.2.2 开放手机联盟介绍 4
1.2.3 加入开放手机联盟 5
1.2.4 制造商:设计Android设备 5
1.2.5 移动运营商:提供Android体验 5
1.2.6 应用驱动设备的销售:开发Android应用 6
1.2.7 利用所有Android设备的优势 6
1.2.8 Android:我们现在取得的进展 7
1.3 Android平台的独特性 7
1.3.1 Android的由来 8
1.3.2 自由和开放源代码 8
1.3.3 熟悉且廉价的开发工具 9
1.3.4 合理的开发学习曲线 9
1.3.5 功能强大的应用开发支持 9
1.3.6 丰富和安全的应用集成 10
1.3.7 没有昂贵的开发费用 10
1.3.8 应用的“自由市场” 10
1.3.9 一个不断发展的平台 11
1.4 Android平台 11
1.4.1 Android的底层架构 11
1.4.2 安全和权限 13
1.4.3 探索Android应用 14
1.5 OHA和GMS之外的Android版本 17
1.5.1 Amazon Fire OS 17
1.5.2 Cyanogen OS和CyanogenMod 17
1.5.3 Maker Movement和开源硬件 18
1.5.4 保持警觉 18
1.6 本章小结 18
1.7 小测验 18
1.8 练习题 19
1.9 参考资料和更多信息 19
第2章 设置开发环境 21
2.1 配置你的开发环境 21
2.1.1 配置操作系统以便进行设备调试 24
2.1.2 配置Android硬件以便进行调试 24
2.1.3 更新Android Studio 26
2.1.4 更新Android SDK 26
2.1.5 Android Studio存在的问题 27
2.1.6 Android SDK存在的问题 27
2.1.7 Android Studio的替代者:IntelliJ IDEA 27
2.2 探索Android SDK 28
2.2.1 了解Android SDK许可协议 28
2.2.2 阅读Android SDK文档 29
2.2.3 探索Android应用框架核心 30
2.2.4 探索Android核心工具 31
2.2.5 探索Android示例应用 35
2.3 本章小结 36
2.4 小测验 37
2.5 练习题 37
2.6 参考资料和更多信息 37
第3章 创建第一个Android应用 39
3.1 测试开发环境 39
3.1.1 在Android Studio中导入BorderlessButtons示例 40
3.1.2 使用预装的AVD运行BorderlessButtons项目 42
3.1.3 在Android模拟器中运行BorderlessButtons应用 42
3.2 构建第一个Android应用 44
3.2.1 创建并配置一个新的Android项目 44
3.2.2 了解Android符号视图和传统Project视图 48
3.2.3 Android应用的核心文件和目录 49
3.2.4 在模拟器中运行Android应用 50
3.2.5 在模拟器中调试Android应用 52
3.2.6 为Android应用增加日志记录 55
3.2.7 在硬件设备上调试应用 57
3.3 本章小结 58
3.4 小测验 59
3.5 练习题 59
3.6 参考资料和更多信息 59
第Ⅱ部分 应用基础 63
第4章 理解应用组件 63
4.1 掌握重要的Android术语 63
4.2 应用Context 64
4.2.1 获取应用Context 64
4.2.2 使用应用Context 64
4.3 使用Activity执行应用任务 65
4.4 使用Fragment组织Activity组件 71
4.5 使用Intent管理Activity之间的切换 72
4.5.1 通过Intent切换Activity 73
4.5.2 通过Activity、Fragment和Intent来组织应用导航 75
4.6 使用服务 75
4.7 接收和广播Intent 76
4.8 本章小结 77
4.9 小测验 77
4.10 练习题 77
4.11 参考资料和更多信息 78
第5章 定义清单文件 79
5.1 使用Android清单文件配置Android应用 79
5.2 管理应用ID 82
5.3 设置应用的系统需求 83
5.3.1 设置应用的平台需求 84
5.3.2 其他应用配置设置和过滤器 86
5.4 在Android清单文件注册Activity 86
5.4.1 使用Intent过滤器为应用指定主入口Activity 87
5.4.2 配置其他Intent过滤器 87
5.4.3 注册其他应用组件 88
5.5 访问权限 88
5.5.1 注册应用所需的权限 89
5.5.2 注册应用强制的权限 91
5.6 探索清单文件的其他设置 92
5.7 本章小结 93
5.8 小测验 93
5.9 练习题 93
5.10 参考资料和更多信息 94
第6章 管理应用的资源 95
6.1 资源的含义 95
6.1.1 存储应用资源 95
6.1.2 资源类型 96
6.1.3 以编程方式访问资源 99
6.2 在Android Studio中添加简单的资源值 100
6.3 使用不同类型的资源 103
6.3.1 使用字符串资源 103
6.3.2 使用格式化的字符串资源 104
6.3.3 使用带数量的字符串 105
6.3.4 使用字符串数组 106
6.3.5 使用布尔类型资源 107
6.3.6 使用整型资源 108
6.3.7 使用颜色资源 108
6.3.8 使用尺寸资源 109
6.3.9 以编程方式使用尺寸资源 110
6.3.10 可绘制资源 110
6.3.11 使用图像 112
6.3.12 使用颜色状态列表 114
6.3.13 使用动画 115
6.3.14 使用菜单 117
6.3.15 使用XML文件 119
6.3.16 使用原始文件 119
6.3.17 引用资源 120
6.4 使用布局 122
6.4.1 在Android Studio中设计布局 123
6.4.2 以编程方式使用布局资源 125
6.5 引用系统资源 126
6.6 本章小结 127
6.7 小测验 127
6.8 练习题 127
6.9 参考资料和更多信息 128
第7章 探讨构建块 129
7.1 Android视图和布局介绍 129
7.1.1 Android视图 129
7.1.2 Android控件 129
7.1.3 Android布局 130
7.2 使用TextView向用户显示文本 130
7.2.1 配置布局和大小 131
7.2.2 在文本中创建上下文链接 132
7.3 使用文本字段从用户端获取数据 134
7.3.1 使用EditText控件获取输入文本 134
7.3.2 使用输入过滤器限制用户输入 135
7.3.3 使用自动完成功能帮助用户 136
7.4 使用Spinner控件让用户选择 138
7.5 使用Button和Switch允许用户简单选择 139
7.5.1 使用基本Button 140
7.5.2 使用CheckBox和ToggleButton控件 142
7.5.3 使用RadioGroup和RadioButton 143
7.6 使用Picker获取日期、时间和数字 145
7.7 使用Indicator为用户显示进度和活动 148
7.7.1 使用ProgressBar指示进度 148
7.7.2 向AetionBar添加进度指示器 149
7.7.3 使用Activity Bar和Activity Circle指示Activity 150
7.8 使用SeekBar调整进度 151
7.9 其他有价值的用户界面控件 152
7.9.1 使用RatingBar显示评分数据 152
7.9.2 使用Chronometer显示时间的流逝 153
7.9.3 显示时间 154
7.9.4 使用VideoView播放视频 155
7.10 本章小结 156
7.11 小测验 156
7.12 练习题 156
7.13 参考资料和更多信息 157
第8章 布局设计 159
8.1 在Android中创建用户界面 159
8.1.1 使用XML资源文件创建布局 159
8.1.2 以编程方式创建布局 161
8.2 组织用户界面 164
8.2.1 使用ViewGroup子类来设计布局 164
8.2.2 使用ViewGroup子类作为View容器 164
8.3 使用内置的布局类 165
8.3.1 使用LinearLayout 167
8.3.2 使用RelativeLayout 168
8.3.3 使用FrameLayout 171
8.3.4 使用TableLayout 173
8.3.5 使用GridLayout 176
8.3.6 在屏幕上使用多个布局 179
8.4 使用容器控件类 180
8.4.1 使用数据驱动的容器 180
8.4.2 添加滚动支持 184
8.4.3 探索其他View容器 185
8.5 本章小结 186
8.6 小测验 186
8.7 练习题 187
8.8 参考资料和更多信息 187
第9章 用Fragment拆分用户界面 189
9.1 理解Fragment 189
9.1.1 了解Fragment的生命周期 191
9.1.2 管理Fragment修改 191
9.1.3 使用特殊类型的Fragment 192
9.1.4 设计基于Fragment的应用 193
9.2 使用Android支持库包 202
9.2.1 为旧应用添加Fragment支持 202
9.2.2 在新应用中针对旧平台使用Fragment 203
9.2.3 将Android支持包链接到项目 203
9.3 使用Fragment的其他方式 204
9.3.1 没有用户界面的行为Fragment 205
9.3.2 探索嵌套的Fragment 205
9.4 本章小结 205
9.5 小测验 205
9.6 练习题 206
9.7 参考资料和更多信息 206
第Ⅲ部分 应用设计基础 211
第10章 架构设计模式 211
10.1 应用的导航架构 211
10.1.1 Android应用导航场景 212
10.1.2 启动任务和导航回退栈 214
10.1.3 Fragment导航 215
10.1.4 屏幕之间的关系 215
10.1.5 Android导航设计模式 216
10.2 引导操作 223
10.2.1 菜单 223
10.2.2 操作栏 223
10.2.3 浮动操作按钮 227
10.2.4 来自应用上下文的操作 229
10.2.5 对话框 229
10.3 本章小结 237
10.4 小测验 237
10.5 练习题 237
10.6 参考资料和更多信息 237
第11章 使用样式 239
11.1 样式支持 239
11.2 主题和样式 240
11.2.1 定义默认应用主题 240
11.2.2 主题和样式继承 241
11.3 颜色 242
11.4 布局 243
11.4.1 合并与包含 244
11.4.2 TextInputLayout 245
11.4.3 FloatingActionButton 245
11.4.4 工具栏作为底部栏 246
11.5 应用个性化 247
11.6 运用后的效果 249
11.7 排版 250
11.8 本章小结 251
11.9 小测验 252
11.10 练习题 252
11.11 参考资料和更多信息 252
第12章 材质设计 255
12.1 理解材质 255
12.2 默认材质主题 256
12.3 SampleMaterial应用 256
12.4 实现SampleMaterial应用 257
12.4.1 依赖 257
12.4.2 材质支持样式 257
12.4.3 显示List中的数据集 257
12.5 本章小结 282
12.6 小测验 282
12.7 练习题 283
12.8 参考资料和更多信息 283
第13章 设计兼容的应用 285
13.1 最大化应用的兼容性 285
13.2 设计兼容的用户界面 287
13.2.1 使用Fragments 288
13.2.2 使用各种Android支持库API 288
13.2.3 支持特定的屏幕类型 289
13.2.4 使用九宫格可拉伸图形 289
13.3 提供替代应用资源 290
13.3.1 了解资源是如何被解析的 290
13.3.2 使用限定符组织替代资源 291
13.3.3 为不同屏幕方向提供资源 296
13.3.4 以编程方式使用替代资源 298
13.3.5 高效组织应用的资源 299
13.4 平板、电视设备 299
13.4.1 针对平板设备 300
13.4.2 针对电视设备 300
13.5 让应用兼容手表和汽车 302
13.6 使用SafetyNet保证兼容性 302
13.7 本章小结 303
13.8 小测验 304
13.9 练习题 304
13.10 参考资料和更多信息 304
第Ⅳ部分 应用开发基础 309
第14章 使用Android首选项 309
14.1 使用应用首选项 309
14.1.1 确定首选项是否合适 309
14.1.2 保存不同类型的首选项值 310
14.1.3 创建Activity私有的首选项 310
14.1.4 创建多个Activity使用的共享首选项 310
14.1.5 查找和读取首选项 311
14.1.6 添加、更新和删除首选项 311
14.1.7 监听首选项的变化 312
14.2 在文件系统中定位首选项数据 312
14.3 创建可管理的用户首选项 313
14.3.1 创建首选项资源文件 314
14.3.2 使用PreferenceActivity类 316
14.3.3 通过标头管理首选项 318
14.4 自动备份Android应用 321
14.5 本章小结 322
14.6 小测验 322
14.7 练习题 323
14.8 参考资料和更多信息 323
第15章 访问文件和目录 325
15.1 使用设备上的应用数据 325
15.2 实现良好的文件管理 326
15.3 了解Android系统中的文件权限 326
15.4 使用文件和目录 327
15.4.1 探索Android应用的目录 328
15.4.2 使用Android文件系统中的其他目录和文件 332
15.5 本章小结 335
15.6 小测验 335
15.7 练习题 335
15.8 参考资料和更多信息 336
第16章 使用SQLite保存数据 337
16.1 使用SQLite升级SampleMaterial应用 337
16.2 使用数据库 337
16.2.1 提供数据访问 339
16.2.2 更新SampleMaterialActivity类 340
16.2.3 更新SampleMaterialAdapter构造函数 341
16.2.4 在主UI线程以外执行数据库操作 342
16.2.5 在数据库中创建卡片 343
16.2.6 获取所有卡片 344
16.2.7 添加新卡片 345
16.2.8 更新卡片 346
16.2.9 删除卡片 347
16.3 本章小结 348
16.4 小测验 349
16.5 练习题 349
16.6 参考资料和更多信息 349
第17章 使用内容提供者 351
17.1 探索Android的内容提供者 351
17.1.1 使用Mediastore内容提供者 352
17.1.2 使用CallLog内容提供者 355
17.1.3 使用CalendarContract内容提供者 356
17.1.4 使用UserDictionary内容提供者 357
17.1.5 使用VoicemaillContract内容提供者 357
17.1.6 使用Settings内容提供者 357
17.1.7 介绍ContactsContract内容提供者 357
17.2 修改内容提供者数据 360
17.2.1 添加记录 360
17.2.2 更新记录 361
17.2.3 删除记录 362
17.3 使用第三方内容提供者 363
17.4 本章小结 363
17.5 小测验 364
17.6 练习 364
17.7 参考资料和更多信息 364
第V部分 应用交付基础 369
第18章 学习开发工作流 369
18.1 Android开发流程概览 369
18.2 选择正确的软件方法论 370
18.2.1 理解瀑布开发模式的危险性 370
18.2.2 理解迭代的价值 370
18.3 收集应用的需求 371
18.3.1 明确项目需求 371
18.3.2 为Android应用编写用例 373
18.3.3 结合第三方的需求和建议 374
18.3.4 维护一个设备数据库 374
18.4 评估项目风险 377
18.4.1 确定目标设备 377
18.4.2 获取目标设备 379
18.4.3 确定应用需求的可行性 379
18.4.4 理解QA的风险 380
18.5 编写重要的项目文档 381
18.5.1 为保证产品质量制定测试计划 381
18.5.2 为第三方提供需要的文档 382
18.5.3 为维护和移植提供文档 382
18.6 使用配置管理系统 382
18.6.1 选择源码管理系统 382
18.6.2 实现一个可用的应用版本系统 382
18.7 设计Android应用 383
18.7.1 理解设备的资源限制 383
18.7.2 探讨通用的Android应用架构 383
18.7.3 设计应用的可扩展性和易维护性 384
18.7.4 设计应用间的通信方式 385
18.8 开发Android应用 385
18.9 测试Android应用 386
18.10 部署Android应用 387
18.11 支持和维护Android应用 387
18.11.1 跟踪并解决用户提交的崩溃报告 388
18.11.2 测试固件升级 388
18.11.3 维护详细的应用文档 388
18.11.4 管理服务端的在线变化 388
18.11.5 识别低风险的移植机会 388
18.11.6 应用功能的选择 389
18.12 本章小结 389
18.13 小测验 389
18.14 练习题 389
18.15 参考资料和更多信息 389
第19章 规划用户体验 391
19.1 思考目标 391
19.1.1 用户目标 391
19.1.2 团队目标 392
19.1.3 其他利益相关者的目标 392
19.2 集中研发精力的一些技巧 392
19.2.1 人物角色 393
19.2.2 用户故事图谱 393
19.2.3 发现和组织实体 394
19.2.4 规划用户交互 394
19.3 传递应用标识 395
19.4 设计屏幕的布局 396
19.4.1 草稿图 396
19.4.2 线框图 397
19.4.3 综合设计图 397
19.5 正确处理视觉反馈 397
19.6 观察目标用户 398
19.6.1 应用仿真模型 398
19.6.2 测试发布版本 399
19.7 本章小结 399
19.8 小测验 399
19.9 练习题 400
19.10 参考资料和更多信息 400
第20章 交付质量可靠的应用 401
20.1 设计可靠应用的最佳实践 401
20.1.1 满足Android用户的需求 402
20.1.2 为Android设备设计用户界面 402
20.1.3 设计稳定并即时响应的Android应用 403
20.1.4 设计安全的Android应用 404
20.1.5 将应用利润最大化 405
20.1.6 遵循Android应用的质量指导方针 405
20.1.7 采用第三方质量标准 407
20.1.8 开发易于维护和升级的Android应用 407
20.1.9 利用Android的工具辅助应用的设计 409
20.2 避免在Android应用中犯低级错误 409
20.3 开发可靠Android应用的最佳实践 409
20.3.1 设计适用于Android开发的研发流程 410
20.3.2 尽早并经常测试应用的可行性 410
20.3.3 使用编码标准、审阅及单元测试来改进代码质量 410
20.3.4 处理单个设备中出现的缺陷 412
20.3.5 利用Android工具来开发 413
20.3.6 避免在Android应用开发中犯低级错误 413
20.4 本章小结 414
20.5 小测验 414
20.6 练习 414
20.7 参考资料和更多信息 414
第21章 测试应用 417
21.1 测试移动应用的最佳实践 417
21.1.1 设计移动应用的缺陷追踪系统 417
21.1.2 管理测试环境 419
21.1.3 让测试覆盖率最大化 421
21.1.4 利用Android的SDK工具来测试应用 427
21.1.5 避免Android应用测试中的一些低级错误 428
21.2 Android应用测试精要 428
21.2.1 利用JUnit进行单元测试 429
21.2.2 PasswordMatcher应用简介 430
21.2.3 确认测试的预期结果 433
21.2.4 为测试代码创建一个运行配置 433
21.2.5 编写测试代码 436
21.2.6 在Android Studio中运行你的第一个测试 438
21.2.7 分析测试结果 438
21.2.8 添加其他测试 439
21.3 更多Android自动化测试程序和API 442
21.4 本章小结 442
21.5 小测验 443
21.6 练习题 443
21.7 参考资料和更多信息 443
第22章 分发应用 445
22.1 选择正确的分发模型 445
22.1.1 保护你的知识产权 446
22.1.2 遵循Google Play的政策 446
22.1.3 向用户收费 447
22.2 为即将发布的应用打包 448
22.2.1 为打包工作准备好代码 448
22.2.2 打包应用并签名 450
22.2.3 测试用于发布的应用包 453
22.2.4 包含所有需要的资源 453
22.2.5 准备好你的服务器或者服务 453
22.2.6 发布应用 453
22.3 在Google Play中发布应用 453
22.3.1 登录Google Play 454
22.3.2 将应用上传到Google Play 457
22.3.3 上传应用营销相关的资源 458
22.3.4 配置定价和发布详情 458
22.3.5 配置额外的应用选项 459
22.3.6 管理其他开发人员控制台选项 460
22.3.7 将应用发布到Google Play 460
22.3.8 在Google Play中管理应用 461
22.4 Google Play上的阶段性展示产品 462
22.5 通过Google Play私有渠道发布应用 462
22.6 翻译应用 462
22.7 通过其他方式发布应用 463
22.8 自行发布应用 464
22.9 本章小结 465
22.10 小测验 465
22.11 练习题 465
22.12 参考资料和更多信息 466
第Ⅵ部分 附录 469
附录A 提示与技巧:Android Studio 469
附录B 快速入门指南:Android模拟器 481
附录C 快速入门指南:Android设备监视器 507
附录D 精通Android SDK工具 523
附录E 快速入门:Gradle构建系统 539
附录F 小测验答案 557