频道栏目
首页 > 资讯 > Android高级教程 > 正文

Android高级进阶

22-08-19        来源:[db:作者]  
收藏   我要投稿

《Android高级进阶》一书作者顾浩鑫,电子工业出版社2016年10月出版

基本信息

中文名

Android高级进阶

出版社

电子工业出版社

7aa93317dbd15b4c!400x400.jpg

作者

顾浩鑫

出版时间

2016年10月

 

开本

16开

ISBN

978-7-121-29845-5

页数

536

目录

1内容提要

2出版背景

折叠编辑本段内容提要

《Android高级进阶》是Android的进阶学习指南,主要为Android初中级开发者进阶所需的知识,高级开发者也可以从本书中发现很多共鸣点。《Android高级进阶》从8个方面对50个知识点进行分类讲解,包括基础篇、系统架构篇、经验总结篇、新技术篇、性能优化篇、移动安全篇、工具篇、测试篇。熟练掌握这些知识点后,应该就能够应付实际项目开发中的绝大部分问题了。

《Android高级进阶》的主要目的在于给读者一个完整的Android中高级开发者知识图谱。笔者希望通过《Android高级进阶》的系统讲解,能够帮助读者在面试和工作中收获自己满意的成绩。

折叠编辑本段出版背景

第1篇 基础篇

第1章 Android触摸事件传递机制 2

1.1 触摸事件的类型 2

1.2 事件传递的三个阶段 3

1.3 View的事件传递机制 4

1.4 ViewGroup的事件传递机制 10

第2章 Android View的绘制流程16

2.1 绘制的整体流程 17

2.2 MeasureSpec17

2.3 Measure19

2.4 Layout22

2.5 Draw22

第3章 Android 动画机制25

3.1 逐帧动画(Frame Animation) 25

3.1.1 XML 资源文件方式25

3.1.2 代码方式26

3.2 补间动画(Tween Animation) 27

3.2.1 插值器Interpolator 27

3.2.2 AlphaAnimation 29

3.2.3 ScaleAnimation 30

3.2.4 TranslateAnimation 31

3.2.5 RotateAnimation 32

3.2.6 自定义补间动画34

3.3 属性动画(Property Animation) 34

3.3.1 Evaluator 35

3.3.2 AnimatorSet 36

3.3.3 ValueAnimator 36

3.3.4 ObjectAnimator 38

3.4 过渡动画(Transition Animation) 40

第4章 Support Annotation Library 使用详解46

4.1 Nullness 注解 47

4.2 资源类型注解 48

4.3 类型定义注解 50

4.4 线程注解 52

4.5 RGB 颜色值注解 52

4.6 值范围注解 53

4.7 权限注解 53

4.8 重写函数注解 54

4.9 返回值注解 55

4.10 @VisibleForTesting55

4.11 @Keep55

第5章 Percent Support Library使用详解57

第6章 Design Support Library使用详解62

6.1 Snackbar62

6.2 TextInputLayout63

6.3 TabLayout64

6.4 NavigationView65

6.4.1 导航菜单66

6.4.2 导航头部67

6.5 FloatingActionButton70

6.5.1 使用浮动操作按钮70

6.5.2 其他选项71

6.5.3 点击事件71

6.6 CoordinatorLayout72

6.7 CollapsingToolbarLayout73

6.8 BottomSheetBehavior75

第7章 Android Studio中的NDK开发77

7.1 ABI的基本概念 77

7.2 引入预编译的二进制C/C++ 函数库 79

7.3 直接从C/C++ 源码编译 79

7.3.1 配置ndk.dir 变量79

7.3.2 在Gradle 中配置NDK 模块79

7.3.3 添加C/C++ 文件到指定的目录81

7.4 使用.so 文件的注意事项 81

7.4.1 使用高平台版本编译的.so 文件运行在低版本的设备上81

7.4.2 混合使用不同的C++ 运行时编译的.so 文件82

