具体描述
你是否从事Android操作系统开发,会创建简单的Android应用,但想进一步提升自己的开发技巧?你是否想深入挖掘Android操作系统的特性与功能,挑战现有开发水准?你是否正在想方设法创建高级、直观、创新的Android应用?毫无疑问,这本书适合你。
本书从自定义视图、多点触摸手势讲起,到集成在线Web服务,进一步扩展到探索地理围栏和活动识别等新技术。作为一名经验丰富的Android工程师,Erik Hellman通过本书深入剖析了一些专业技巧、诀窍、容易绊倒开发者的陷阱,以及一些鲜为人知的技术:
优化组件,以实现尽可能流畅的用户体验
创建自定义视图
全面理解Android SDK
掌握Android Studio和Gradle
使用Android音频、视频和图形API
文本转语音以及语音识别项目
充分利用新的Android位置API
使用Android连接技术与远程设备通信
执行后台处理
使用Android加密API
找到并安全使用隐藏API
使用Google Play Service为应用启用云计算
在Google Play Store中发布和销售应用
作者简介
作者简介:
Erik Hellman
Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架构师,主导Xperia系列产品开发;精通移动应用、Web技术、云计算和三维图形,定期在DroidCon、JFokus、JavaOne和其他专业开发人员大会上发表演讲。关于Erik的更多信息,可访问他的博客http://blog.hellsoft.se。
译者简介:
丁志虎
美团移动Android工程师。主要关注Android应用开发的各种技术,爱运动,爱coding,热衷于开源社区。
武海峰
美团移动应用和服务Gatekeeper。主要关注移动互联网应用和安全,热衷于开源软件和GNU/Linux。目前正在组建一支全栈QA团队。
目录信息
第1章 完善开发环境 2
1.1 可供选择的操作系统 2
1.2 Android SDK进阶 2
1.2.1 adb工具 3
1.2.2 用Monkey对应用UI做压力测试 5
1.2.3 在Android上使用Gradle构建系统 6
1.2.4 用ProGuard优化和混淆代码 9
1.3 Android库项目以及第三方库 9
1.3.1 使用JAR库 9
1.3.2 创建库项目 10
1.4 版本控制和源代码管理 11
1.5 熟练使用IDE 13
1.5.1 调试Android应用 14
1.5.2 使用lint做静态代码分析 15
1.5.3 重构代码 18
1.6 Android设备上的Developer选项 20
1.7 小结 22
1.8 延伸阅读 22
第2章 在Android上编写高效的Java代码 23
2.1 比较Android上的Dalvik Java和
Java SE 23
2.2 优化Android上的Java代码 25
2.2.1 Android上的类型安全枚举 26
2.2.2 Android中增强版的for循环 27
2.2.3 队列、同步和锁 28
2.3 管理和分配内存 30
2.4 Android中的多线程 33
2.4.1 Thread类 34
2.4.2 AsyncTask 35
2.4.3 Handler类 36
2.4.4 选择合适的线程 41
2.5 小结 41
2.6 延伸阅读 42
第二部分 充分利用组件
第3章 组件、清单及资源 44
3.1 Android组件 44
3.1.1 Activity 44
3.1.2 Service 45
3.1.3 BroadcastReceiver 45
3.1.4 ContentProvider 46
3.1.5 Application 46
3.1.6 应用架构 48
3.2 应用程序清单 49
3.2.1 manifest元素 49
3.2.2 Google Play过滤器和权限 50
3.2.3 application节点元素 51
3.2.4 组件元素和属性 52
3.2.5 Intent过滤 53
3.3 resources和assets 55
3.3.1 高级string资源 55
3.3.2 本地化 57
3.3.3 使用资源限定符 58
3.3.4 使用assets 59
3.4 小结 59
3.5 延伸阅读 60
第4章 Android用户体验和界面设计 61
4.1 用户故事 61
4.2 Android UI设计 62
4.2.1 导航 63
4.2.2 用户界面原型 63
4.3 Android用户界面元素 64
4.4 Android应用程序文本 65
4.4.1 字体 65
4.4.2 文本布局 65
4.5 尺寸和大小 66
4.5.1 推荐尺寸 66
4.5.2 图标大小 67
4.5.3 字体大小 67
4.6 颜色 68
4.7 图像和图标 69
4.7.1 典型透视 69
4.7.2 几何离子 70
4.7.3 人脸识别 70
4.8 可用性 71
4.9 用户奖励机制 71
4.10 小结 73
4.11 延伸阅读 73
第5章 Android用户界面操作 75
5.1 Activity和Fragment 75
5.2 使用多个屏幕 77
5.3 设计自定义视图 79
5.3.1 View的生命周期 79
5.3.2 钢琴键盘部件 80
5.4 多点触控 85
5.4.1 PointerCoordinates 87
5.4.2 旋转手势 87
5.5 OpenGL ES 89
5.6 小结 90
5.7 延伸阅读 90
第6章 Service和后台任务 91
6.1 何时以及如何使用Service 91
6.2 理解Service生命周期 92
6.2.1 Service的创建和销毁 92
6.2.2 启动Service 92
6.2.3 绑定Service 94
6.2.4 保持活跃 96
6.2.5 停止Service 97
6.3 在后台运行 99
6.3.1 IntentService 99
6.3.2 并行执行 100
6.4 和Service通信 103
6.4.1 使用Intent进行异步消息传递 103
6.4.2 本地绑定的Servcie 104
6.5 小结 107
6.6 延伸阅读 108
第7章 Android IPC 109
7.1 Binder简介 109
7.1.1 Binder地址 110
7.1.2 Binder事务 111
7.1.3 Parcel 112
7.1.4 link to death 114
7.2 设计API 114
7.2.1 AIDL 115
7.2.2 Messenger 119
7.2.3 使用库工程包装API 122
7.3 保护远程API 125
7.4 小结 126
7.5 延伸阅读 126
第8章 掌握BroadcastReceiver以及配置更改 127
8.1 BroadcastReceiver 128
8.1.1 本地BroadcastReceiver 129
8.1.2 普通广播和有序广播 130
8.1.3 粘性广播 132
8.1.4 定向广播 132
8.1.5 启用和禁用广播接收器 133
8.1.6 系统广播Intent 133
8.2 设备配置更改 137
8.3 小结 137
8.4 延伸阅读 138
第9章 数据存储和序列化技术 139
9.1 Android持久化选项 139
9.2 在偏好文件中存储数据 140
9.3 用户选项和设置用户界面 142
9.4 高性能ContentProvider 144
9.4.1 Android数据库设计 144
9.4.2 创建和升级数据库 145
9.4.3 实现查询方法 147
9.4.4 数据库事务 149
9.4.5 在ContentProvider中存储二进制数据 150
9.5 序列化数据 152
9.5.1 JSON 152
9.5.2 使用Gson进行高级JSON处理 154
9.5.3 Google Protocol Buffer 156
9.6 应用数据备份 159
9.7 小结 160
9.8 延伸阅读 160
第10章 编写自动化测试 162
10.1 Android测试原则 162
10.1.1 测试内容 163
10.1.2 基本的单元测试 163
10.1.3 测试Activity 165
10.1.4 测试Service 167
10.1.5 测试ContentProvider 168
10.1.6 运行测试 171
10.2 持续集成 172
10.3 小结 173
10.4 延伸阅读 173
第三部分 超越极限
第11章 高级音频、视频及相机应用 176
11.1 高级音频应用 176
11.1.1 低延迟音频 176
11.1.2 OpenSL ES 179
11.1.3 文字转语音 183
11.1.4 语音识别 184
11.2 使用OpenGL ES 2.0处理视频 186
11.3 使用OpenGL ES 2.0处理相机 190
11.4 多媒体编码 192
11.5 小结 196
11.6 延伸阅读 196
第12章 Android应用安全问题 197
12.1 Android安全的概念 197
12.1.1 签名和密钥 197
12.1.2 Android权限 198
12.1.3 保护用户数据 199
12.1.4 验证调用应用 200
12.2 客户端数据加密 201
12.2.1 Android的加密API 201
12.2.2 生成密钥 201
12.2.3 加密数据 202
12.2.4 解密数据 202
12.2.5 处理加密数据 203
12.3 Android的钥匙链管理 204
12.4 设备管理API 208
12.5 小结 211
12.6 扩展阅读 212
第13章 地图、位置和活动API 213
13.1 融合位置管理器 213
13.2 集成Google Maps v2 214
13.3 使用Google Maps 216
13.3.1 地图标记 217
13.3.2 绘制圆形区域 218
13.3.3 绘制多边形 219
13.3.4 有用的位置API工具 220
13.3.5 地理编码 221
13.4 使用LocationClient 222
13.5 地理围栏 223
13.6 活动识别 225
13.7 小结 227
13.8 延伸阅读 228
第14章 本地代码和JNI 229
14.1 关于CPU体系结构 229
14.2 用C语言编写Android应用程序 230
14.2.1 Android NDK编译脚本 230
14.2.2 本地Activity 231
14.3 使用JNI 232
14.3.1 从Java调用本地函数 232
14.3.2 从本地调用Java方法 235
14.4 Android本地API 238
14.4.1 C语言库 238
14.4.2 本地Android日志 238
14.4.3 本地OpenGL ES 2.0 238
14.4.4 OpenSL ES中的本地音频 239
14.5 移植本地库到Android 239
14.6 小结 245
14.7 延伸阅读 245
第15章 隐藏的Android API 246
15.1 官方API和隐藏API 246
15.2 发现隐藏API 247
15.3 安全地调用隐藏API 249
15.3.1 从设备中提取隐藏API 249
15.3.2 使用反射调用隐藏API 252
15.4 隐藏API示例 252
15.4.1 接收和阅读SMS 252
15.4.2 Wi-Fi网络共享 254
15.4.3 隐藏设置 255
15.5 小结 256
15.6 延伸阅读 256
第16章 深入研究Android平台 257
16.1 解锁设备 258
16.1.1 刷新出厂映像 259
16.1.2 解锁非Nexus设备 259
16.1.3 社区支持的固件 260
16.2 Android源码 260
16.2.1 设置构建环境 260
16.2.2 构建并刷新固件 261
16.3 编写系统应用 262
16.3.1 平台证书 262
16.3.2 编写签名的应用 263
16.4 探索Android平台 265
16.4.1 设置IDE 265
16.4.2 Android项目 265
16.4.3 Android Linux Kernel 267
16.4.4 添加系统服务 267
16.4.5 加快平台开发周期 270
16.5 为AOSP贡献代码 271
16.6 小结 273
16.7 延伸阅读 273
第17章 网络、Web服务和远程API 274
17.1 Android上的网络调用 274
17.1.1 HttpUrlConnection 275
17.1.2 Volley 278
17.1.3 OkHttp和SPDY 280
17.1.4 Web Socket 281
17.2 集成Web服务 285
17.2.1 Google Static Maps v2 285
17.2.2 使用OAuth2访问Foursquare API 286
17.2.3 在Android中使用Facebook SDK 290
17.2.4 寻找在线Web服务和API 294
17.3 网络和功耗 294
17.3.1 一般准则 295
17.3.2 高效的网络轮询 296
17.3.3 服务器端推送 297
17.4 小结 299
17.5 延伸阅读 299
第18章 与远程设备通信 300
18.1 Android中的连接技术 300
18.2 Android USB 301
18.3 蓝牙低功耗 303
18.4 Android Wi-Fi 306
18.4.1 服务发现 306
18.4.2 Wi-Fi Direct 308
18.5 设备上的Web服务 311
18.5.1 使用Restlet创建RESTful API 311
18.5.2 Web Socket服务器 315
18.6 小结 317
18.7 延伸阅读 317
第19章 Google Play Service 318
19.1 授权 318
19.2 Google Drive应用程序数据 321
19.3 Google Cloud Endpoint 324
19.4 谷歌云消息 327
19.5 Google Play Game Service 331
19.5.1 数据消息 333
19.5.2 消息策略 334
19.6 小结 335
19.7 延伸阅读 336
第20章 在Google Play Store发布应用 337
20.1 应用内付费 338
20.1.1 消费产品 340
20.1.2 应用内订阅 340
20.2 在应用内添加广告 341
20.2.1 定位广告 342
20.2.2 广告颜色 343
20.2.3 插播式广告 343
20.3 应用程序许可 344
20.4 APK扩展文件 345
20.4.1 创建扩展文件 346
20.4.2 下载扩展文件 346
20.5 小结 348
20.6 延伸阅读 348
· · · · · · (收起)
读后感
书中很多思维清晰,虽然代码举例都比较简洁(所有代码都列出的也只是适合初学者而已),适合已经入门的、有一定的基础但是没有一个系统的思想和开发方法流程的Android开发人员去看,确实是一本非常好的图书。并且使用了AS作为开发工具,这也是很难得的地方,毕竟未来是AS的天下。
书中很多思维清晰,虽然代码举例都比较简洁(所有代码都列出的也只是适合初学者而已),适合已经入门的、有一定的基础但是没有一个系统的思想和开发方法流程的Android开发人员去看,确实是一本非常好的图书。并且使用了AS作为开发工具,这也是很难得的地方,毕竟未来是AS的天下。
书中很多思维清晰,虽然代码举例都比较简洁(所有代码都列出的也只是适合初学者而已),适合已经入门的、有一定的基础但是没有一个系统的思想和开发方法流程的Android开发人员去看,确实是一本非常好的图书。并且使用了AS作为开发工具,这也是很难得的地方,毕竟未来是AS的天下。
书中很多思维清晰,虽然代码举例都比较简洁(所有代码都列出的也只是适合初学者而已),适合已经入门的、有一定的基础但是没有一个系统的思想和开发方法流程的Android开发人员去看,确实是一本非常好的图书。并且使用了AS作为开发工具,这也是很难得的地方,毕竟未来是AS的天下。
书中很多思维清晰,虽然代码举例都比较简洁(所有代码都列出的也只是适合初学者而已),适合已经入门的、有一定的基础但是没有一个系统的思想和开发方法流程的Android开发人员去看,确实是一本非常好的图书。并且使用了AS作为开发工具,这也是很难得的地方,毕竟未来是AS的天下。
用户评价
说实话,对于我这种已经工作了几年、想从“码农”蜕变为“架构师”的工程师来说,市面上的很多书籍都显得有些“嫩”。它们总是在重复我已经掌握的东西,或者停留在单一技术栈的展示上。然而,这本书的广度和深度都达到了一个令人惊喜的平衡点。它不仅仅关注于UI层的优化,更深入到了底层性能调优和架构设计的层面。我特别欣赏它对内存泄漏排查那一块的处理方式,作者没有简单地推荐几个工具,而是手把手地带我们分析JVM底层的工作机制,如何通过TraceView和Heap Dump来定位那些隐藏极深的引用问题。这种自底向上的理解,让我在实际工作中面对OOM问题时,不再是盲目地尝试各种方法,而是能够精准地找到问题的根源。此外,书中关于模块化和组件化架构的讨论,也展现了作者在大型项目管理上的深刻洞察力。它不是生搬硬套某些知名的开源方案,而是提出了一个非常灵活且可扩展的框架思想,让我可以根据自己团队的实际情况进行裁剪和应用。这本书更像是一本“内功心法”,它教会你的不是招式,而是如何修炼出强大的内力。
我是一个非常注重技术选型和生态系统前瞻性的开发者,因此,一本过时的技术书对我来说价值有限。我惊喜地发现,《Android编程实战》在技术栈的选择上非常具有前瞻性,它几乎完整覆盖了Jetpack组件的现代用法,尤其是关于Kotlin协程(Coroutines)在复杂异步流处理中的应用,讲解得极为透彻。它没有停留在协程的基础用法上,而是深入到了Flow与LiveData的互操作性,以及如何在大型架构中实现取消和异常的优雅处理。这对于正在从RxJava迁移到协程的团队来说,简直就是一份及时的“技术迁移指南”。书中对构建系统(Gradle)的定制化和多渠道打包策略的阐述,也展现了作者深厚的工程素养。它不仅告诉你“怎么做”,更解释了“为什么这样设计更好”,这使得读者不仅学会了工具的使用,更理解了背后的设计哲学。这本书的视野是面向未来的,它为你构建下一代高性能、高可维护性应用打下了坚实的基础。
这本书简直是开发者进阶路上的“救星”!我拿到《Android编程实战》的时候,心里其实是忐忑的,毕竟市面上关于Android的书籍汗牛充栋,很多都是基础概念的堆砌,看了半天也搭不上实际项目。但这本书不一样,它简直就是一本活生生的项目实战手册。作者没有拘泥于那些早就过时的API版本,而是紧紧围绕着当前工业界的主流技术栈在展开。比如,在讲解数据持久化时,它没有仅仅停留在SQLite的CRUD操作上,而是深入剖析了Room架构组件的最佳实践,代码示例清晰到让人拍案叫绝,每一个模块的依赖注入、线程安全处理都考虑得面面俱到。最让我印象深刻的是,书中有一个关于自定义View和复杂手势处理的章节,那部分内容在很多教程里都是一笔带过或者逻辑混乱的,但在这里,作者用极其严谨的数学逻辑和流畅的动画效果讲解,让我这个困扰了很久的问题茅塞顿开。阅读这本书的过程,就像是跟一位经验丰富的老兵在并肩作战,而不是冷冰冰地学习理论。它真正做到了“实战”二字,每一步的决策都有充分的技术依据支撑,读完后感觉自己的工程能力得到了质的飞跃,那种成就感是其他入门书籍无法给予的。
如果要用一个词来形容这本书给我的感受,那就是“精炼”。它没有冗余的套话和空洞的口号,每一页都塞满了干货。我对比了之前看过的几本同类型的书籍,它们可能需要三百页才能讲清楚一个概念,而这本书可能只需要五十页,并且把所有绕弯子的地方都提前帮你清理干净了。这种“直击靶心”的写作风格,极大地提高了我的学习效率。例如,在网络请求框架的封装部分,它没有浪费时间去重写Retrofit的基本用法,而是直接切入如何设计一个健壮的请求拦截器链,如何实现全局的错误码统一处理和Token刷新机制。这种对工程痛点的精准把握,让这本书的实用价值飙升。它不是一本让你在面试时能背诵定义的手册,而是一本在你深夜加班解决棘手Bug时,能翻开并立刻找到灵感的“武功秘籍”。读完后,我感觉自己不再是那个被动接受需求、修修补补的工程师,而是能够主动设计和优化应用架构的“掌控者”。
这本书的阅读体验堪称优雅,这对于一本技术书籍来说,是相当难得的品质。它的排版设计非常考究,代码块的语法高亮和注释的密度把握得恰到好处,不会让人感到压迫感。更重要的是,作者在叙事逻辑上采用了“问题驱动”的模式。每一章的开始,都会抛出一个在实际开发中令人头疼的复杂场景,然后层层剥茧,从问题的产生原因到最终的解决方案,讲解过程如同侦探小说一般引人入胜。我尤其喜欢它对并发编程的处理。通常情况下,多线程和异步编程是最容易让人感到烧脑的部分,但作者通过一系列精心设计的比喻和图形化解释,将Lock、Semaphore、HandlerThread等概念梳理得井井有条。读完后,我感觉自己对Android的执行模型有了全新的认识,不再是对并发心存畏惧。这本书的价值在于,它能把晦涩难懂的底层原理,转化成清晰可操作的实践步骤,让读者在不知不觉中,将知识内化为自己的能力。
还没读完先上评价。绝对的好书,适合我这种看了敲了许多初级代码,迷迷糊糊的已入门者。
必须承认,这本书是android提高道路上一大推手,我才读到第七章,感觉每一章节都很好看,很多用过但是不知道的知识讲的不算细致,但是google一下几乎都能找到,算是我看到android书中维数不多的好书,非常推荐。
必须承认,这本书是android提高道路上一大推手,我才读到第七章,感觉每一章节都很好看,很多用过但是不知道的知识讲的不算细致,但是google一下几乎都能找到,算是我看到android书中维数不多的好书,非常推荐。
只是罗列了Android编程技术的各项概念性知识,讲解比较笼统,不适合初学者。
还没读完先上评价。绝对的好书,适合我这种看了敲了许多初级代码,迷迷糊糊的已入门者。