首页>参考读物>计算机科学与技术>计算机网络

App研发录:架构设计、Crash分析和竞品技术分析
作者 : 包建强 著
丛书名 : 移动开发
出版日期 : 2015-10-20
ISBN : 978-7-111-51638-5
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 322
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书从Android应用架构的角度,汇集Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量Android应用提供有价值的实践指导,迅速提升应用开发能力和解决疑难问题的能力。本书涉及的问题有:Android基础建设、网络设计、缓存、网络流量优化、制定规范、模块化拆分、捕获异常、数据统计、崩溃分析、持续集成、App竞品技术分析等。本书以“问题/解决方案”的形式给出疑难问题的解决方案,同时结合示例代码,深入剖析这些实用的编程技巧和模式,旨在帮助开发人员提高编程效率,改进代码质量,打造高质量的Android应用。

图书特色

本书由业界多位移动团队技术负责人联袂推荐,为打造高质量App提供了有价值的实践指导。
书中总结了80多个Crash的分析与处理,是迄今为止最完整的Android异常分析资料。
剖析了国内上百款知名App的前沿技术实现,是最权威的竞品技术分析白皮书。
为了写这本书,作者分析了市场上有名的上百款App,能够费这么多心血去研究技术实现的人,在我看来至少是一个充满好奇心的人。正是这种拥有好奇心并执着探索的人,才推动了近百年来的科学发展。
—— 奇虎360董事长 周鸿祎

本书与其他书籍完全不同,纯从实战出发,在官方文档之上,阐述实际开发中应该掌握的那些来之不易的经验,其中多是过来人踩过坑、吃过亏才能总结出来的东西。不少章节类似于Effective系列名著的风格,有很高的价值。
—— 美团技术学院院长,CSDN和《程序员》杂志前总编 刘江

整本书并不是从枯燥的文档中提炼而来,而是真切地从一个互联网从业者的亲身经历和交流中得来。作为需要时刻紧跟移动浪潮的App开发人员,这本书是值得一读的好书。
—— 大众点评首席架构师 屠毅敏

这本书针对有经验的Android开发者,你会发现很多场景都是曾经或即将带给你疑问的,作者针对Android开发过程中一个个具体问题给出了解决方案,非常实用。特别是异常处理的部分,这是我第一次发现有这么完整地介绍Android异常的书籍,非常有学习价值。
—— 腾讯无线研发工具总监 欧阳骏

这本书在老包的诙谐笔法之下凝聚了他多年来奋战在一线的研发和管理经验,具备很强的实战参考意义,并非一般的App开发入门或者泛泛之谈。从菜鸟成长为大拿如果有捷径的话,莫过于经常与高手过招。在开发HTML的Web时代,前端开发人员很喜欢用右键点击网页查看源代码的方式来学习优秀网站的开发思路,后来从中提炼成了很多浏览器的插件,比如Firefox的Firebug等。进入App开发时代后,如何从高手的作品中进行类似的学习呢?老包在第9章App竞品技术分析里给出了相当精彩的解决方案。整本书的结构清晰,从最为痛苦的考古重构讲起,到Crash异常等的分析处理,再到持续集成与团队协作的App开发项目管理,包含每个小工在成长之路上都可能碰到的问题。相信您阅读之后必定会有所收获。
—— 途牛旅游网无线中心总经理 陈世宏

作者简介







包建强
毕业于复旦大学数学系。先后在多家互联网公司担任无线部门技术总监,在Android、iOS、WP等多门无线技术中跋涉过 ,在App的项目管理上也有多年的实践经验。他是微软2008年MVP,曾经翻译出版《.NET探秘MSIL权威指南》,并有一个坚持写了6年的技术博客:http://jax.cnblogs.com/。

图书前言