7.4.3 没有为每个支持的CPU 架构提供对应的.so 文件82

7.4.4 将.so 文件放在错误的地方82

7.4.5 只提供armeabi 架构的.so 文件而忽略其他ABIs 的83

第8章 Gradle 必知必会85

8.1 共享变量的定义 85

8.2 通用配置 87

8.3 aar 函数库的引用 88

8.4 签名和混淆的配置 90

第9章 通过Gradle打包发布函数库到JCenter和Maven Central 92

9.1 Maven Central 和JCenter92

9.1.1 Maven Central 93

9.1.2 JCenter 93

9.2 Android Studio 获取函数库的原理 94

9.3 上传函数库到JCenter96

9.3.1 步骤一:在Bintray 网站上注册一个账号96

9.3.2 步骤二:创建一个Sonatype 账号96

9.3.3 步骤三:在Bintray 网站使能自动签名97

9.3.4 步骤四:生成POM 相关的信息100

9.3.5 步骤五:上传函数库到Bintray 104

9.3.6 步骤六:发布Bintray 用户仓库到JCenter 107

9.3.7 步骤七:同步函数库到Maven Central 109

第10章 Builder模式详解110

10.1 经典的Builder 模式 110

10.2 Builder 模式的变种 113

10.3 变种Builder 模式的自动化生成 119

10.4 开源函数库的例子 122

第11章 注解在Android 中的应用124

11.1 注解的定义 124

11.2 标准注解 125

11.2.1 编译相关注解125

11.2.2 资源相关注解125

11.2.3 元注解125

11.3 运行时注解 127

11.4 编译时注解 127

11.4.1 定义注解处理器127

11.4.2 注册注解处理器131

11.4.3 android-apt插件132

第12章 ANR产生的原因及其定位分析134

12.1 ANR 产生的原因 135

12.2 典型的ANR 问题场景 135

12.3 ANR 的定位和分析 136

12.3.1 Logcat 日志信息136

12.3.2 traces.txt 日志信息138

12.4 ANR的避免和检测 141

12.4.1 StrictMode141

12.4.2 BlockCanary 142

第13章 Android异步处理技术144

13.1 Thread144

13.2 HandlerThread146

13.3 AsyncQueryHandler149

13.4 IntentService150

13.5 Executor Framework153

13.6 AsyncTask155

13.7 Loader156

13.8 总结 159

第14章 Android数据序列化方案研究160

14.1 Serializable160

14.2 Parcelable166

14.3 SQLiteDatabase169

14.4 SharedPreferences170

14.5 JSON171

14.6 Protocol Buffers及Nano-Proto-Buffers171

14.7 FlatBuffers171

第15章 Android WebView Java 和JavaScript 交互详解173

15.1 Java 调用JavaScript173

15.2 JavaScript 调用Java174

第2篇 系统架构篇

第16章 MVP模式及其在Android中的实践180

16.1 MVP 的基本概念 180

16.2 MVP 与MVC 的区别 181

16.3 MVP 的开源实现 182

16.3.1 Android-Architecture 182

16.3.2 TODO-MVP 182

16.3.3 TODO-MVP-Loaders 183

16.3.4 TODO-MVP-Clean 183

16.3.5 TODO-Databinding 184

16.3.6 其他开源参考实现184

16.4 MVP 的好处 185

16.5 MVP 存在的问题 185

第17章 MVVM模式及Android DataBinding实战186

17.1 Data Binding 表达式 187

17.2 数据对象 188

17.3 数据绑定 188

17.4 事件绑定 189

第18章 观察者模式的拓展:事件总线191

18.1 为何要使用 191

18.2 原理 192

18.3 开源实现 193

18.3.1 EventBus 193

18.3.2 otto 194

18.4 与观察者模式及Android 广播的区别 196

第19章 书写简洁规范的代码197

19.1 Java 编码规范 197

19.1.1 源代码文件的定义197

19.1.2 源代码文件的结构197

19.1.3 遵循的格式198

