《深入剖析Android开发:小应用里的大智慧》以谷歌音乐播放器为例,全面介绍了Android平台应用程序的开发,内容主要包括框架原理、控件使用及定制化、Android四大组件的原理和定制,重点关注应用程序的开发要点。本书主线清晰,由浅入深,没有过多繁杂的例子,只以谷歌播放器为主例,详细分析各个部件的实现过程。分析过程贯穿全书,图文并茂,讲解精细,涵盖丰富的扩展知识和作者多年的开发经验。真正做到以一个例子来解析Android系统关键部件,让读者在理解的前提下,能够举一反三,进而做出非凡的应用程序。
目录
- 第一篇 Android开发起航
- 第1章 环境搭建 2
- 1.1 搭建Android开发环境的需求 2
- 1.2 Android开发环境配置 3
- 1.2.1 JDK的下载、安装及配置 3
- 1.2.2 下载并安装Eclipse 6
- 1.2.3 Android SDK的安装和配置 6
- 1.2.4 ADT的安装和配置 9
- 1.2.5 创建并运行模拟器 12
- 第2章 测试方法及工具 16
- 2.1 向世界问好——HelloWorld项目 16
- 2.1.1 两种创建HelloWorld项目的方法 16
- 2.1.2 HelloWorld项目中的默认配置解读 23
- 2.2 HelloWorld项目运行及调试信息 26
- 2.2.1 运行HelloWorld应用程序 26
- 2.2.2 HelloWorld运行过程的调试信息 29
- 2.3 DDMS工具介绍 30
- 2.3.1 DDMS工具及其打开方式 30
- 2.3.2 使用DDMS工具调测HelloWorld项目 31
- 2.3.3 详解DDMS工具界面 36
- 2.3.4 DDMS工具菜单中的重要工具 41
- 2.4 Android的主要工具介绍 62
- 2.4.1 ADB工具 63
- 2.4.2 android工具 64
- 2.4.3 sdcard相关命令 65
- 2.4.4 模拟器的操作 65
- 2.4.5 LogCat工具 67
- 2.4.6 数据库工具 68
- 2.5 Android其他小工具简介 68
- 2.5.1 截屏工具 69
- 2.5.2 Monkey工具 69
- 2.6 下载谷歌播放器源代码 72
- 第二篇 Android组件及其配置
- 第3章 应用的五脏六腑——AndroidManifest.xml 78
- 3.1 Android Manifest.xml文件 78
- 3.2 一切从<manifest>节点开始 82
- 3.2.1 xmlns:android属性——定义命名空间 82
- 3.2.2 package属性——应用程序的身份证 84
- 3.2.3 android:sharedUserId属性——共享数据 85
- 3.2.4 android:versionCode属性——内部版本号 86
- 3.2.5 android:versionName属性——显示给用户的版本号 86
- 3.2.6 android:installLocation属性——安装位置 87
- 3.2.7 HelloWorld示例——再向世界打个招呼 89
- 3.2.8 动动手,验证知识 90
- 3.3 应用程序权限的声明 93
- 3.3.1 <uses-permission>——应用程序的权限申请 93
- 3.3.2 <permission>节点——自定义应用程序的访问权限 100
- 3.3.3 <uses-sdk>节点——SDK版本限定 103
- 3.3.4 <instrumentation>节点——应用的监控器 105
- 3.3.5 动动手,验证知识 107
- 3.3.6 <instrumentation>节点的另一种使用方法 114
- 3.4 应用程序的根节点——<application> 117
- 3.4.1 <application>节点配置 117
- 3.4.2 音乐播放器的<application>节点 118
- 3.4.3 如何实现Application类 119
- 3.4.4 Application提供的函数及其用法 123
- 3.5 backupAgent的用法 134
- 3.5.1 backupAgent简介 134
- 3.5.2 如何使用backupAgent来实现备份 134
- 3.5.3 从备份中实现恢复 141
- 3.5.4 如何使用bmgr工具 144
- 3.6 <application>的属性详解 150
- 3.6.1 android:allowBackup 151
- 3.6.2 allowTaskReparenting 152
- 3.6.3 android:killAfterRestore 152
- 3.6.4 android:restoreAnyVersion 153
- 3.6.5 android:debuggable 156
- 3.6.6 android:description 158
- 3.6.7 android:enabled 159
- 3.6.8 android:hasCode 160
- 3.6.9 android:hardwareAccele-rated 161
- 3.6.10 android: label / android:icon 162
- 3.6.11 android:logo 164
- 3.6.12 android:manageSpace-Activity 165
- 3.6.13 android:permission 165
- 3.6.14 android:persistent 165
- 3.6.15 android:process 166
- 3.6.16 android:taskAffinity 167
- 3.6.17 android:theme 168
- 3.6.18 android:uiOptions 171
- 3.6.19 android:vmSafeMode 174
- 3.6.20 android:largeHeap 174
- 第4章 让程序活动起来——Activity 176
- 4.1 什么是Activity 176
- 4.1.1 简介 176
- 4.1.2 解读音乐播放器中的Activity 177
- 4.2 定义Activity 179
- 4.2.1 定义Activity的回调方法 179
- 4.2.2 在AndroidManifest.xml中声明Activity 181
- 4.3 管理Activity的生命周期 182
- 4.3.1 Activity的3种状态 182
- 4.3.2 实现Activity的生命周期回调 182
- 4.3.3 回调方法在音乐播放器中的应用 186
- 4.4 保存和协调Activity 189
- 4.4.1 保存Activity状态 189
- 4.4.2 协调Activity 191
- 4.5 解读关于生命周期的一个实例 192
- 4.6 <activity>节点的属性 195
- 4.6.1 android:allowTaskRepa-renting 195
- 4.6.2 android:alwaysRetain-TaskState 195
- 4.6.3 android:clearTaskOn-Launch 196
- 4.6.4 android:configChanges 196
- 4.6.5 android:enabled 197
- 4.6.6 android:excludeFrom-Recents 197
- 4.6.7 android:exported 197
- 4.6.8 android:finishOnTask-Launch 197
- 4.6.9 android:hardwareAccele-rated 198
- 4.6.10 android:icon 198
- 4.6.11 android:label 198
- 4.6.12 android:launchMode 198
- 4.6.13 android:multiprocess 199
- 4.6.14 android:name 199
- 4.6.15 android:noHistory 199
- 4.6.16 android:permission 200
- 4.6.17 android:process 200
- 4.6.18 android:screenOrienta-tion 200
- 4.6.19 android:stateNotNeeded 200
- 4.6.20 android:taskAffinity 201
- 4.6.21 android:theme 201
- 4.6.22 android:windowSoft-InputMode 201
- 第5章 我会默默地为你服务——service 202
- 5.1 服务 202
- 5.1.1 何为服务 202
- 5.1.2 服务可采用的方法 202
- 5.1.3 <service>节点的属性 203
- 5.2 创建并使用服务 204
- 5.2.1 创建Service子类的重要回调方法 204
- 5.2.2 在manifest文件中声明服务 205
- 5.3 创建一个启动的服务 206
- 5.3.1 继承IntentService类 206
- 5.3.2 继承Service类 207
- 5.3.3 启动服务 208
- 5.3.4 停止服务 208
- 5.3.5 TuringService实例 209
- 5.4 创建一个被绑定的服务 212
- 5.4.1 基本介绍 212
- 5.4.2 TuringBoundService实例 213
- 第6章 我可以更漂亮——布局 217
- 6.1 最简单的布局类——FrameLayout 217
- 6.1.1 FrameLayout简介 217
- 6.1.2 FrameLayout特有的属性 218
- 6.1.3 FrameLayout内子视图的特色布局参数 220
- 6.2 线性布局——LinearLayout 222
- 6.2.1 LinearLayout简介 222
- 6.2.2 LinearLayout的特有属性 225
- 6.2.3 LinearLayout特有的布局参数 231
- 6.3 相对布局——RelativeLayout 231
- 6.3.1 RelativeLayout简介 231
- 6.3.2 RelativeLayout的特色属性及其参数 233
- 第三篇 核心服务解析篇
- 第7章 Android系统的启动 244
- 7.1 初始化流程 244
- 7.1.1 应用的初始化流程 244
- 7.1.2 init.rc的用法 246
- 7.1.3 用init解析整个init.rc文件 251
- 7.2 创建system_service进程 254
- 7.2.1 创建流程 254
- 7.2.2 system_service简介 256
- 第8章 备份管理服务 258
- 8.1 备份管理服务的启动方式和流程 258
- 8.1.1 备份管理服务的启动 258
- 8.1.2 详解备份管理服务的流程 258
- 8.2 使用备份管理服务 263
- 8.2.1 bmgr工具简介 263
- 8.2.2 使用bmgr工具实现备份与恢复 264
- 8.2.3 用编程的方式实现备份与恢复 272
- 8.3 应用程序在被重新安装过程中的备份和还原 274
- 第9章 Activity管理服务 276
- 9.1 ActivityManagerService简介 276
- 9.2 ActivityManagerService的使用 276
- 9.2.1 孵化进程 276
- 9.2.2 ActivityManagerService启动的3个阶段 277
- 9.2.3 ActivityManagerService的工作原理 289
- 9.2.4 ActivityManagerService依赖的两个类 294
- 9.3 Activity的启动流程 295
- 9.3.1 启动Activity的方式 295
- 9.3.2 Activity启动的4个阶段 297
- 9.4 结束Activity 306
- 9.4.1 结束Activity的3种主要方法 306
- 9.4.2 结束Activity的4个阶段 308
- 9.5 广播接收器 315
- 9.5.1 注册广播接收器 315
- 9.5.2 ActivityManagerService的行为 316
- 9.6 服务 318
- 9.6.1 服务的数据结构 318
- 9.6.2 启动服务 320
- 9.6.3 停止服务 327
- 9.6.4 以绑定的方式启动/停止服务 331
- 9.7 发布ContentProvider 339
- 9.7.1 启动ContentProvider发布工作时的操作 339
- 9.7.2 解读发布流程中Activity-ManagerService的行为 342
- 9.8 ActivityManagerService如何应付异常 345
- 第10章 包管理服务 349
- 10.1 PackageManagerService概述 349
- 10.2 PackageManagerService的组成和应用 349
- 10.2.1 PackageManagerService的重要组成部分 350
- 10.2.2 解读PackageManager-Service如何关注目录 351
- 10.2.3 PackageManagerService定义的PackageParser类 354
- 10.3 启动PackageManagerService 355
- 10.3.1 PackageManagerService的启动流程 355
- 10.3.2 PackageManagerService构造函数的流程 356
- 10.3.3 scanDirLI()方法 361
- 10.4 解析AndroidManifest.xml文件 366
- 10.4.1 解析流程 366
- 10.4.2 解析音乐播放器的AndroidManifest.xml文件 368
- 10.5 安装应用程序 377
- 10.5.1 用ADB的install命令安装应用程序 377
- 10.5.2 解析installPackageWith-Verification()的行为 379
- 10.6 卸载应用程序 383