皇皇三十载,书剑两无成
在你面前娓娓而谈的我,曾经是一位技术宅男。我写了6年的技术博客,500多篇技术文章。十年编程生涯,我学习了.NET的所有技术,但是从微软出来,踏上互联网这条路,却发现自己还是小学生水平,当时恰逢三十而立之年,感慨自己多年来一事无成,于是又开始了新一轮的学习。选择移动互联网这个方向,是因为这个领域所有人都是从零开始,大家都是摸索着做,初期没有高低上下之分。
在此期间,我做过Window Phone的App,学会了Android和iOS,慢慢由二把刀水平升级到如今的著书立说,本来我想写的是iOS框架设计,因为当时这方面的经验积累会更多一些,2013年的时候我在博客上写了一系列这方面的文章,可惜没有写完。如今这本书是以Android为主,但是框架设计的思想是和iOS一致的。
作为程序员,不写本书流传于世,貌似对不起这个职业。2008年的时候我就想写,可那时候积累不够,所知所会多是从书本上看到的,所以没敢动笔,而是选择翻译了一本书《MSIL权威指南》。翻译途中发现,我只能老老实实地按照原文翻译,而不能有所发挥。我渴望能有一个地方,天马行空地将自己的风格淋漓尽致地表现出来,在写这本书之前,只有我的技术博客。
终于给了自己一个交代,东隅已逝,桑榆非晚。
文章本天成,妙手偶得之
这是一本前后风格迥异的书,以至于完稿后,不知道该给本书起一个什么样的书名。只希望各位读者看过之后能得到一些启示,我就心满意足了。
下面介绍一下本书的章节概要。本书分为三个部分共计12章。
第1章讲重构。这是后续3章的基础。先别急着看其他章节,先看一下这一章介绍的内容,你的项目是否都做到了。
第2章讲网络底层封装。各个公司都对App的网络通信进行了封装,但都稍显臃肿。我介绍的这套网络框架比较灵巧,而且摆脱了AsyncTask的束缚,可以在底层或上层快速扩展新的功能。这样讲多少有些自卖自夸,好不好还是要听读者的反馈,建议在新的App上使用。
第3章讲App中一些经典的场景设计,比如说城市列表的增量更新、缓存的设计、App与HTML5的交互、全局变量的使用。对于这些场景,各位读者是否有似曾相识的感觉,是否能从我的解决方案中产生共鸣?
第4章介绍Android的命名规范和编码规范。网上的各种规范多如牛毛,但我们不能直接拿来就使用,要有批判地继承吸收,要总结出适合自己团队的规范。所以,即使是我这章内容,也请各位读者有选择地采纳。我写这一章的目的,就是要强调“无规矩不成方圆”,代码亦如是。
第5章和第6章组成了Android崩溃分析三部曲。写这本书用了一年,其中有半年多时间花在这两章上。一方面,要不断优化自己的算法,训练机器对崩溃进行分类;另一方面,则是对八十多种线上崩溃追根溯源,找到其真正的原因。
第7章讲Android中的代码混淆。本不该有这一章,只是在工作中发现网上关于ProGuard的介绍大都只言片语。官方倒是有一份白皮书,但是针对Android的介绍却不是很多,于是便写了这章,系统而全面地介绍了在Android中使用ProGuard的理论和实践。
第8章讲持续集成(CI)。十年传统软件的经验,使我在这方面得心应手。这一章所要解决的是,如何把传统软件的思想迁移到App上。
第9章讲App竞品分析,是研究了市场上几十款著名App并参阅了大量技术文章后写出的。之前积累了十年的软件研发经验,这时极大地帮助了我。
第10章讲项目管理,是为App量身打造的敏捷过程,是我在团队中一直坚持使用的开发模式。App一般2周发一次版本,迭代周期非常快,适合用敏捷开发模式。
第11章讲日常工作中的问题解决办法。那是在一段刀尖上舔血的日子中总结出的办法,那时每天都在战战兢兢中度过,有问题要在最短时间内查找到原因并尽可能修复;那也是个人能力提升最快的一段时光,每一次成功解决问题都伴随着个人的成长。
第12章讲App团队建设。我是一个孔雀型性格的老板,所以我的团队中多是外向型的人,或者说,把各种闷骚型技术宅男改造成明骚;我是从技术社区走出来的,所以我会推崇技术分享,关心每个人的成长;我有8年软件公司的工作经验,所以我擅长写文档、画流程图,以确保一切尽在掌握之中。有这样一位奇葩老板,对面的你,还不快到我的碗里来,我的邮箱是16230091@qq.com,我的团队,期待你的加入。
心如猛虎,细嗅蔷薇
话说,我也是无意间踏上编程这条道路的。如果不是在大三实在学不明白实变函数这门课的话,我现在也许是一个数学家,或者和我的那些同学一样做操盘手或是二级市场。
我真正的爱好是看书,最初是资治通鉴、二十四史,后来发现在饭桌上说这些会被师弟师妹们当做怪物,于是按照中文系同学的建议翻看张爱玲、王小波的小说,读梁实秋的随笔。在复旦的四年时光,熏出了一身的“臭毛病”,比如说看着夜空中的月亮会莫名其妙地流眼泪,会喜欢喝奶茶并且挑剔珍珠的口感。
不要以为程序员只会写代码。程序员做烘焙绝对是逆天的,因为这用到软件学中的设计模式,我也曾研发出失败的甜品,做饼干时把黄油错用成了淡奶油,然后把烤得硬邦邦的饼干第二天拿给同事们吃。
我涉及的领域还有很多,比如煮咖啡、唱K、看老电影,都是在编程技术到了一定瓶颈后学会的,每一类都有很深的学问。不要一门心思地看代码,生活能教会我们很多,然后反过来让我们对编程有更深刻的认识。
心若有桃园,何处不是水云间。
会当凌绝顶,一览众山小
如果后续还有第二卷,我希望是讲数据驱动产品。就在本书写作期间,我的思想发生了一次升华,那是在2015年初的一个雪夜,我完成了从纠结于写代码的方法到放眼于数据驱动产品的转变。这也是这本书前面代码很多,越到后面代码越少的原因。
数据驱动产品是未来十年的战略布局。之前,我们过多地关注于写代码的方法了,却始终搞不清用户是否愿意为我们辛辛苦苦做出来的产品买单,技术人员不知道,产品人员更不知道。产品人员需要技术人员提供工具来帮助他们进行分析,比如说ABTest,比如说精准推送平台,比如说用户画像,而我们检查自己的代码,却发现连PV和UV都不能确保准确。
这也是我接下来的研究和工作方向。
本书全部代码均可以从作者的博客上下载,地址是:www.cnblog.com/Jax/p/4656789.html。