19.1.4 命名约定200

19.1.5 Javadoc 200

19.2 Android 命名规范 200

19.2.1 布局文件的命名200

19.2.2 资源文件的命名201

19.2.3 类的命名201

19.3 CheckStyle 的使用 202

第20章 基于开源项目搭建属于自己的技术堆栈203

20.1 APP 的整体架构 203

20.2 技术选型的考量点 205

20.3 日志记录能力 205

20.4 JSON 解析能力 207

20.4.1 gson 207

20.4.2 jackson 207

20.4.3 Fastjson 208

20.4.4 LoganSquare 208

20.5 数据库操作能力 210

20.5.1 ActiveAndroid 210

20.5.2 ormlite 211

20.5.3 greenDAO 211

20.5.4 Realm 212

20.6 网络通信能力 213

20.6.1 android-async-http 213

20.6.2 OkHttp 215

20.6.3 Volley 216

20.6.4 Retrofit 217

20.7 图片缓存和显示能力 217

20.7.1 BitmapFun 218

20.7.2 Picasso 218

20.7.3 Glide 218

20.7.4 Fresco 219

20.7.5 Android-Universal-Image-Loader 219

第3篇 经验总结篇

第21章 64K方法数限制原理与解决方案222

21.1 64K 限制的原因 222

21.2 使用MultiDex 解决64K 限制的问题 223

21.2.1 Android 5.0 之前的版本223

21.2.2 Android 5.0 及之后的版本223

21.3 如何避免出现64K 限制 223

21.4 配置MultiDex224

21.5 MultiDex Support Library 的局限性 226

21.6 在开发阶段优化MultiDex 的构建 227

第22章 Android 插件框架机制研究与实践230

22.1 基本概念 231

22.1.1 宿主和插件231

22.1.2 ClassLoader 机制231

22.2 开源框架 231

22.2.1 android-pluginmgr 232

22.2.2 dynamic-load-apk 232

22.2.3 DynamicAPK 232

22.2.4 DroidPlugin 233

22.2.5 Small 234

第23章 推送机制实现原理详解235

23.1 推送的开源实现方案 236

23.1.1 基于XMPP 协议236

23.1.2 基于MQTT 协议236

23.2 推送的第三方平台 236

23.3 自己实现推送功能 237

23.3.1 长连接的建立(TCPConnectThread)237

23.3.2 数据的发送(TCPSendThread)237

23.3.3 数据的接收(TCPReceiveThread)238

23.3.4 心跳包的实现(TCPHeartBeatThread)240

第24章 APP 瘦身经验总结241

24.1 APP 为什么变胖了 241

24.2 从APK 文件的结构说起 242

24.3 优化图片资源占用的空间 245

24.3.1 无损压缩[ImageOptim] 246

24.3.2 有损压缩[ImageAlpha] 246

24.3.3 有损压缩[TinyPNG] 246

24.3.4 PNG/JPEG 转换为WebP246

24.3.5 尽量使用NinePatch 格式的PNG 图247

24.4 使用Lint 删除无用资源 248

24.5 利用Android Gradle 配置 248

24.5.1 minifyEnable248

24.5.2 shrinkResources 249

24.5.3 resConfigs 249

24.5.4 ndk.abiFilters 250

24.6 重构和优化代码 250

24.7 资源混淆 251

24.8 插件化 251

第25章 Android Crash 日志收集原理与实践252

25.1 Java 层Crash 捕获机制 253

25.1.1 基本原理253

25.1.2 线程信息254

25.1.3 SharedPreference 信息255

25.1.4 系统设置257

21.1.5 Logcat 中的日志记录261

25.1.6 自定义Log 文件中的内容264

25.1.7 MemInfo 信息266

25.2 Native 层Crash 捕获机制 267

25.3 Crash 的上报 269

第4篇 新技术篇

第26章 函数式编程思想及其在Android中的应用272

26.1 代码的简化 274

26.2 Operators 简介 275

