本书涵盖了android开发从概念、技术到市场推广应用的全部话题,内容包括:android概览、android应用程序设计精髓、android用户界面设计精髓、常用android api、更多android应用程序设计原则、对外发布你的android应用程序和附录等7个部分。附录还包含了android开发常用工具(如模拟器、ddms、调试桥和sqlite等)的使用指南。    本书不仅适合android应用程序开发人员阅读,还能为qa测试人员提供指导。另外本书还可以帮助项目经理更好地管理项目进程和项目团队,帮助市场推广人员更好地把握市场、创造令人瞩目的销售业绩。 [图书目录] 第一部分 android概览 第1章 android简介 2 1.1 移动软件开发简史 2 1.1.1 遥想当年 2 1.1.2 “砖头” 3 1.1.3 无线应用协议(wap) 4 1.1.4 商用移动平台 6 1.2 开放手机联盟(oha) 8 1.2.1 无线google 8 1.2.2 开放手机联盟成立 8 1.2.3 制造商:设计android手机 9 1.2.4 内容提供商:开发android应用程序 9 1.2.5 移动操作系统: 传播android体验 9 1.2.6 充分发挥android的优势 10 1.3 android平台的不同之处 10 1.3.1 android:下一代平台 10 1.3.2 免费开放源代码 11 1.3.3 熟悉和廉价的开发工具 11 1.3.4 合理的开发人员学习曲线 12 1.3.5 强大的应用程序开发支持 12 .1.3.6 丰富、安全的应用集成 12 1.3.7 无障碍发布 13 1.3.8 为应用程序提供的“自由市场” 13 1.3.9 新生并逐渐成长的平台 14 1.4 android平台 14 1.4.1 android的基本体系结构 14 1.4.2 安全与许可权限 16 1.4.3 开发android应用程序 17 小结 18 参考资料和更多信息 19 第2章 你的android开发环境 20 2.1 配置你的开发环境 20 2.1.1 支持的操作系统 20 2.1.2 安装java开发包(jdk) 20 2.1.3 安装eclipse开发环境 21 2.1.4 其他开发环境 22 2.1.5 安装android软件开发包(sdk) 22 2.1.6 安装与配置android eclipse插件(adt) 23 2.1.7 adt安装释疑 25 2.1.8 升级android sdk 25 2.1.9 android sdk的问题 25 2.1.10 配置android编译硬件 26 2.1.11 配置操作系统以适应设备编译 26 2.1.12 本书使用的开发环境 27 2.2 探索android sdk 27 2.2.1 android sdk许可协议 27 2.2.2 android sdk文档 28 2.2.3 android应用程序框架 29 2.2.4 android工具 30 2.2.5 android示例应用程序 33 小结 34 参考资料和更多信息 34 第3章 编写第一个android应用程序 35 3.1 测试你的开发环境 35 3.1.1 在eclipse工程中导入snake应用程序 35 3.1.2 为snake工程创建android虚拟设备(avd) 37 3.1.3 为snake工程创建运行配置参数 37 3.1.4 在android模拟器中运行snake应用程序 39 3.2 构建你的第一个android应用程序 39 3.2.1 创建和配置新的android工程 40 3.2.2 android应用程序的核心文件和目录 40 3.2.3 为新工程创建android虚拟设备 41 3.2.4 为工程配置运行参数 41 3.2.5 在模拟器中运行android应用程序 42 3.2.6 在模拟器中调试android应用程序 43 3.2.7 为android应用程序添加日志记录 45 3.2.8 为应用程序添加媒体支持 46 3.2.9 为应用程序添加基于位置的服务(lbs) 48 3.2.10 在硬件上调试应用程序 50 小结 51 参考资料和更多信息 51 第二部分 android应用程序设计精髓 第4章 剖析android应用程序 54 4.1 android应用程序的生存周期 54 4.1.1 使用activity执行应用程序任务 54 4.1.2 使用intent在不同activity之间实现跳转 55 4.1.3 android activity的生存周期 58 4.2 使用android manifest文件定义应用程序 62 4.2.1 管理你的应用程序身份 65 4.2.2 注册activity和其他应用程序组件 65 4.2.3 使用许可权限 67 4.2.4 指定应用程序所需输入设备和软件 69 4.2.5 使用库和android sdk版本 70 4.2.6 在manifest文件中定义应用程序的其他配置参数 71 小结 71 第5章 管理应用程序资源 72 5.1 什么是资源 72 5.1.1 应用程序资源的存储方式和位置 72 5.1.2 资源目录的层级结构 72 5.1.3 资源的类型 73 5.1.4 存储不同的资源类型 74 5.1.5 使用程序访问资源 75 5.2 实例:使用eclipse设置简单资源 75 5.3 使用资源 78 5.3.1 使用string(字符串)资源 79 5.3.2 使用格式化的string资源 80 5.3.3 使用string数组 81 5.3.4 使用颜色 82 5.3.5 使用尺寸 82 5.3.6 使用简单drawable资源 83 5.3.7 使用图像 84 5.3.8 使用动画 88 5.3.9 使用菜单 89 5.3.10 使用xml文件 90 5.3.11 使用原始文件 91 5.3.12 资源引用 92 5.3.13 使用布局(layout) 93 5.3.14 使用样式(style) 97 5.3.15 使用主题(theme) 100 5.4 引用系统资源 100 5.5 管理各种应用程序配置 101 5.5.1 为本地化和设备配置指定资源 102 5.5.2 在程序中使用适当的配置资源 104 5.5.3 高效地组织应用程序资源 106 小结 107 参考资料和更多信息 108 第三部分 android用户界面设计精髓 第6章 探索用户界面屏幕元素 110 6.1 android视图、widget和布局简介 110 6.1.1 android视图简介 110 6.1.2 android widget简介 110 6.1.3 android布局简介 111 6.2 使用textview显示文本 111 6.2.1 配置布局和尺寸 112 6.2.2 在文本中创建上下文链接 113 6.3 使用edittext和spinner获取用户文本 114 6.3.1 使用自动补全辅助用户 116 6.3.2 使用输入过滤器约束用户输入 118 6.3.3 使用spinner widget的下拉列表约束用户输入 119 6.4 使用按钮、多选框和单选组 121 6.4.1 使用基本按钮 122 6.4.2 使用多选框和toggle按钮 123 6.4.3 使用radiogroup和radiobutton 124 6.5 获取用户输入的日期和时间 126 6.6 向用户显示信息 127 6.6.1 使用progressbar指示进度 128 6.6.2 使用seekbar指示和调整进度 130 6.6.3 使用ratingbar指示和调整评分 130 6.6.4 使用chronometer指示时间推移 131 6.6.5 使用analogclock和digitalclock指示当前时间 133 6.7 为用户提供选项和上下文菜单 133 6.7.1 使用选项菜单 133 6.7.2 使用contextmenu(上下文菜单) 136 6.8 掌控用户事件 137 6.8.1 监听触摸模式状态改变 138 6.8.2 监听全屏幕上的事件 138 6.8.3 监听长时单击 139 6.8.4 监听手势 140 6.8.5 监听焦点改变 142 6.8.6 监听屏幕旋转 143 6.9 使用样式 143 6.10 使用主题 146 小结 147 第7章 使用布局设计android用户界面 149 7.1 创建android用户界面 149 7.1.1 使用xml资源创建布局 149 7.1.2 使用代码创建布局 150 7.2 使用viewgroup组织用户界面 152 7.3 使用内建的布局类 156 7.3.1 使用absolutelayout 158 7.3.2 使用framelayout 159 7.3.3 使用linearlayout 161 7.3.4 使用relativelayout 162 7.3.5 使用tablelayout 165 7.3.6 在屏幕上使用多布局 167 7.4 使用内建的view容器类 167 7.4.1 结合adapterview使用数据驱动view容器 168 7.4.2 使用tabactivity和tabhost组织视图 171 7.4.3 探索其他视图容器 173 7.5 使用appwidget显示应用程序视图 175 7.6 成为appwidget提供者 176 小结 177 第8章 android绘图与动画 178 8.1 屏幕绘图 178 8.2 使用文字 182 8.2.1 使用默认字体 182 8.2.2 使用自定义字体 183 8.2.3 测量文字所需的屏幕尺寸 184 8.3 使用位图 184 8.3.1 在画布上绘制位图 185 8.3.2 缩放位图 185 8.3.3 使用matrix变换位图 186 8.4 使用图形 186 8.4.1 用xml资源定义图形 187 8.4.2 使用程序定义图形 187 8.4.3 绘制各种图形 188 8.5 使用动画 193 8.5.1 使用逐帧动画 194 8.5.2 使用补间动画 195 小结 200 第四部分 常用android api 第9章 使用android数据和存储api 202 9.1 使用应用程序首选项 202 9.1.1 创建私有和共享首选项 203 9.1.2 搜索和读取首选项 203 9.1.3 新增、修改和删除首选项 204 9.1.4 使用android文件系统查找首选项数据 204 9.2 使用文件和目录 205 9.2.1 探索android应用程序目录 206 9.2.2 在默认应用程序目录中创建和写入文件 206 9.2.3 在默认应用程序目录中读取文件内容 207 9.2.4 使用android文件系统操作其他目录和文件 208 9.3 使用sqlite数据库存储结构化数据 209 9.3.1 创建sqlite数据库 210 9.3.2 创建、修改和删除数据库记录 212 9.3.3 在sqlite数据库中执行查询 215 9.3.4 关闭和删除sqlite数据库 220 9.3.5 设计持久数据库 220 9.3.6 向应用程序界面绑定数据 223 9.4 使用content provider在应用程序间共享数据 227 9.4.1 为访问图像调整content provider 227 9.4.2 探索android的部分内建content provider 232 9.4.3 在content provider中修改数据 239 9.5 使用自定义content provider扩展你的android应用程序 241 9.5.1 继承content provider 241 9.5.2 定义数据uri 242 9.5.3 定义数据列 242 9.5.4 实现query()、insert()、update()、delete()和gettype() 243 9.5.5 更新manifest文件 248 9.6 使用live folder 249 小结 251 参考资料和更多信息 252 第10章 使用android网络api 253 10.1 访问因特网(http) 253 10.1.1 从web读取数据 253 10.1.2 使用httpurlconnection 254 10.1.3 解析从网络获取的xml 255 10.1.4 使用线程访问网络 257 10.1.5 显示从网络资源获取的图像 260 10.1.6 获取android网络状态 262 10.2 使用webview浏览web 263 小结 265 参考资料和更多信息 266 第11章 使用位置服务(lbs)api 267 11.1 使用全球定位服务(gps) 267 11.1.1 查找你的位置 267 11.1.2 定位你的模拟器 269 11.2 位置地理编码 269 11.3 在地图上标注位置 272 11.3.1 地图标注内容 272 11.3.2 地图标注视图 272 11.3.3 获得调试api key 274 11.3.4 拖曳地图视图 275 11.3.5 缩放地图视图 276 11.3.6 标记点 277 11.4 位置服务扩展应用 281 小结 282 参考资料和更多信息 282 第12章 使用android多媒体api 283 12.1 操作静态图像 283 12.1.1 使用摄像头捕捉静态图像 283 12.1.2 分享图像 287 12.1.3 将图像指定为墙纸 288 12.2 使用视频 289 12.2.1 录制视频 289 12.2.2 播放视频 290 12.3 使用音频 291 12.3.1 录制音频 291 12.3.2 播放音频 293 12.3.3 共享音频 294 12.3.4 使用铃音 294 小结 295 第13章 使用android电话api 296 13.1 使用电话功能包 296 13.1.1 为获取手机状态信息取得许可权限 296 13.1.2 请求获取通话状态 297 13.1.3 请求获取服务信息 299 13.1.4 使用电话号码 299 13.2 使用短消息 300 13.2.1 获得发送和接收短消息的许可权限 301 13.2.2 发送短消息 301 13.2.3 接收短消息 303 13.3 拨打电话 305 小结 307 参考资料和更多信息 307 第14章 通过opengl es使用android 3d图形 308 14.1 定义opengl es 308 14.2 使用基于opengl es的android 3d应用程序 309 14.2.1 创建surfaceview 309 14.2.2 启动opengl es线程 311 14.2.3 初始化egl 312 14.2.4 初始化gl 314 14.2.5 绘制 315 14.3 绘制3d物体 316 14.3.1 绘制顶点(vertices) 316 14.3.2 为顶点着色 317 14.3.3 绘制更多复杂物体 318 14.3.4 照亮你的场景 320 14.3.5 为对象赋予材质 321 14.4 同android视图和事件进行交互 323 14.4.1 允许opengl线程向应用程序线程发送信息 324 14.4.2 允许应用程序线程向opengl线程发送信息 325 14.5 清理opengl es 326 14.6 使用glsurfaceview类 327 小结 330 参考资料和更多信息 330 第15章 使用android可选硬件api 331 15.1 使用设备传感器 331 15.2 使用wi-fi 334 15.3 监视电池 337 小结 339 第五部分 更多android应用程序设计原则 第16章 使用通知 342 16.1 使用状态栏发布通知 342 16.2 让手机震动 345 16.3 灯光闪烁 346 16.4 发出声响 347 16.5 自定义通知 348 小结 350 第17章 使用服务 351 17.1 创建服务 351 17.2 控制服务 355 17.3 实现远程接口 356 17.4 实现可包装(parcelable)类 358 小结 360 第六部分 对外发布你的android应用程序 第18章 移动软件开发过程 364 18.1 移动开发过程概览 364 18.2 选择一种软件开发方法 364 18.2.1 理解“瀑布模型”的危险 365 18.2.2 认识迭代式开发的价值 365 18.3 整合应用程序需求 366 18.3.1 确定工程需求 366 18.3.2 为移动应用程序开发用例 367 18.3.3 吸纳第三方需求 367 18.3.4 管理手机设备数据库 368 18.4 项目风险评估 370 18.4.1 确定目标手机 370 18.4.2 获取目标手机 371 18.4.3 确定应用程序需求的可行性 372 18.4.4 理解质量保障的风险 372 18.5 编写基本项目文档 373 18.5.1 为质量保障制定测试计划 374 18.5.2 提供第三方所需的文档 374 18.5.3 提供维护和移植所需的文档 374 18.6 实现移动应用程序配置管理系统 374 18.6.1 选择一个源代码控制系统 374 18.6.2 实现一个可用的版本管理系统 375 18.7 设计移动应用程序 375 18.7.1 认识移动设备的局限 375 18.7.2 移动应用程序体系结构探索 376 18.7.3 可扩展和维护设计 376 18.7.4 应用程序交互设计 377 18.8 开发移动应用程序 377 18.9 测试移动应用程序 378 18.10 发布移动应用程序 378 18.10.1 确定目标市场 379 18.10.2 将市场需求引入应用程序需求 379 18.11 支持和维护移动应用程序 379 18.11.1 维护适当的应用程序文档 379 18.11.2 管理服务器的动态更改 379 18.11.3 确定低风险移植机会 380 小结 380 参考资料和更多信息 380 第19章 开发和测试“防弹”android应用程序 381 19.1 “防弹”移动应用程序设计最佳实践 381 19.1.1 满足移动用户的需求 382 19.1.2 为移动设备设计用户界面 382 19.1.3 设计稳定、灵敏的移动应用程序 384 19.1.4 设计安全的移动应用程序 385 19.1.5 在设计移动应用程序时考虑利益的最大化 385 19.1.6 在android应用程序设计时使用第三方标准 386 19.1.7 设计便于维护和升级的移动应用程序 386 19.1.8 在应用程序设计中使用andriod工具 388 19.1.9 避免设计时的愚蠢错误 388 19.2 “防弹”移动应用程序开发最佳实践 388 19.2.1 设计有效的移动开发过程 389 19.2.2 提早和经常地测试应用程序可行性 389 19.2.3 使用代码标准、代码检查和单元测试以提高代码质量 389 19.2.4 处理某单一手机的缺陷 391 19.2.5 在应用程序开发中使用android工具 392 19.2.6 避免开发时的愚蠢错误 392 19.3 移动应用程序测试最佳实践 392 19.3.1 设计一个应用程序漏洞跟踪系统 392 19.3.2 管理测试环境 393 19.4 确定设备的“洁净”初始状态 394 19.4.1 模仿现实世界的活动 395 19.4.2 尽量全面地进行测试 395 19.4.3 在应用程序测试中使用android工具 400 19.4.4 避免测试时的愚蠢错误 401 19.4.5 外包测试的责任 401 小结 401 参考资料和更多信息 401 第20章 销售你的android应用程序 402 20.1 为发布而打包你的应用程序 402 20.1.1 准备封装你的代码 402 20.1.2 准备你的软件包 403 20.1.3 测试软件包的发布版本 406 20.1.4 认证你的android应用程序 406 20.2 赚钱 406 20.2.1 在android market上销售你的应用程序 406 20.2.2 在自己的服务器上销售你的应用程序 411 20.2.3 销售应用程序的其他途径 412 20.2.4 保护你的知识产权 413 20.2.5 让用户付费 413 小结 414 参考资料和更多信息 414 第七部分 附录 附录a android模拟器快速入门 416 a.1 玩转默认模拟器 416 a.2 使用android虚拟设备管理模拟器配置 418 a.3 列表显示android目标操作系统 418 a.3.1 创建avd 419 a.3.2 列表显示所有已知的avd 424 a.3.3 删除avd 424 a.3.4 使用其他的avd命令 425 a.4 使用启动选项控制模拟器行为 425 a.4.1 以命令行的方式配置模拟器启动选项 426 a.4.2 使用eclipse配置模拟器启动选项 426 a.5 配置模拟器的位置信息 427 a.6 在两个模拟器实例之间拨打电话 427 a.7 在两个模拟器实例之间发送消息 429 a.8 通过控制台与模拟器交互 429 a.8.1 使用控制台模拟来电 429 a.8.2 使用控制台模拟短消息 429 a.8.3 使用控制台发送gps坐标 430 a.8.4 使用控制台监视网络状态 431 a.8.5 使用控制台操作电源设置 431 a.8.6 使用其他控制台命令 432 a.9 享受模拟器 432 a.10 认识模拟器的局限 433 附录b android ddms快速入门 434 b.1 独立或结合eclipse使用ddms 434 b.2 熟悉ddms的关键特性 436 b.3 使用进程 436 b.3.1 向android应用程序关联调试器 437 b.3.2 监视android应用程序的线程活动 437 b.3.3 在android应用程序中触发垃圾回收(gc) 438 b.3.4 监视android应用程序的堆活动 438 b.3.5 终止android进程 438 b.4 使用文件浏览器 439 b.4.1 从模拟器或设备上拷贝文件 440 b.4.2 向模拟器或设备拷贝文件 440 b.4.3 删除模拟器或设备上的文件 440 b.5 使用模拟器控制 441 b.5.1 模拟语音来电 441 b.5.2 模拟短消息接收 441 b.5.3 发送位置坐标 442 b.6 使用应用程序日志 442 b.7 在模拟器或目标设备上截屏 443 附录c android调试桥快速入门 445 c.1 列表显示连接到计算机的设备和模拟器 445 c.2 针对特定设备使用adb命令 446 c.3 启动和停止adb服务进程 446 c.3.1 停止adb服务进程 446 c.3.2 启动和检测adb服务进程 446 c.4 使用adb从/向android应用程序拷贝文件 446 c.4.1 向设备发送文件 447 c.4.2 从设备提取文件 447 c.5 使用adb安装和卸载android应用程序 447 c.5.1 使用adb安装应用程序 447 c.5.2 使用adb重装应用程序 448 c.5.3 使用adb卸载应用程序 448 c.6 使用logcat记录日志 448 c.6.1 显示所有的日志信息 448 c.6.2 更改日志记录模式以包含日期和时间信息 449 c.6.3 过滤日志信息 449 c.6.4 清除日志 450 c.6.5 将日志输出重定向至一个文件 450 c.6.6 访问次级日志 450 c.7 生成bug报告 451 c.8 发布shell命令 451 c.8.1 发布单条shell命令 451 c.8.2 启动和使用一个shell会话 451 c.8.3 使用adb shell启动和终止模拟器 452 c.8.4 使用adb shell查看sqlite数据库 452 c.8.5 在adb shell中使用monkey进行应用程序压力测试 452 c.8.6 通过shell安装和使用自定义二进制文件 455 c.9 其他adb命令探索 456 附录d sqlite快速入门 457 d.1 探索sqlite的常见任务 457 d.2 使用sqlite3命令行接口 457 d.2.1 启动sqlite3命令行接口并连接数据库 458 d.2.2 探索你的数据库 458 d.2.3 导入和导出数据库 460 d.2.4 在命令行中执行sql命令 461 d.2.5 窥视sqlite内部 462 d.2.6 使用其他的sqlite3命令 462 d.2.7 认识sqlite的局限 462 d.3 通过实例理解sqlite:学生成绩数据库 463 d.3.1 设计学生成绩数据库的模式 463 d.3.2 结合autoincrement创建简单表 464 d.3.3 向表中插入数据 464 d.3.4 使用select查询表数据 465 d.3.5 创建具有外键和复合主键的表 466 d.3.6 修改和更新表数据 467 d.3.7 使用join进行多表查询 467 d.3.8 使用计算列 468 d.3.9 对计算列使用子查询 469 d.3.10 删除表 470 本书共分17章,主要内容如下。讲解了Android系统架构,让读者对Android系统有一个整体认识;介绍了Android开发环境搭建和Android应用程序的基本结构;通过简单实例,让读者对Android应用开发有一个全面的认知;讲解了Android UI知识,包括Android中常见控件和创建自定义控件;介绍了Android中重要的一个组件Activity(活动),并对碎片进行了全面讲解;介绍了Android中Service(服务)组件及此组件的生命周期和跨进程通信;介绍了Android的Broadcast(广播接收器)组件,帮助读者掌握接收和发送广播的方式及工作原理;讲解了Android中的本地数据存储技术;介绍了Android的ContentProvider(内容提供器)组件;介绍了Android提供的二维绘制特性,包括使用Canvas和Paint在屏幕上进行图形和文本的绘制;介绍了Android多媒体开发的知识;讲解了Android的特色开发技术,包括Camera、地图、GPS、传感器、录音、WiFi设备等;讲解了在Android应用程序中使用OpenGL ES的几种不同的方法,以及对2D物体的绘制、着色和3D图形的绘制和纹理贴图;介绍了Android NDK和Android网络编程,以及Android底层架构,如Android进程间通信机制Binder原理,并通过实例让读者能够真正体会Native Service的魅力;本书通过讲解一个完整项目的开发,帮助读者把所学的知识串起来,达到学以致用的目的,并教会读者如何打包App和上架等。, 本书的内容通俗易懂、由浅入深,既适合初学者,又适合Android程序员,也可以作为大专院校相关专业师生和培训学校的教学用书。 传播android体验 9 1.2.6 充分发挥android的优势 10 1.3 android平台的不同之处 10 1.3.1 android:下一代平台 10 1.3.2 免费开放源代码 11 1.3.3 熟悉和廉价的开发工具 11 1.3.4 合理的开发人员学习曲线 12 1.3.5 强大的应用程序开发支持 12 .1.3.6 丰富、安全的应用集成 12 1.3.7 无障碍发布 13 1.3.8 为应用程序提供的“自由市场” 13 1.3.9 新生并逐渐成长的平台 14 1.4 android平台 14 1.4.1 android的基本体系结构 14 1.4.2 安全与许可权限 16 1.4.3 开发android应用程序 17 小结 18 参考资料和更多信息 19 第2章 你的android开发环境 20 2.1 配置你的开发环境 20 2.1.1 支持的操作系统 20 2.1.2 安装java开发包(jdk) 20 2.1.3 安装eclipse开发环境 21 2.1.4 其他开发环境 22 2.1.5 安装android软件开发包(sdk) 22 2.1.6 安装与配置android eclipse插件(adt) 23 2.1.7 adt安装释疑 25 2.1.8 升级android sdk 25 2.1.9 android sdk的问题 25 2.1.10 配置android编译硬件 26 2.1.11 配置操作系统以适应设备编译 26 2.1.12 本书使用的开发环境 27 2.2 探索android sdk 27 2.2.1 android sdk许可协议 27 2.2.2 android sdk文档 28 2.2.3 android应用程序框架 29 2.2.4 android工具 30 2.2.5 android示例应用程序 33 小结 34 参考资料和更多信息 34 第3章 编写第一个android应用程序 35 3.1 测试你的开发环境 35 3.1.1 在eclipse工程中导入snake应用程序 35 3.1.2 为snake工程创建android虚拟设备(avd) 37 3.1.3 为snake工程创建运行配置参数 37 3.1.4 在android模拟器中运行snake应用程序 39 3.2 构建你的第一个android应用程序 39 3.2.1 创建和配置新的android工程 40 3.2.2 android应用程序的核心文件和目录 40 3.2.3 为新工程创建android虚拟设备 41 3.2.4 为工程配置运行参数 41 3.2.5 在模拟器中运行android应用程序 42 3.2.6 在模拟器中调试android应用程序 43 3.2.7 为android应用程序添加日志记录 45 3.2.8 为应用程序添加媒体支持 46 3.2.9 为应用程序添加基于位置的服务(lbs) 48 3.2.10 在硬件上调试应用程序 50 小结 51 参考资料和更多信息 51 第二部分 android应用程序设计精髓 第4章 剖析android应用程序 54 4.1 android应用程序的生存周期 54 4.1.1 使用activity执行应用程序任务 54 4.1.2 使用intent在不同activity之间实现跳转 55 4.1.3 android activity的生存周期 58 4.2 使用android manifest文件定义应用程序 62 4.2.1 管理你的应用程序身份 65 4.2.2 注册activity和其他应用程序组件 65 4.2.3 使用许可权限 67 4.2.4 指定应用程序所需输入设备和软件 69 4.2.5 使用库和android sdk版本 70 4.2.6 在manifest文件中定义应用程序的其他配置参数 71 小结 71 第5章 管理应用程序资源 72 5.1 什么是资源 72 5.1.1 应用程序资源的存储方式和位置 72 5.1.2 资源目录的层级结构 72 5.1.3 资源的类型 73 5.1.4 存储不同的资源类型 74 5.1.5 使用程序访问资源 75 5.2 实例:使用eclipse设置简单资源 75 5.3 使用资源 78 5.3.1 使用string(字符串)资源 79 5.3.2 使用格式化的string资源 80 5.3.3 使用string数组 81 5.3.4 使用颜色 82 5.3.5 使用尺寸 82 5.3.6 使用简单drawable资源 83 5.3.7 使用图像 84 5.3.8 使用动画 88 5.3.9 使用菜单 89 5.3.10 使用xml文件 90 5.3.11 使用原始文件 91 5.3.12 资源引用 92 5.3.13 使用布局(layout) 93 5.3.14 使用样式(style) 97 5.3.15 使用主题(theme) 100 5.4 引用系统资源 100 5.5 管理各种应用程序配置 101 5.5.1 为本地化和设备配置指定资源 102 5.5.2 在程序中使用适当的配置资源 104 5.5.3 高效地组织应用程序资源 106 小结 107 参考资料和更多信息 108 第三部分 android用户界面设计精髓 第6章 探索用户界面屏幕元素 110 6.1 android视图、widget和布局简介 110 6.1.1 android视图简介 110 6.1.2 android widget简介 110 6.1.3 android布局简介 111 6.2 使用textview显示文本 111 6.2.1 配置布局和尺寸 112 6.2.2 在文本中创建上下文链接 113 6.3 使用edittext和spinner获取用户文本 114 6.3.1 使用自动补全辅助用户 116 6.3.2 使用输入过滤器约束用户输入 118 6.3.3 使用spinner widget的下拉列表约束用户输入 119 6.4 使用按钮、多选框和单选组 121 6.4.1 使用基本按钮 122 6.4.2 使用多选框和toggle按钮 123 6.4.3 使用radiogroup和radiobutton 124 6.5 获取用户输入的日期和时间 126 6.6 向用户显示信息 127 6.6.1 使用progressbar指示进度 128 6.6.2 使用seekbar指示和调整进度 130 6.6.3 使用ratingbar指示和调整评分 130 6.6.4 使用chronometer指示时间推移 131 6.6.5 使用analogclock和digitalclock指示当前时间 133 6.7 为用户提供选项和上下文菜单 133 6.7.1 使用选项菜单 133 6.7.2 使用contextmenu(上下文菜单) 136 6.8 掌控用户事件 137 6.8.1 监听触摸模式状态改变 138 6.8.2 监听全屏幕上的事件 138 6.8.3 监听长时单击 139 6.8.4 监听手势 140 6.8.5 监听焦点改变 142 6.8.6 监听屏幕旋转 143 6.9 使用样式 143 6.10 使用主题 146 小结 147 第7章 使用布局设计android用户界面 149 7.1 创建android用户界面 149 7.1.1 使用xml资源创建布局 149 7.1.2 使用代码创建布局 150 7.2 使用viewgroup组织用户界面 152 7.3 使用内建的布局类 156 7.3.1 使用absolutelayout 158 7.3.2 使用framelayout 159 7.3.3 使用linearlayout 161 7.3.4 使用relativelayout 162 7.3.5 使用tablelayout 165 7.3.6 在屏幕上使用多布局 167 7.4 使用内建的view容器类 167 7.4.1 结合adapterview使用数据驱动view容器 168 7.4.2 使用tabactivity和tabhost组织视图 171 7.4.3 探索其他视图容器 173 7.5 使用appwidget显示应用程序视图 175 7.6 成为appwidget提供者 176 小结 177 第8章 android绘图与动画 178 8.1 屏幕绘图 178 8.2 使用文字 182 8.2.1 使用默认字体 182 8.2.2 使用自定义字体 183 8.2.3 测量文字所需的屏幕尺寸 184 8.3 使用位图 184 8.3.1 在画布上绘制位图 185 8.3.2 缩放位图 185 8.3.3 使用matrix变换位图 186 8.4 使用图形 186 8.4.1 用xml资源定义图形 187 8.4.2 使用程序定义图形 187 8.4.3 绘制各种图形 188 8.5 使用动画 193 8.5.1 使用逐帧动画 194 8.5.2 使用补间动画 195 小结 200 第四部分 常用android api 第9章 使用android数据和存储api 202 9.1 使用应用程序首选项 202 9.1.1 创建私有和共享首选项 203 9.1.2 搜索和读取首选项 203 9.1.3 新增、修改和删除首选项 204 9.1.4 使用android文件系统查找首选项数据 204 9.2 使用文件和目录 205 9.2.1 探索android应用程序目录 206 9.2.2 在默认应用程序目录中创建和写入文件 206 9.2.3 在默认应用程序目录中读取文件内容 207 9.2.4 使用android文件系统操作其他目录和文件 208 9.3 使用sqlite数据库存储结构化数据 209 9.3.1 创建sqlite数据库 210 9.3.2 创建、修改和删除数据库记录 212 9.3.3 在sqlite数据库中执行查询 215 9.3.4 关闭和删除sqlite数据库 220 9.3.5 设计持久数据库 220 9.3.6 向应用程序界面绑定数据 223 9.4 使用content provider在应用程序间共享数据 227 9.4.1 为访问图像调整content provider 227 9.4.2 探索android的部分内建content provider 232 9.4.3 在content provider中修改数据 239 9.5 使用自定义content provider扩展你的android应用程序 241 9.5.1 继承content provider 241 9.5.2 定义数据uri 242 9.5.3 定义数据列 242 9.5.4 实现query()、insert()、update()、delete()和gettype() 243 9.5.5 更新manifest文件 248 9.6 使用live folder 249 小结 251 参考资料和更多信息 252 第10章 使用android网络api 253 10.1 访问因特网(http) 253 10.1.1 从web读取数据 253 10.1.2 使用httpurlconnection 254 10.1.3 解析从网络获取的xml 255 10.1.4 使用线程访问网络 257 10.1.5 显示从网络资源获取的图像 260 10.1.6 获取android网络状态 262 10.2 使用webview浏览web 263 小结 265 参考资料和更多信息 266 第11章 使用位置服务(lbs)api 267 11.1 使用全球定位服务(gps) 267 11.1.1 查找你的位置 267 11.1.2 定位你的模拟器 269 11.2 位置地理编码 269 11.3 在地图上标注位置 272 11.3.1 地图标注内容 272 11.3.2 地图标注视图 272 11.3.3 获得调试api key 274 11.3.4 拖曳地图视图 275 11.3.5 缩放地图视图 276 11.3.6 标记点 277 11.4 位置服务扩展应用 281 小结 282 参考资料和更多信息 282 第12章 使用android多媒体api 283 12.1 操作静态图像 283 12.1.1 使用摄像头捕捉静态图像 283 12.1.2 分享图像 287 12.1.3 将图像指定为墙纸 288 12.2 使用视频 289 12.2.1 录制视频 289 12.2.2 播放视频 290 12.3 使用音频 291 12.3.1 录制音频 291 12.3.2 播放音频 293 12.3.3 共享音频 294 12.3.4 使用铃音 294 小结 295 第13章 使用android电话api 296 13.1 使用电话功能包 296 13.1.1 为获取手机状态信息取得许可权限 296 13.1.2 请求获取通话状态 297 13.1.3 请求获取服务信息 299 13.1.4 使用电话号码 299 13.2 使用短消息 300 13.2.1 获得发送和接收短消息的许可权限 301 13.2.2 发送短消息 301 13.2.3 接收短消息 303 13.3 拨打电话 305 小结 307 参考资料和更多信息 307 第14章 通过opengl es使用android 3d图形 308 14.1 定义opengl es 308 14.2 使用基于opengl es的android 3d应用程序 309 14.2.1 创建surfaceview 309 14.2.2 启动opengl es线程 311 14.2.3 初始化egl 312 14.2.4 初始化gl 314 14.2.5 绘制 315 14.3 绘制3d物体 316 14.3.1 绘制顶点(vertices) 316 14.3.2 为顶点着色 317 14.3.3 绘制更多复杂物体 318 14.3.4 照亮你的场景 320 14.3.5 为对象赋予材质 321 14.4 同android视图和事件进行交互 323 14.4.1 允许opengl线程向应用程序线程发送信息 324 14.4.2 允许应用程序线程向opengl线程发送信息 325 14.5 清理opengl es 326 14.6 使用glsurfaceview类 327 小结 330 参考资料和更多信息 330 第15章 使用android可选硬件api 331 15.1 使用设备传感器 331 15.2 使用wi-fi 334 15.3 监视电池 337 小结 339 第五部分 更多android应用程序设计原则 第16章 使用通知 342 16.1 使用状态栏发布通知 342 16.2 让手机震动 345 16.3 灯光闪烁 346 16.4 发出声响 347 16.5 自定义通知 348 小结 350 第17章 使用服务 351 17.1 创建服务 351 17.2 控制服务 355 17.3 实现远程接口 356 17.4 实现可包装(parcelable)类 358 小结 360 第六部分 对外发布你的android应用程序 第18章 移动软件开发过程 364 18.1 移动开发过程概览 364 18.2 选择一种软件开发方法 364 18.2.1 理解“瀑布模型”的危险 365 18.2.2 认识迭代式开发的价值 365 18.3 整合应用程序需求 366 18.3.1 确定工程需求 366 18.3.2 为移动应用程序开发用例 367 18.3.3 吸纳第三方需求 367 18.3.4 管理手机设备数据库 368 18.4 项目风险评估 370 18.4.1 确定目标手机 370 18.4.2 获取目标手机 371 18.4.3 确定应用程序需求的可行性 372 18.4.4 理解质量保障的风险 372 18.5 编写基本项目文档 373 18.5.1 为质量保障制定测试计划 374 18.5.2 提供第三方所需的文档 374 18.5.3 提供维护和移植所需的文档 374 18.6 实现移动应用程序配置管理系统 374 18.6.1 选择一个源代码控制系统 374 18.6.2 实现一个可用的版本管理系统 375 18.7 设计移动应用程序 375 18.7.1 认识移动设备的局限 375 18.7.2 移动应用程序体系结构探索 376 18.7.3 可扩展和维护设计 376 18.7.4 应用程序交互设计 377 18.8 开发移动应用程序 377 18.9 测试移动应用程序 378 18.10 发布移动应用程序 378 18.10.1 确定目标市场 379 18.10.2 将市场需求引入应用程序需求 379 18.11 支持和维护移动应用程序 379 18.11.1 维护适当的应用程序文档 379 18.11.2 管理服务器的动态更改 379 18.11.3 确定低风险移植机会 380 小结 380 参考资料和更多信息 380 第19章 开发和测试“防弹”android应用程序 381 19.1 “防弹”移动应用程序设计最佳实践 381 19.1.1 满足移动用户的需求 382 19.1.2 为移动设备设计用户界面 382 19.1.3 设计稳定、灵敏的移动应用程序 384 19.1.4 设计安全的移动应用程序 385 19.1.5 在设计移动应用程序时考虑利益的最大化 385 19.1.6 在android应用程序设计时使用第三方标准 386 19.1.7 设计便于维护和升级的移动应用程序 386 19.1.8 在应用程序设计中使用andriod工具 388 19.1.9 避免设计时的愚蠢错误 388 19.2 “防弹”移动应用程序开发最佳实践 388 19.2.1 设计有效的移动开发过程 389 19.2.2 提早和经常地测试应用程序可行性 389 19.2.3 使用代码标准、代码检查和单元测试以提高代码质量 389 19.2.4 处理某单一手机的缺陷 391 19.2.5 在应用程序开发中使用android工具 392 19.2.6 避免开发时的愚蠢错误 392 19.3 移动应用程序测试最佳实践 392 19.3.1 设计一个应用程序漏洞跟踪系统 392 19.3.2 管理测试环境 393 19.4 确定设备的“洁净”初始状态 394 19.4.1 模仿现实世界的活动 395 19.4.2 尽量全面地进行测试 395 19.4.3 在应用程序测试中使用android工具 400 19.4.4 避免测试时的愚蠢错误 401 19.4.5 外包测试的责任 401 小结 401 参考资料和更多信息 401 第20章 销售你的android应用程序 402 20.1 为发布而打包你的应用程序 402 20.1.1 准备封装你的代码 402 20.1.2 准备你的软件包 403 20.1.3 测试软件包的发布版本 406 20.1.4 认证你的android应用程序 406 20.2 赚钱 406 20.2.1 在android market上销售你的应用程序 406 20.2.2 在自己的服务器上销售你的应用程序 411 20.2.3 销售应用程序的其他途径 412 20.2.4 保护你的知识产权 413 20.2.5 让用户付费 413 小结 414 参考资料和更多信息 414 第七部分 附录 附录a android模拟器快速入门 416 a.1 玩转默认模拟器 416 a.2 使用android虚拟设备管理模拟器配置 418 a.3 列表显示android目标操作系统 418 a.3.1 创建avd 419 a.3.2 列表显示所有已知的avd 424 a.3.3 删除avd 424 a.3.4 使用其他的avd命令 425 a.4 使用启动选项控制模拟器行为 425 a.4.1 以命令行的方式配置模拟器启动选项 426 a.4.2 使用eclipse配置模拟器启动选项 426 a.5 配置模拟器的位置信息 427 a.6 在两个模拟器实例之间拨打电话 427 a.7 在两个模拟器实例之间发送消息 429 a.8 通过控制台与模拟器交互 429 a.8.1 使用控制台模拟来电 429 a.8.2 使用控制台模拟短消息 429 a.8.3 使用控制台发送gps坐标 430 a.8.4 使用控制台监视网络状态 431 a.8.5 使用控制台操作电源设置 431 a.8.6 使用其他控制台命令 432 a.9 享受模拟器 432 a.10 认识模拟器的局限 433 附录b android ddms快速入门 434 b.1 独立或结合eclipse使用ddms 434 b.2 熟悉ddms的关键特性 436 b.3 使用进程 436 b.3.1 向android应用程序关联调试器 437 b.3.2 监视android应用程序的线程活动 437 b.3.3 在android应用程序中触发垃圾回收(gc) 438 b.3.4 监视android应用程序的堆活动 438 b.3.5 终止android进程 438 b.4 使用文件浏览器 439 b.4.1 从模拟器或设备上拷贝文件 440 b.4.2 向模拟器或设备拷贝文件 440 b.4.3 删除模拟器或设备上的文件 440 b.5 使用模拟器控制 441 b.5.1 模拟语音来电 441 b.5.2 模拟短消息接收 441 b.5.3 发送位置坐标 442 b.6 使用应用程序日志 442 b.7 在模拟器或目标设备上截屏 443 附录c android调试桥快速入门 445 c.1 列表显示连接到计算机的设备和模拟器 445 c.2 针对特定设备使用adb命令 446 c.3 启动和停止adb服务进程 446 c.3.1 停止adb服务进程 446 c.3.2 启动和检测adb服务进程 446 c.4 使用adb从/向android应用程序拷贝文件 446 c.4.1 向设备发送文件 447 c.4.2 从设备提取文件 447 c.5 使用adb安装和卸载android应用程序 447 c.5.1 使用adb安装应用程序 447 c.5.2 使用adb重装应用程序 448 c.5.3 使用adb卸载应用程序 448 c.6 使用logcat记录日志 448 c.6.1 显示所有的日志信息 448 c.6.2 更改日志记录模式以包含日期和时间信息 449 c.6.3 过滤日志信息 449 c.6.4 清除日志 450 c.6.5 将日志输出重定向至一个文件 450 c.6.6 访问次级日志 450 c.7 生成bug报告 451 c.8 发布shell命令 451 c.8.1 发布单条shell命令 451 c.8.2 启动和使用一个shell会话 451 c.8.3 使用adb shell启动和终止模拟器 452 c.8.4 使用adb shell查看sqlite数据库 452 c.8.5 在adb shell中使用monkey进行应用程序压力测试 452 c.8.6 通过shell安装和使用自定义二进制文件 455 c.9 其他adb命令探索 456 附录d sqlite快速入门 457 d.1 探索sqlite的常见任务 457 d.2 使用sqlite3命令行接口 457 d.2.1 启动sqlite3命令行接口并连接数据库 458 d.2.2 探索你的数据库 458 d.2.3 导入和导出数据库 460 d.2.4 在命令行中执行sql命令 461 d.2.5 窥视sqlite内部 462 d.2.6 使用其他的sqlite3命令 462 d.2.7 认识sqlite的局限 462 d.3 通过实例理解sqlite:学生成绩数据库 463 d.3.1 设计学生成绩数据库的模式 463 d.3.2 结合autoincrement创建简单表 464 d.3.3 向表中插入数据 464 d.3.4 使用select查询表数据 465 d.3.5 创建具有外键和复合主键的表 466 d.3.6 修改和更新表数据 467 d.3.7 使用join进行多表查询 467 d.3.8 使用计算列 468 d.3.9 对计算列使用子查询 469 d.3.10 删除表 470 本书共分17章,主要内容如下。讲解了Android系统架构,让读者对Android系统有一个整体认识;介绍了Android开发环境搭建和Android应用程序的基本结构;通过简单实例,让读者对Android应用开发有一个全面的认知;讲解了Android UI知识,包括Android中常见控件和创建自定义控件;介绍了Android中重要的一个组件Activity(活动),并对碎片进行了全面讲解;介绍了Android中Service(服务)组件及此组件的生命周期和跨进程通信;介绍了Android的Broadcast(广播接收器)组件,帮助读者掌握接收和发送广播的方式及工作原理;讲解了Android中的本地数据存储技术;介绍了Android的ContentProvider(内容提供器)组件;介绍了Android提供的二维绘制特性,包括使用Canvas和Paint在屏幕上进行图形和文本的绘制;介绍了Android多媒体开发的知识;讲解了Android的特色开发技术,包括Camera、地图、GPS、传感器、录音、WiFi设备等;讲解了在Android应用程序中使用OpenGL ES的几种不同的方法,以及对2D物体的绘制、着色和3D图形的绘制和纹理贴图;介绍了Android NDK和Android网络编程,以及Android底层架构,如Android进程间通信机制Binder原理,并通过实例让读者能够真正体会Native Service的魅力;本书通过讲解一个完整项目的开发,帮助读者把所学的知识串起来,达到学以致用的目的,并教会读者如何打包App和上架等。, 本书的内容通俗易懂、由浅入深,既适合初学者,又适合Android程序员,也可以作为大专院校相关专业师生和培训学校的教学用书。