包建强
2015年8月3日于北京

上架指导

计算机\程序设计

封底文字

为了写这本书,作者分析了市场上有名的上百款App,能够费这么多心血去研究技术实现的人,在我看来至少是一个充满好奇心的人。正是这种拥有好奇心,并执着探索的人,才推动了近百年来的科学发展。
——周鸿祎,奇虎360董事长
本书与其他书籍完全不同,纯从实战出发,在官方文档之上,阐述实际开发中应该掌握的那些来之不易的经验,其中多是过来人趟过坑、吃过亏,才能总结出来的东西。不少章节类似于Effective系列名著的风格,有很高的价值。
——刘江,美团技术学院院长,CSDN和《程序员》杂志前总编
整本书并不是从枯燥的文档提炼而来,而是真切地从一个互联网从业者的亲身经历和交流中得来。作为一个需要时刻紧跟移动浪潮的App开发人员,这本书是2015年值得一读的好书。
——屠毅敏,大众点评首席架构师 
这本书是针对有经验Android开发者的进阶指南,你会发现很多场景都是曾经或即将带给你疑问的,作者针对Android开发过程中一个个具体问题给出了解决方案,非常实用。特别是异常处理的部分,这是我第一次发现有这么完整地介绍Android异常的书籍,非常有学习价值。
——欧阳骏,腾讯无线研发工具总监 