第27章 依赖注入及其在Android中的应用277

27.1 基本概念 277

27.1.1 构造函数注入278

27.1.2 Setter 函数注入279

27.1.3 接口注入279

27.2 为何需要框架 280

27.3 开源框架的选择 280

27.3.1 ButterKnife 280

27.3.2 RoboGuice 282

27.3.3 Dagger 285

27.3.4 Dagger2 288

27.3.5 框架的对比289

第28章 Android世界的Swift:Kotlin在Android中的应用290

28.1 选择Kotlin 的原因 290

28.2 Kotlin 的安装和配置 291

28.3 Kotlin 语言的特性 292

28.3.1 可表达性292

28.3.2 空类型安全294

28.3.3 扩展函数295

28.4 Kotlin 的Gradle 配置 296

28.5 将Java 类转换成Kotlin 类 299

28.6 相关资料 302

第29章 React Native For Android入门指南304

29.1 环境配置 304

29.1.1 Homebrew 304

29.1.2 nvm 305

29.1.3 Node.js 305

29.1.4 watchman 306

29.1.5 flow 306

29.2 Android 开发环境的要求 306

29.3 React Native 工程配置 307

29.3.1 安装react-native 307

29.3.2 生成工程307

29.4 Android Studio 工程概览 308

29.5 React Native 依赖库修改为本地 314

29.5.1 下载react-native.aar 314

29.5.2 react-native.aar 的文件内容315

29.5.3 Gradle 本地依赖316

29.5.4 将node_modules 上传到svn/git 318

29.6 React Native 学习建议 319

第30章 Android在线热修复方案研究320

30.1 在线热修复的基本流程 320

30.2 Dexposed321

30.2.1 如何集成322

30.2.2 基本用法323

30.2.3 在线热修复325

30.2.4 平台的限制328

30.3 AndFix329

30.3.1 如何集成329

30.3.2 补丁包生成工具331

30.3.3 平台的限制332

30.4 Nuwa332

30.4.1 基本原理332

30.4.2 如何集成333

30.4.3 补丁生成工具334

30.4.4 平台的限制334

30.5 总结 334

第31章 面向切面编程及其在Android中的应用335

31.1 AOP 的基本概念 335

31.2 代码织入的时机 336

31.3 基于AspectJ 实现Android 平台的AOP337

31.3.1 Hugo 的用法简介337

31.3.2 Hugo 的实现原理339

31.4 其他AOP 开源框架 344

第32章 基于Facebook Buck改造Android构建系统345

32.1 Buck环境配置 346

32.1.1 Homebrew 方式346

32.1.2 手动构建方式346

32.1.3 安装Watchman 348

32.1.4 安装Android SDK 和Android NDK 348

32.2 快速创建基于Buck 构建的Android 工程 349

32.3 Buck 的基本概念 351

32.3.1 构建规则(Build Rule)352

32.3.2 构建目标(Build Target)354

32.3.3 构建文件(Build File)355

32.3.4 构建目标模式(Build Target Pattern)356

32.4 项目改造实战 357

32.4.1 步骤一:手动下载工程依赖的第三方Jar包或者aar包357

32.4.2 步骤二:将R.* 常量修改为非final 的357

32.4.3 步骤三:创建BUCK 文件358

32.4.4 步骤四:编译Buck 的buck-android-support 363

32.4.5 步骤五:Exopackage 的使用363

32.5 Buck 的自动化改造 366

第5篇 性能优化篇

第33章 代码优化368

33.1 数据结构的选择 368

33.2 Handler 和内部类的正确用法 370

33.3 正确地使用Context373

33.3.1 Context 的种类374

33.3.2 错误使用Context 导致的内存泄漏374

33.3.3 不同Context 的对比376

33.4 掌握Java 的四种引用方式 376

33.5 其他代码微优化 377

33.5.1 避免创建非必要的对象377

33.5.2 对常量使用static final 修饰378

33.5.3 避免内部的Getters/Setters 378

