搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
App研发录:架构设计、Crash分析和竞品技术分析移动开发
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111516385
  • 作      者:
    包建强著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2015
收藏
编辑推荐
  

  《App研发录:架构设计、Crash分析和竞品技术分析》由业界多位移动团队技术负责人联袂推荐,为打造高质量App提供了有价值的实践指导。

  《App研发录:架构设计、Crash分析和竞品技术分析》中总结了80多个Crash的分析与处理,是迄今为止完整的Android异常分析资料。

  剖析了国内上百款知名App的前沿技术实现,竞品技术分析白皮书。

展开
作者简介

  包建强,毕业于复旦大学数学系。先后在多家互联网公司担任无线部门技术总监,在Android、iOS、WP等多门无线技术中跋涉过 ,在App的项目管理上也有多年的实践经验。他是微软2008年MVP,并有一个坚持写了6年的技术博客。

展开
内容介绍

  《App研发录:架构设计、Crash分析和竞品技术分析》是作者多年App开发的经验总结,重点介绍Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供了有价值的实践指导,可帮助读者迅速提升应用开发能力和解决疑难问题的能力。本书涉及的主题有:Android项目的重构、网络底层框架设计、经典场景设计、命名规范和编程规范、Crash的捕获与分析、持续集成、代码混淆、App竞品技术分析、移动项目管理和团队建设等。本书内容丰富,文风幽默,不仅给出疑难问题的解决方案,而且结合示例代码深入剖析这些问题的实质和编程技巧,旨在帮助移动开发人员和管理人员提高编程效率,改进代码质量,打造高质量的App。

展开
精彩书评

  ★为了写这本书,作者分析了市场上有名的上百款App,能够费这么多心血去研究技术实现的人,在我看来至少是一个充满好奇心的人。正是这种拥有好奇心并执着探索的人,才推动了近百年来的科学发展。

  —— 奇虎360董事长 周鸿祎

  ★本书与其他书籍完全不同,纯从实战出发,在官方文档之上,阐述实际开发中应该掌握的那些来之不易的经验,其中多是过来人踩过坑、吃过亏才能总结出来的东西。不少章节类似于Effective系列名著的风格,有很高的价值。

  —— 美团技术学院院长,CSDN和《程序员》杂志前总编 刘江

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

  —— 大众点评首席架构师 屠毅敏

  ★这本书针对有经验的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.9 竞品技术七瞥:曲径通幽  237

9.10 竞品技术八瞥:模块化拆分  242

9.11 竞品技术九瞥:第三方SDK  244

9.12 竞品技术十瞥:版本策略与App彩蛋  246

9.13 本章小结  247

第三部分 项目管理和团队建设

第10章 项目管理决定了开发速度  251

10.1 项目管理中的三驾马车  251

10.2 优化团队结构,让敏捷流程跑得更快  255

10.3 App敏捷开发流程  257

10.4 项目经理的百宝箱  263

10.5 迭代中的测试工作  269

10.6 高层对敏捷流程的干预  272

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.2 无线团队必备的10份文档  292

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

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证