这本书在老包的诙谐笔法之下凝聚了他多年来奋战在一线的研发和管理经验,具备很强的实战参考意义,并非一般的App开发入门或者泛泛之谈。从菜鸟成长为大拿如果有捷径的话,莫过于经常与高手过招。在开发HTML的Web时代,前端开发人员很喜欢用右键点击网页查看源代码的方式来学习优秀网站的开发思路,后来从中提炼成了很多浏览器的插件,比如Firefox的Firebug等。进入App开发时代后,如何从高手的作品中进行类似的学习呢?老包在第9章App竞品技术分析里给出了相当精彩的解决方案。整本书的结构清晰,从最为痛苦的考古重构讲起,到Crash异常等的分析处理,再到持续集成与团队协作的App开发项目管理,也可以作为一个小工的成长之路来参考。相信您阅读之后必定会有所收获。
——陈世宏,途牛旅游网无线中心总经理

作者简介

包建强 著:暂无简介

图书目录

序一
序二
序三
前言
第一部分 高效App框架设计与重构
第1章 重构,夜未眠 3
1.1 重新规划Android项目结构 3
1.2 为Activity定义新的生命周期 5
1.3 统一事件编程模型 7
1.4 实体化编程 9
1.4.1 在网络请求中使用实体 9
1.4.2 实体生成器 11
1.4.3 在页面跳转中使用实体 12
1.5 Adapter模板 14
1.6 类型安全转换函数 16
1.7 本章小结 17
第2章 Android网络底层框架设计 19
2.1 网络低层封装 19
2.1.1 网络请求的格式 19
2.1.2 AsyncTask的使用和缺点 21
2.1.3 使用原生的ThreadPoolExecutor + Runnable + Handler 24
2.1.4 网络底层的一些优化工作 28
2.2 App数据缓存设计 32
2.2.1 数据缓存策略 32
2.2.2 强制更新 35
2.3 MockService 36
2.4 用户登录 38
2.4.1 登录成功后的各种场景 39
2.4.2 自动登录 41
2.4.3 Cookie过期的统一处理 44
2.4.4 防止黑客刷库 45
2.5 HTTP头中的奥妙 46
2.5.1 HTTP请求 46
2.5.2 时间校准 48
2.5.3 开启gzip压缩 51
2.6 本章小结 52
第3章 Android经典场景设计 53
3.1 App图片缓存设计 53
3.1.1 ImageLoader设计原理 53
3.1.2 ImageLoader的使用 54
3.1.3 ImageLoader优化 55
3.1.4 图片加载利器Fresco 56
3.2 对网络流量进行优化 58
3.2.1 通信层面的优化 58
3.2.2 图片策略优化 59
3.3 城市列表的设计 61
3.3.1 城市列表数据 61
3.3.2 城市列表数据的增量更新机制 63
3.4 App与HTML5的交互 64
3.4.1 App操作HTML5页面的方法 64
3.4.2 HTML5页面操作App页面的方法 65
3.4.3 App和HTML5之间定义跳转协议 66
3.4.4 在App中内置HTML5页面 67
3.4.5 灵活切换Native和HTML5页面的策略 68
3.4.6 页面分发器 68
3.5 消灭全局变量 70
3.5.1 问题的发现 70
3.5.2 把数据作为Intent的参数传递 71
3.5.3 把全局变量序列化到本地 71
3.5.4 序列化的缺点 75
3.5.5 如果Activity也被销毁了呢 79
3.5.6 如何看待SharedPreferences 80
3.5.7 User是唯一例外的全局变量 80
3.6 本章小结 81
第4章 Android命名规范和编码规范 83
4.1 Android命名规范 83
4.2 Android编码规范 86
4.3 统一代码格式 89
4.4 本章小结 90
第二部分 App开发中的高级技巧
第5章 Crash异常收集与统计 93
5.1 异常收集 93
5.2 异常收集与统计 96
5.2.1 人工统计线上Crash数据 96
5.2.2 第一个线上Crash报表:Crash分类 97
5.2.3 第二个线上Crash报表:Crash去重 99
5.2.4 线上Crash的其他分析工作 104
5.3 本章小结 105
第6章 Crash异常分析 107
6.1 Java语法相关的异常 108
6.1.1 空指针 108
6.1.2 角标越界 109
6.1.3 试图调用一个空对象的方法 110
6.1.4 类型转换异常 110
6.1.5 数字转换错误 111
6.1.6 声明数组时长度为-1 111
6.1.7 遍历集合同时删除其中元素 112
6.1.8 比较器使用不当 114
6.1.9 当除数为0 115
6.1.10 不能随便使用的asList 116
6.1.11 又有类找不到了(一):ClassNotFoundException 116
6.1.12 又有类找不到了(二):NoClassDefFoundError 117
6.2 Activity相关的异常 117
6.2.1 找不到Activity 117
6.2.2 不能实例化Activity 118
6.2.3 找不到Service 118
6.2.4 不能启动BroadcastReceiver 119
6.2.5 startActivityForResult不能回传 119
6.2.6 猴急的Fragment 120
6.3 序列化相关的异常 120
6.3.1 实体对象不支持序列化 121
6.3.2 序列化时未指定ClassLoader 121
6.3.3 反序列化时发现类找不到:被ProGuard混淆导致的崩溃 122
6.3.4 反序列化时发现类找不到:传入畸形数据 123
6.3.5 反序列化时出错 123
6.4 列表相关的异常 123
6.4.1 Adapter数据源变化但是没通知ListView 124
6.4.2 ListView滚动时点击刷新按钮后崩溃 125
6.4.3 AbsListView的obtainView返回空指针 125
6.4.4 Adapter数据源变化但是没调用notifyDataSetChanged 126
6.5 窗体相关的异常 126
6.5.1 窗口句柄泄露 126
6.5.2 View not attached to window manager 128
6.5.3 窗体在不恰当的时候获取了焦点 129
6.5.4 token null is not for an application 130
6.5.5 permission denied for this window type 131
6.5.6 is your activity running 131
6.5.7 添加窗体失败 133
6.5.8 AlertDialog.resolveDialogTheme 134
6.5.9 The specif ied child already has a parent 136
6.5.10 子线程不能修改UI 137
6.5.11 不能在子线程操作AlertDialog和Toast 141
6.6 资源相关的异常 143
6.6.1 Resources$NotFoundException 143
6.6.2 StackOverf iowError 144
6.6.3 Unsatisf iedLinkError 144
6.6.4 Inf iateException之FileNotFoundException 145
6.6.5 Inf iateException之缺少构造器 145
6.6.6 Inf iateException之style与android:textStyle的区别 146
6.6.7 TransactionTooLargeException 147
6.7 系统碎片化相关的异常 147
6.7.1 NoSuchMethodError 147
6.7.2 RemoteViews 148
6.7.3 pointerIndex out of range 149
6.7.4 SecurityException之一:Intent中图片太大 150
6.7.5 SecurityException之二:动态加载其他apk的activity 151
6.7.6 SecurityException之三:No permission to modify thread 151
6.7.7 view的getDrawingCache()返回null 152
6.7.8 DeadObjectException 153
6.7.9 Android 2.1不支持SSL 153
6.7.10 ViewFlipper引发的血案 153
6.7.11 ActivityNotFoundException 154
6.7.12 Android 2.2不支持xlargeScreens 154
6.7.13 Package manager has died 155
6.7.14 SpannableString与富文本字符串 155
6.7.15 Can not perform this action after onSaveInstanceState 156
6.7.16 Service Intent must be explicit 157
6.8 SQLite相关的异常 157
6.8.1 No transaction is active 158
6.8.2 忘记关闭Cursor 158
6.8.3 数据库被锁定 159
6.8.4 试图再打开已经关闭的对象 159
6.8.5 文件加密了或无数据库 159
6.8.6 WebView中SQLLite缓存导致的崩溃 160
6.8.7 磁盘读写错误 161
6.8.8 android_metadata表不存在 161
6.8.9 android_metadata表中的locale字段 162
6.8.10 数据库或磁盘满了 162
6.9 不明觉厉的异常 162
6.9.1 内存溢出 163
6.9.2 Verify Failed 163
6.10 其他情况的异常 163
6.10.1 TimeoutException 164
6.10.2 JSON解析异常 164
6.10.3 JSONArray在初始化时为空 164
6.10.4 第三方SDK抛出的Crash 165
6.10.5 两个不同类型的View有相同的id 165
6.10.6 LayoutInf iater.from().inf iate()使用不当导致的崩溃 166
6.10.7 ViewGroup中的玄机 166
6.10.8 Monkey点击过快导致的崩溃 167
6.10.9 图片缩放很多倍 168
6.10.10 图片宽高为0 168
6.10.11 不能重复添加组件 168
6.11 本章小结 169
第7章 ProGuard技术详解 171
7.1 ProGuard简介 171
7.2 ProGuard工作原理 172
7.3 如何写一个ProGuard文件 172
7.3.1 基本混淆 172
7.3.2 针对App的量身定制 175
7.3.3 针对第三方jar包的解决方案 177
7.4 其他注意事项 178
7.5 本章小结 179
第8章 持续集成 181
8.1 版本管理策略 181
8.1.1 三种版本管理策略 181
8.1.2 特殊情况的版本管理策略 183
8.2 使用Ant脚本打包 184
8.2.1 Android打包流程 184
8.2.2 打包时的注意事项 189
8.3 Monkey包的生成 190
8.4 自动打包 191
8.4.1 安装和配置各种软件 192
8.4.2 准备Ant打包脚本 193
8.4.3 配置CCNET 193
8.4.4 搭建IIS站点下载apk包 193
8.4.5 自动打包流程小结 193
8.5 批量打渠道包 194
8.5.1 基于apk包批量生成渠道包 194
8.5.2 基于代码批量生成渠道包 195
8.6 Android发版流程 197
8.7 分类打渠道包 198
8.7.1 分门别类生成渠道包 198
8.7.2 批量上传apk的两种方式 199
8.8 灵活切换服务器 199
8.9 单元测试 201
8.10 本章小结 203
第9章 App竞品技术分析 205
9.1 竞品分析概述 205
9.1.1 App竞品定义 205
9.1.2 竞品分析要研究的几个方向 206
9.1.3 竞品分析与拿来主义 206
9.2 App安装包的结构 207
9.2.1 Android安装包的结构 207
9.2.2 iOS安装包的结构 208
9.3 竞品技术一瞥:开机速度 208
9.4 竞品技术二瞥:HTML5页面的打开速度 209
9.4.1 把HTML5页面嵌入到Zip包中 209
9.4.2 Zip包的增量更新机制 209
9.4.3 制作Zip增量包 210
9.4.4 使用WebView预先加载HTML5并缓存到本地 211
9.5 竞品技术三瞥:安装包的大小 211
9.5.1 从几件小事说起 211
9.5.2 安装包为什么那么大 212
9.5.3 png和jpg的区别及使用场景 212
9.5.4 Splash、引导图和背景图 213
9.5.5 iOS的1倍图、2倍图和3倍图 213
9.5.6 在iOS中进行图片拉伸和旋转 214
9.5.7 使用XML配置动画 214
9.5.8 iOS使用storyboard还是xib 215
9.5.9 字体文件的学问 215
9.5.10 表情图片打包下载 217
9.5.11 清除未使用图片 218
9.5.12 Proguard不只是用来混淆的 218
9.5.13 在iOS中使用pdf格式的图片 218
9.5.14 iOS的包永远比Android包体积大吗 219
9.5.15 从代码层面减少iOS包的体积 220
9.6 竞品技术四瞥:性能优化 220
9.6.1 App自动选取最佳服务器的策略 220
9.6.2 使用TCP+Protobuf 222
9.7 竞品技术五瞥:数据采集工具 223
9.7.1 页面跳转器 223
9.7.2 打点统计 226
9.7.3 ABTest 230
9.8 竞品技术六瞥:热修补 232
9.8.1 Native页面和HTML5页面的相互切换 232
9.8.2 在iOS中使用脚本编程 233
9.9 竞品技术七瞥:曲径通幽 237
9.9.1 一切皆可配置 237
9.9.2 App后门 238
9.9.3 Android包中META-INF目录的妙用 239
9.9.4 classes.dex的拆与合 241
9.10 竞品技术八瞥:模块化拆分 242
9.10.1 iOS资源拆分与模块化 242
9.10.2 Android模块化拆分 243
9.11 竞品技术九瞥:第三方SDK 244
9.11.1 HTML5篇 244
9.11.2 iOS篇 245
9.11.3 Android篇 245
9.11.4 其他 246
9.12 竞品技术十瞥:版本策略与App彩蛋 246
9.12.1 版本策略 246
9.12.2 App彩蛋 246
9.13 本章小结 247
第三部分 项目管理和团队建设
第10章 项目管理决定了开发速度 251
10.1 项目管理中的三驾马车 251
10.1.1 为什么不能没有测试团队 252
10.1.2 产品经理应做的事 253
10.1.3 开发人员的喜怒哀乐 254
10.1.4 项目经理的职责 254
10.2 优化团队结构,让敏捷流程跑得更快 255
10.2.1 平行模式还是垂直模式 255
10.2.2 让HTML5站点和MobileAPI的进度提前一个迭代 256
10.2.3 如何进行模块化分工 256
10.3 App敏捷开发流程 257
10.3.1 四周时间的开发流程 257
10.3.2 两周时间的开发流程 261
10.3.3 一周时间的开发流程 262
10.3.4 即时更新策略 263
10.4 项目经理的百宝箱 263
10.4.1 项目经理的任务评估表 263
10.4.2 贴小纸条的艺术 264
10.4.3 敏捷迭代中的会议纪要 265
10.4.4 开站例会的技巧 266
10.4.5 如何确保项目不延期 268
10.4.6 迭代风险管理 268
10.5 迭代中的测试工作 269
10.5.1 冒烟测试 269
10.5.2 探索性测试 271
10.5.3 Monkey测试 271
10.6 高层对敏捷流程的干预 272
10.6.1 重构与产品需求的平衡 272
10.6.2 提高效率,拒绝6×12 273
10.6.3 无线部门的座位安排 274
10.6.4 静时 276
10.7 本章小结 277
第11章 日常工作中的问题解决 279
11.1 使用二分法排查问题 279
11.2 找到能稳定重现问题的人 281
11.3 小流量包 282
11.4 建立全国范围的测试群 283
11.5 如何与用户沟通 284
11.6 日志与App性能 286
11.7 从新人入职作业入手 286
11.8 本章小结 287
第12章 无线团队的组建和管理 289
12.1 从面试谈起 289
12.1.1 如今是卖方市场 289
12.1.2 名校论不适用无线开发 290
12.1.3 如何搞到更多的简历 290
12.1.4 面试时需要考察的几个点 291
12.2 无线团队必备的10份文档 292
12.2.1 新员工入职文档 292
12.2.2 加强版新员工入职文档 292
12.2.3 测试机清单 293
12.2.4 模块分工表 293
12.2.5 页面逻辑流程文档 293
12.2.6 MobileAPI接口分布图 295
12.2.7 版本管理策略文档 295
12.2.8 框架设计文档 295
12.2.9 发版流程文档 296
12.2.10 App启动流程图 296
12.3 一对一沟通 297
12.4 每周技术分享 298
12.5 代码评审 299
12.6 对Android团队Leader的定位 300
12.7 Android应用开发所需技能自我评测 301
12.8 App开发人员的学习路线 302
12.9 本章小结 303

教学资源推荐
作者: [印度]拉杰·拉杰库马尔(Raj Rajkumar)卡内基-梅隆大学 [美]迪奥尼西奥·德·尼茨(Dionisio de Niz)卡内基-梅隆大学 马克·克莱恩(Mark Klein)美国软件工程研究所(SEI) 著
作者: 龚玲 张云涛
作者: (美)Fei Hu Xiaojun Cao 著
作者: (美)Ted G.Lewis 著
参考读物推荐
作者: 王达 著
作者: 黄菊华 编著
作者: [加] Hong Song Lin(洪松林)编著