33.5.4 代码的重构378

第34章 图片优化379

34.1 图片的格式 379

34.1.1 JPEG 380

34.1.2 PNG 380

34.1.3 GIF 380

34.1.4 WebP 380

34.2 图片的压缩 380

34.2.1 无损压缩ImageOptim 381

34.2.2 有损压缩ImageAlpha 381

34.2.3 有损压缩TinyPNG 381

34.2.4 PNG/JPEG 转换为WebP381

34.2.5 尽量使用NinePatch 格式的PNG 图382

34.3 图片的缓存 382

第35章 电量优化383

35.1 BroadcastReceiver383

35.2 数据传输 384

35.3 位置服务 384

35.4 AlarmManager386

35.5 WakeLock386

第36章 布局优化388

36.1 include 标签共享布局 388

36.2 ViewStub 标签实现延迟加载 389

36.3 merge 标签减少布局层次 391

36.4 尽量使用CompoundDrawable392

36.5 使用Lint393

第37章 网络优化395

37.1 避免DNS 解析 395

37.2 合并网络请求 395

37.3 预先获取数据 396

37.4 避免轮询 396

37.5 优化重连机制 396

37.6 离线缓存 396

37.7 压缩数据大小 396

37.8 不同的网络环境使用不同的超时策略 397

37.9 CDN 的使用 397

第6篇 移动安全篇

第38章 Android混淆机制详解400

38.1 Java 代码的混淆 400

38.1.1 Proguard 的特性401

38.1.2 Proguard 的使能和配置401

38.1.3 proguard-rules.pro 文件的编写404

38.1.4 Proguard 生成的文件407

38.1.5 Proguard 混淆规则汇总409

38.2 Native(C/C++)代码的混淆 409

38.3 资源文件的混淆 409

第39章 Android 反编译机制详解411

39.1 资源文件的反编译 411

39.1.1 ApkTool 的安装411

39.1.2 ApkTool 的使用412

39.2 Java 代码的反编译 413

第40章 客户端敏感信息隐藏技术研究414

40.1 敏感信息嵌套在strings.xml 中 415

40.2 敏感信息隐藏在Java 源代码中 415

40.3 敏感信息隐藏在BuildConfig 中 417

40.4 使用DexGuard418

40.5 对敏感信息进行伪装或者加密 419

40.6 敏感信息隐藏在原生函数库中(.so文件) 419

40.7 对APK进行加固处理 419

第41章 Android 加固技术研究421

41.1 爱加密的主要功能 421

41.1.1 漏洞分析421

41.1.2 加密服务422

41.1.3 渠道监测423

41.2 常见APP 漏洞及风险 423

41.2.1 静态破解423

41.2.2 二次打包424

41.2.3 本地储存数据窃取424

41.2.4 界面截取424

41.2.5 输入法攻击424

41.2.6 协议抓取424

41.3 Android 程序反破解技术 424

41.3.1 对抗反编译424

41.3.2 对抗静态分析425

41.3.3 对抗动态调试425

41.3.4 防止重编译425

41.4 加固技术研究知识储备 426

41.4.1 掌握常见的破解分析工具426

41.4.2 掌握Dalvik 指令集代码428

41.4.3 掌握Dex 和Odex 文件格式428

41.4.4 掌握Smali 文件格式428

41.4.5 掌握基于Android 的ARM 汇编语言基础428

第42章 Android安全编码429

42.1 WebView 远程代码执行 429

42.2 WebView 密码明文保存 430

42.3 Android 本地拒绝服务 431

42.3.1 非法序列化对象导致的ClassNotFoundException 431

42.3.2 空Action 导致的NullPointerException 432

42.3.3 强制类型转换导致的ClassCastException 433

42.3.4 数组越界导致的IndexOutOfBoundsException 433

42.4 SharedPreference 全局任意读写 434

42.5 密钥硬编码 434

42.6 AES/DES/RSA 弱加密 434

42.7 随机函数使用错误 437

42.8 WebView 忽略SSL 证书 438

42.9 HTTPS 证书弱校验 438

42.9.1 自定义X509TrustManager 未实现安全校验438

42.9.2 自定义HostnameVerifier 默认接受所有域名441

42.9.3 SSLSocketFactory 信任所有证书442

42.10 PendingIntent 使用不当 443

第7篇 工具篇

第43章 Android调试工具Facebook Stetho 446

43.1 视图布局监视 447

43.2 数据库监视 447

43.3 网络监视 448

43.3.1 网络模块使用的是HTTPUrlConnection 449

43.3.2 网络模块使用的是OkHttp 452

43.4 dumpapp454

43.4.1 插件的编写454

43.4.2 插件的集成456

43.4.3 插件的使用456

43.5 Javascript 控制台 457

43.6 最佳实践 457

第44章 内存泄漏检测函数库LeakCanary 460

44.1 基本概念 461

44.2 LeakCanary 的集成 461

44.3 LeakCanary 的原理 465

44.4 LeakCanary 的定制 469

44.4.1 RefWatcher 的自定义469

44.4.2 通知页面样式的自定义470

44.4.3 内存泄漏堆栈信息保存个数的自定义471

44.4.4 Watcher 的延时471

44.4.5 自定义内存泄漏堆栈信息和heap dump 的处理方式471

44.4.6 忽略特定的弱引用472

44.4.7 不监视特定的Activity 类472

第45章 基于Facebook Redex实现Android APK的压缩和优化474

45.1 转换的时机 474

45.2 管道的思想 475

45.3 减少字节码的意义 475

45.4 混淆和压缩 475

45.5 使用内联函数 476

45.6 无用代码的消除 477

45.7 Redex 的集成和使用 478

45.7.1 依赖的安装478

45.7.2 下载,构建和安装478

45.7.3 使用478

第46章 Android Studio你所需要知道的功能479

46.1 Annotate479

46.2 .ignore 插件 480

46.3 Live Templates481

46.4 集成Bug 管理系统 482

第8篇 测试篇

第47章 Android单元测试框架简介486

47.1 Java 单元测试框架JUnit486

47.2 Android 单元测试框架Robolectric 3.0488

47.3 Java 模拟测试框架Mockito490

47.3.1 行为的验证490

47.3.2 Stub(桩函数)的使用491

第48章 Android UI自动化测试框架简介492

48.1 Monkey492

48.2 MonkeyRunner493

48.3 UIAutomator493

48.4 Robotium494

48.5 Espresso494

48.6 Appium494

第49章 Android静态代码分析实战495

49.1 Java代码规范检查工具CheckStyle495

49.1.1 Gradle方式495

49.1.2 Android Studio插件方式497

49.2 Java静态代码分析工具FindBugs498

49.2.1 Gradle方式498

49.2.2 Android Studio插件方式499

49.3 Java静态代码分析工具PMD500

49.3.1 Gradle方式500

49.3.2 Android Studio插件方式501

49.4 Android代码优化工具Lint501

49.4.1 Gradle方式501

49.4.2 Android Studio插件方式502

第50章 基于Jenkins+Gradle搭建Android持续集成编译环境503

50.1 Tomcat的下载和启动 503

50.2 Jenkins的下载和运行 505

50.3 Jenkins插件的安装 506

50.4 Jenkins全局配置 507

50.4.1 配置JDK 环境507

50.4.2 配置Android SDK 环境507

50.4.3 配置Git 环境508

50.4.4 配置SVN 环境508

50.4.5 配置Gradle 环境508

50.5 JOB相关的操作 508

50.5.1 JOB 的创建508

50.5.2 JOB 的配置509

50.5.3 Gradle 的配置510

50.5.4 构建触发器的配置511

50.5.5 参数化构建514

50.6 Jenkins预定义的环境变量 514[1]

相关TAG标签
上一篇:Android基础教程:第3版
下一篇:Android移动编程实用教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站