Android高级进阶

Android高级进阶
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2016-10
版次: 1
ISBN: 9787121298455
定价: 89.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 536页
字数: 643千字
正文语种: 简体中文
122人买过
  • 《Android高级进阶》是Android的进阶学习指南,主要为Android初中级开发者进阶所需的知识,高级开发者也可以从本书中发现很多共鸣点。《Android高级进阶》从8个方面对50个知识点进行分类讲解,包括基础篇、系统架构篇、经验总结篇、新技术篇、性能优化篇、移动安全篇、工具篇、测试篇。熟练掌握这些知识点后,应该就能够应付实际项目开发中的绝大部分问题了。 
    《Android高级进阶》的主要目的在于给读者一个完整的Android中高级开发者知识图谱。笔者希望通过《Android高级进阶》的系统讲解,能够帮助读者在面试和工作中收获自己满意的成绩。 顾浩鑫,网络 ID:ASCE1885,平安金融科技移动研发工程师,目前主要从事 Android & React Native 相关研发工作,毕业于华中科技大学图像识别与人工智能研究所,曾先后就职于华为、百度、平安科技。, 第1篇 基础篇 

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

    1.1 触摸事件的类型 

    1.2 事件传递的三个阶段 

    1.3 View的事件传递机制 

    1.4 ViewGroup的事件传递机制 

    第2章 Android View的绘制流程 

    2.1 绘制的整体流程 

    2.2 MeasureSpec 

    2.3 Measure 

    2.4 Layout 

    2.5 Draw 

    第3章 Android 动画机制 

    3.1 逐帧动画(Frame Animation) 

    3.1.1 XML 资源文件方式 

    3.1.2 代码方式 

    3.2 补间动画(Tween Animation) 

    3.2.1 插值器 Interpolator 

    3.2.2 AlphaAnimation 

    3.2.3 ScaleAnimation 

    3.2.4 TranslateAnimation 

    3.2.5 RotateAnimation 

    3.2.6 自定义补间动画 

    3.3 属性动画(Property Animation) 

    3.3.1 Evaluator 

    3.3.2 AnimatorSet 

    3.3.3 ValueAnimator 

    3.3.4 ObjectAnimator 

    3.4 过渡动画(Transition Animation) 

    第4章 Support Annotation Library 使用详解 

    4.1 Nullness 注解 

    4.2 资源类型注解 

    4.3 类型定义注解 

    4.4 线程注解 

    4.5 RGB 颜色值注解 

    4.6 值范围注解 

    4.7 权限注解 

    4.8 重写函数注解 

    4.9 返回值注解 

    4.10 @VisibleForTesting 

    4.11 @Keep 

    第5章 Percent Support Library使用详解 

    第6章 Design Support Library使用详解 

    6.1 Snackbar 

    6.2 TextInputLayout 

    6.3 TabLayout 

    6.4 NavigationView 

    6.4.1 导航菜单 

    6.4.2 导航头部 

    6.5 FloatingActionButton 

    6.5.1 使用浮动操作按钮 

    6.5.2 其他选项 

    6.5.3 点击事件 

    6.6 CoordinatorLayout 

    6.7 CollapsingToolbarLayout 

    6.8 BottomSheetBehavior 

    第7章 Android Studio中的NDK开发 

    7.1 ABI的基本概念 

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

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

    7.3.1 配置 ndk.dir 变量 

    7.3.2 在 Gradle 中配置 NDK 模块 

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

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

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

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

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

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

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

    第8章 Gradle 必知必会 

    8.1 共享变量的定义 

    8.2 通用配置 

    8.3 aar 函数库的引用 

    8.4 签名和混淆的配置 

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

    9.1 Maven Central 和 JCenter 

    9.1.1 Maven Central 

    9.1.2 JCenter 

    9.2 Android Studio 获取函数库的原理 

    9.3 上传函数库到 JCenter 

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

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

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

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

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

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

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

    第10章 Builder模式详解 

    10.1 经典的 Builder 模式 

    10.2 Builder 模式的变种 

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

    10.4 开源函数库的例子 

    第11章 注解在 Android 中的应用 

    11.1 注解的定义 

    11.2 标准注解 

    11.2.1 编译相关注解 

    11.2.2 资源相关注解 

    11.2.3 元注解 

    11.3 运行时注解 

    11.4 编译时注解 

    11.4.1 定义注解处理器 

    11.4.2 注册注解处理器 

    11.4.3 android-apt插件 

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

    12.1 ANR 产生的原因 

    12.2 典型的 ANR 问题场景 

    12.3 ANR 的定位和分析 

    12.3.1 Logcat 日志信息 

    12.3.2 traces.txt 日志信息 

    12.4 ANR的避免和检测 

    12.4.1 StrictMode 

    12.4.2 BlockCanary 

    第13章 Android异步处理技术 

    13.1 Thread 

    13.2 HandlerThread 

    13.3 AsyncQueryHandler 

    13.4 IntentService 

    13.5 Executor Framework 

    13.6 AsyncTask 

    13.7 Loader 

    13.8 总结 

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

    14.1 Serializable 

    14.2 Parcelable 

    14.3 SQLiteDatabase 

    14.4 SharedPreferences 

    14.5 JSON 

    14.6 Protocol Buffers及Nano-Proto-Buffers 

    14.7 FlatBuffers 

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

    15.1 Java 调用 JavaScript 

    15.2 JavaScript 调用 Java 

    第2篇 系统架构篇 

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

    16.1 MVP 的基本概念 

    16.2 MVP 与 MVC 的区别 

    16.3 MVP 的开源实现 

    16.3.1 Android-Architecture 

    16.3.2 TODO-MVP 

    16.3.3 TODO-MVP-Loaders 

    16.3.4 TODO-MVP-Clean 

    16.3.5 TODO-Databinding 

    16.3.6 其他开源参考实现 

    16.4 MVP 的好处 

    16.5 MVP 存在的问题 

    第17章 MVVM模式及Android DataBinding实战 

    17.1 Data Binding 表达式 

    17.2 数据对象 

    17.3 数据绑定 

    17.4 事件绑定 

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

    18.1 为何要使用 

    18.2 原理 

    18.3 开源实现 

    18.3.1 EventBus 

    18.3.2 otto 

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

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

    19.1 Java 编码规范 

    19.1.1 源代码文件的定义 

    19.1.2 源代码文件的结构 

    19.1.3 遵循的格式 

    19.1.4 命名约定 

    19.1.5 Javadoc 

    19.2 Android 命名规范 

    19.2.1 布局文件的命名 

    19.2.2 资源文件的命名 

    19.2.3 类的命名 

    19.3 CheckStyle 的使用 

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

    20.1 APP 的整体架构 

    20.2 技术选型的考量点 

    20.3 日志记录能力 

    20.4 JSON 解析能力 

    20.4.1 gson 

    20.4.2 jackson 

    20.4.3 Fastjson 

    20.4.4 LoganSquare 

    20.5 数据库操作能力 

    20.5.1 ActiveAndroid 

    20.5.2 ormlite 

    20.5.3 greenDAO 

    20.5.4 Realm 

    20.6 网络通信能力 

    20.6.1 android-async-http 

    20.6.2 OkHttp 

    20.6.3 Volley 

    20.6.4 Retrofit 

    20.7 图片缓存和显示能力 

    20.7.1 BitmapFun 

    20.7.2 Picasso 

    20.7.3 Glide 

    20.7.4 Fresco 

    20.7.5 Android-Universal-Image-Loader 

    第3篇 经验总结篇 

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

    21.1 64K 限制的原因 

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

    21.2.1 Android 5.0 之前的版本 

    21.2.2 Android 5.0 及之后的版本 

    21.3 如何避免出现 64K 限制 

    21.4 配置 MultiDex 

    21.5 MultiDex Support Library 的局限性 

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

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

    22.1 基本概念 

    22.1.1 宿主和插件 

    22.1.2 ClassLoader 机制 

    22.2 开源框架 

    22.2.1 android-pluginmgr 

    22.2.2 dynamic-load-apk 

    22.2.3 DynamicAPK 

    22.2.4 DroidPlugin 

    22.2.5 Small 

     

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

    23.1 推送的开源实现方案 

    23.1.1 基于 XMPP 协议 

    23.1.2 基于 MQTT 协议 

    23.2 推送的第三方平台 

    23.3 自己实现推送功能 

    23.3.1 长连接的建立(TCPConnectThread) 

    23.3.2 数据的发送(TCPSendThread) 

    23.3.3 数据的接收(TCPReceiveThread) 

    23.3.4 心跳包的实现(TCPHeartBeatThread) 

    第24章 APP 瘦身经验总结 

    24.1 APP 为什么变胖了 

    24.2 从 APK 文件的结构说起 

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

    24.3.1 无损压缩 [ImageOptim] 

    24.3.2 有损压缩 [ImageAlpha] 

    24.3.3 有损压缩 [TinyPNG] 

    24.3.4 PNG/JPEG 转换为 WebP 

    24.3.5 尽量使用 NinePatch 格式的 PNG 图 

    24.4 使用 Lint 删除无用资源 

    24.5 利用 Android Gradle 配置 

    24.5.1 minifyEnable 

    24.5.2 shrinkResources 

    24.5.3 resConfigs 

    24.5.4 ndk.abiFilters 

    24.6 重构和优化代码 

    24.7 资源混淆 

    24.8 插件化 

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

    25.1 Java 层 Crash 捕获机制 

    25.1.1 基本原理 

    25.1.2 线程信息 

    25.1.3 SharedPreference 信息 

    25.1.4 系统设置 

    21.1.5 Logcat 中的日志记录 

    25.1.6 自定义 Log 文件中的内容 

    25.1.7 MemInfo 信息 

     

    25.2 Native 层 Crash 捕获机制 

    25.3 Crash 的上报 

    第4篇 新技术篇 

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

    26.1 代码的简化 

    26.2 Operators 简介 

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

    27.1 基本概念 

    27.1.1 构造函数注入 

    27.1.2 Setter 函数注入 

    27.1.3 接口注入 

    27.2 为何需要框架 

    27.3 开源框架的选择 

    27.3.1 ButterKnife 

    27.3.2 RoboGuice 

    27.3.3 Dagger 

    27.3.4 Dagger2 

    27.3.5 框架的对比 

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

    28.1 选择 Kotlin 的原因 

    28.2 Kotlin 的安装和配置 

    28.3 Kotlin 语言的特性 

    28.3.1 可表达性 

    28.3.2 空类型安全 

    28.3.3 扩展函数 

    28.4 Kotlin 的 Gradle 配置 

    28.5 将 Java 类转换成 Kotlin 类 

    28.6 相关资料 

    第29章 React Native For Android入门指南 

    29.1 环境配置 

    29.1.1 Homebrew 

    29.1.2 nvm 

    29.1.3 Node.js 

    29.1.4 watchman 

    29.1.5 flow 

    29.2 Android 开发环境的要求 

    29.3 React Native 工程配置 

    29.3.1 安装react-native 

    29.3.2 生成工程 

    29.4 Android Studio 工程概览 

    29.5 React Native 依赖库修改为本地 

    29.5.1 下载 react-native.aar 

    29.5.2 react-native.aar 的文件内容 

    29.5.3 Gradle 本地依赖 

    29.5.4 将 node_modules 上传到 svn/git 

    29.6 React Native 学习建议 

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

    30.1 在线热修复的基本流程 

    30.2 Dexposed 

    30.2.1 如何集成 

    30.2.2 基本用法 

    30.2.3 在线热修复 

    30.2.4 平台的限制 

    30.3 AndFix 

    30.3.1 如何集成 

    30.3.2 补丁包生成工具 

    30.3.3 平台的限制 

    30.4 Nuwa 

    30.4.1 基本原理 

    30.4.2 如何集成 

    30.4.3 补丁生成工具 

    30.4.4 平台的限制 

    30.5 总结 

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

    31.1 AOP 的基本概念 

    31.2 代码织入的时机 

    31.3 基于 AspectJ 实现 Android 平台的 AOP 

    31.3.1 Hugo 的用法简介 

    31.3.2 Hugo 的实现原理 

    31.4 其他 AOP 开源框架 

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

    32.1 Buck环境配置 

    32.1.1 Homebrew 方式 

    32.1.2 手动构建方式 

    32.1.3 安装 Watchman 

    32.1.4 安装 Android SDK 和 Android NDK 

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

    32.3 Buck 的基本概念 

    32.3.1 构建规则(Build Rule) 

    32.3.2 构建目标(Build Target) 

    32.3.3 构建文件(Build File) 

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

    32.4 项目改造实战 

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

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

    32.4.3 步骤三:创建 BUCK 文件 

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

    32.4.5 步骤五:Exopackage 的使用 

    32.5 Buck 的自动化改造 

    第5篇 性能优化篇 

    第33章 代码优化 

    33.1 数据结构的选择 

    33.2 Handler 和内部类的正确用法 

    33.3 正确地使用 Context 

    33.3.1 Context 的种类 

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

    33.3.3 不同 Context 的对比 

    33.4 掌握 Java 的四种引用方式 

    33.5 其他代码微优化 

    33.5.1 避免创建非必要的对象 

    33.5.2 对常量使用 static final 修饰 

    33.5.3 避免内部的 Getters/Setters 

    33.5.4 代码的重构 

    第34章 图片优化 

    34.1 图片的格式 

    34.1.1 JPEG 

    34.1.2 PNG 

    34.1.3 GIF 

    34.1.4 WebP 

    34.2 图片的压缩 

    34.2.1 无损压缩 ImageOptim 

    34.2.2 有损压缩 ImageAlpha 

    34.2.3 有损压缩 TinyPNG 

    34.2.4 PNG/JPEG 转换为 WebP 

    34.2.5 尽量使用 NinePatch 格式的 PNG 图 

    34.3 图片的缓存 

    第35章 电量优化 

    35.1 BroadcastReceiver 

    35.2 数据传输 

    35.3 位置服务 

    35.4 AlarmManager 

    35.5 WakeLock 

    第36章 布局优化 

    36.1 include 标签共享布局 

    36.2 ViewStub 标签实现延迟加载 

    36.3 merge 标签减少布局层次 

    36.4 尽量使用 CompoundDrawable 

    36.5 使用 Lint 

    第37章 网络优化 

    37.1 避免 DNS 解析 

    37.2 合并网络请求 

    37.3 预先获取数据 

    37.4 避免轮询 

    37.5 优化重连机制 

    37.6 离线缓存 

    37.7 压缩数据大小 

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

    37.9 CDN 的使用 

    第6篇 移动安全篇 

    第38章 Android混淆机制详解 

    38.1 Java 代码的混淆 

    38.1.1 Proguard 的特性 

    38.1.2 Proguard 的使能和配置 

    38.1.3 proguard-rules.pro 文件的编写 

    38.1.4 Proguard 生成的文件 

    38.1.5 Proguard 混淆规则汇总 

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

    38.3 资源文件的混淆 

    第39章 Android 反编译机制详解 

    39.1 资源文件的反编译 

    39.1.1 ApkTool 的安装 

    39.1.2 ApkTool 的使用 

    39.2 Java 代码的反编译 

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

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

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

    40.3 敏感信息隐藏在 BuildConfig 中 

    40.4 使用 DexGuard 

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

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

    40.7 对APK进行加固处理 

    第41章 Android 加固技术研究 

    41.1 爱加密的主要功能 

    41.1.1 漏洞分析 

    41.1.2 加密服务 

    41.1.3 渠道监测 

    41.2 常见 APP 漏洞及风险 

    41.2.1 静态破解 

    41.2.2 二次打包 

    41.2.3 本地储存数据窃取 

    41.2.4 界面截取 

    41.2.5 输入法攻击 

    41.2.6 协议抓取 

    41.3 Android 程序反破解技术 

    41.3.1 对抗反编译 

    41.3.2 对抗静态分析 

    41.3.3 对抗动态调试 

    41.3.4 防止重编译 

    41.4 加固技术研究知识储备 

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

    41.4.2 掌握 Dalvik 指令集代码 

    41.4.3 掌握 Dex 和 Odex 文件格式 

    41.4.4 掌握 Smali 文件格式 

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

    第42章 Android安全编码 

    42.1 WebView 远程代码执行 

    42.2 WebView 密码明文保存 

    42.3 Android 本地拒绝服务 

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

    42.3.2 空 Action 导致的 NullPointerException 

    42.3.3 强制类型转换导致的 ClassCastException 

    42.3.4 数组越界导致的 IndexOutOfBoundsException 

    42.4 SharedPreference 全局任意读写 

    42.5 密钥硬编码 

    42.6 AES/DES/RSA 弱加密 

    42.7 随机函数使用错误 

    42.8 WebView 忽略 SSL 证书 

    42.9 HTTPS 证书弱校验 

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

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

    42.9.3 SSLSocketFactory 信任所有证书 

    42.10 PendingIntent 使用不当 

    第7篇 工具篇 

    第43章 Android调试工具Facebook Stetho 

    43.1 视图布局监视 

    43.2 数据库监视 

    43.3 网络监视 

    43.3.1 网络模块使用的是 HTTPUrlConnection 

    43.3.2 网络模块使用的是 OkHttp 

    43.4 dumpapp 

    43.4.1 插件的编写 

    43.4.2 插件的集成 

    43.4.3 插件的使用 

    43.5 Javascript 控制台 

    43.6 最佳实践 

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

    44.1 基本概念 

    44.2 LeakCanary 的集成 

    44.3 LeakCanary 的原理 

    44.4 LeakCanary 的定制 

    44.4.1 RefWatcher 的自定义 

    44.4.2 通知页面样式的自定义 

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

    44.4.4 Watcher 的延时 

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

    44.4.6 忽略特定的弱引用 

    44.4.7 不监视特定的 Activity 类 

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

    45.1 转换的时机 

    45.2 管道的思想 

    45.3 减少字节码的意义 

    45.4 混淆和压缩 

    45.5 使用内联函数 

    45.6 无用代码的消除 

    45.7 Redex 的集成和使用 

    45.7.1 依赖的安装 

    45.7.2 下载,构建和安装 

    45.7.3 使用 

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

    46.1 Annotate 

    46.2 .ignore 插件 

    46.3 Live Templates 

    46.4 集成 Bug 管理系统 

    第8篇 测试篇 

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

    47.1 Java 单元测试框架 JUnit 

    47.2 Android 单元测试框架 Robolectric 3.0 

    47.3 Java 模拟测试框架 Mockito 

    47.3.1 行为的验证 

    47.3.2 Stub(桩函数)的使用 

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

    48.1 Monkey 

    48.2 MonkeyRunner 

    48.3 UIAutomator 

    48.4 Robotium 

    48.5 Espresso 

    48.6 Appium 

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

    49.1 Java代码规范检查工具CheckStyle 

    49.1.1 Gradle方式 

    49.1.2 Android Studio插件方式 

    49.2 Java静态代码分析工具FindBugs 

    49.2.1 Gradle方式 

    49.2.2 Android Studio插件方式 

    49.3 Java静态代码分析工具PMD 

    49.3.1 Gradle方式 

    49.3.2 Android Studio插件方式 

    49.4 Android代码优化工具Lint 

    49.4.1 Gradle方式 

    49.4.2 Android Studio插件方式 

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

    50.1 Tomcat的下载和启动 

    50.2 Jenkins的下载和运行 

    50.3 Jenkins插件的安装 

    50.4 Jenkins全局配置 

    50.4.1 配置 JDK 环境 

    50.4.2 配置 Android SDK 环境 

    50.4.3 配置 Git 环境 

    50.4.4 配置 SVN 环境 

    50.4.5 配置 Gradle 环境 

    50.5 JOB相关的操作 

    50.5.1 JOB 的创建 

    50.5.2 JOB 的配置 

    50.5.3 Gradle 的配置 

    50.5.4 构建触发器的配置 

    50.5.5 参数化构建 

    50.6 Jenkins预定义的环境变量
  • 内容简介:
    《Android高级进阶》是Android的进阶学习指南,主要为Android初中级开发者进阶所需的知识,高级开发者也可以从本书中发现很多共鸣点。《Android高级进阶》从8个方面对50个知识点进行分类讲解,包括基础篇、系统架构篇、经验总结篇、新技术篇、性能优化篇、移动安全篇、工具篇、测试篇。熟练掌握这些知识点后,应该就能够应付实际项目开发中的绝大部分问题了。 
    《Android高级进阶》的主要目的在于给读者一个完整的Android中高级开发者知识图谱。笔者希望通过《Android高级进阶》的系统讲解,能够帮助读者在面试和工作中收获自己满意的成绩。
  • 作者简介:
    顾浩鑫,网络 ID:ASCE1885,平安金融科技移动研发工程师,目前主要从事 Android & React Native 相关研发工作,毕业于华中科技大学图像识别与人工智能研究所,曾先后就职于华为、百度、平安科技。,
  • 目录:
    第1篇 基础篇 

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

    1.1 触摸事件的类型 

    1.2 事件传递的三个阶段 

    1.3 View的事件传递机制 

    1.4 ViewGroup的事件传递机制 

    第2章 Android View的绘制流程 

    2.1 绘制的整体流程 

    2.2 MeasureSpec 

    2.3 Measure 

    2.4 Layout 

    2.5 Draw 

    第3章 Android 动画机制 

    3.1 逐帧动画(Frame Animation) 

    3.1.1 XML 资源文件方式 

    3.1.2 代码方式 

    3.2 补间动画(Tween Animation) 

    3.2.1 插值器 Interpolator 

    3.2.2 AlphaAnimation 

    3.2.3 ScaleAnimation 

    3.2.4 TranslateAnimation 

    3.2.5 RotateAnimation 

    3.2.6 自定义补间动画 

    3.3 属性动画(Property Animation) 

    3.3.1 Evaluator 

    3.3.2 AnimatorSet 

    3.3.3 ValueAnimator 

    3.3.4 ObjectAnimator 

    3.4 过渡动画(Transition Animation) 

    第4章 Support Annotation Library 使用详解 

    4.1 Nullness 注解 

    4.2 资源类型注解 

    4.3 类型定义注解 

    4.4 线程注解 

    4.5 RGB 颜色值注解 

    4.6 值范围注解 

    4.7 权限注解 

    4.8 重写函数注解 

    4.9 返回值注解 

    4.10 @VisibleForTesting 

    4.11 @Keep 

    第5章 Percent Support Library使用详解 

    第6章 Design Support Library使用详解 

    6.1 Snackbar 

    6.2 TextInputLayout 

    6.3 TabLayout 

    6.4 NavigationView 

    6.4.1 导航菜单 

    6.4.2 导航头部 

    6.5 FloatingActionButton 

    6.5.1 使用浮动操作按钮 

    6.5.2 其他选项 

    6.5.3 点击事件 

    6.6 CoordinatorLayout 

    6.7 CollapsingToolbarLayout 

    6.8 BottomSheetBehavior 

    第7章 Android Studio中的NDK开发 

    7.1 ABI的基本概念 

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

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

    7.3.1 配置 ndk.dir 变量 

    7.3.2 在 Gradle 中配置 NDK 模块 

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

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

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

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

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

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

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

    第8章 Gradle 必知必会 

    8.1 共享变量的定义 

    8.2 通用配置 

    8.3 aar 函数库的引用 

    8.4 签名和混淆的配置 

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

    9.1 Maven Central 和 JCenter 

    9.1.1 Maven Central 

    9.1.2 JCenter 

    9.2 Android Studio 获取函数库的原理 

    9.3 上传函数库到 JCenter 

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

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

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

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

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

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

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

    第10章 Builder模式详解 

    10.1 经典的 Builder 模式 

    10.2 Builder 模式的变种 

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

    10.4 开源函数库的例子 

    第11章 注解在 Android 中的应用 

    11.1 注解的定义 

    11.2 标准注解 

    11.2.1 编译相关注解 

    11.2.2 资源相关注解 

    11.2.3 元注解 

    11.3 运行时注解 

    11.4 编译时注解 

    11.4.1 定义注解处理器 

    11.4.2 注册注解处理器 

    11.4.3 android-apt插件 

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

    12.1 ANR 产生的原因 

    12.2 典型的 ANR 问题场景 

    12.3 ANR 的定位和分析 

    12.3.1 Logcat 日志信息 

    12.3.2 traces.txt 日志信息 

    12.4 ANR的避免和检测 

    12.4.1 StrictMode 

    12.4.2 BlockCanary 

    第13章 Android异步处理技术 

    13.1 Thread 

    13.2 HandlerThread 

    13.3 AsyncQueryHandler 

    13.4 IntentService 

    13.5 Executor Framework 

    13.6 AsyncTask 

    13.7 Loader 

    13.8 总结 

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

    14.1 Serializable 

    14.2 Parcelable 

    14.3 SQLiteDatabase 

    14.4 SharedPreferences 

    14.5 JSON 

    14.6 Protocol Buffers及Nano-Proto-Buffers 

    14.7 FlatBuffers 

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

    15.1 Java 调用 JavaScript 

    15.2 JavaScript 调用 Java 

    第2篇 系统架构篇 

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

    16.1 MVP 的基本概念 

    16.2 MVP 与 MVC 的区别 

    16.3 MVP 的开源实现 

    16.3.1 Android-Architecture 

    16.3.2 TODO-MVP 

    16.3.3 TODO-MVP-Loaders 

    16.3.4 TODO-MVP-Clean 

    16.3.5 TODO-Databinding 

    16.3.6 其他开源参考实现 

    16.4 MVP 的好处 

    16.5 MVP 存在的问题 

    第17章 MVVM模式及Android DataBinding实战 

    17.1 Data Binding 表达式 

    17.2 数据对象 

    17.3 数据绑定 

    17.4 事件绑定 

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

    18.1 为何要使用 

    18.2 原理 

    18.3 开源实现 

    18.3.1 EventBus 

    18.3.2 otto 

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

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

    19.1 Java 编码规范 

    19.1.1 源代码文件的定义 

    19.1.2 源代码文件的结构 

    19.1.3 遵循的格式 

    19.1.4 命名约定 

    19.1.5 Javadoc 

    19.2 Android 命名规范 

    19.2.1 布局文件的命名 

    19.2.2 资源文件的命名 

    19.2.3 类的命名 

    19.3 CheckStyle 的使用 

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

    20.1 APP 的整体架构 

    20.2 技术选型的考量点 

    20.3 日志记录能力 

    20.4 JSON 解析能力 

    20.4.1 gson 

    20.4.2 jackson 

    20.4.3 Fastjson 

    20.4.4 LoganSquare 

    20.5 数据库操作能力 

    20.5.1 ActiveAndroid 

    20.5.2 ormlite 

    20.5.3 greenDAO 

    20.5.4 Realm 

    20.6 网络通信能力 

    20.6.1 android-async-http 

    20.6.2 OkHttp 

    20.6.3 Volley 

    20.6.4 Retrofit 

    20.7 图片缓存和显示能力 

    20.7.1 BitmapFun 

    20.7.2 Picasso 

    20.7.3 Glide 

    20.7.4 Fresco 

    20.7.5 Android-Universal-Image-Loader 

    第3篇 经验总结篇 

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

    21.1 64K 限制的原因 

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

    21.2.1 Android 5.0 之前的版本 

    21.2.2 Android 5.0 及之后的版本 

    21.3 如何避免出现 64K 限制 

    21.4 配置 MultiDex 

    21.5 MultiDex Support Library 的局限性 

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

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

    22.1 基本概念 

    22.1.1 宿主和插件 

    22.1.2 ClassLoader 机制 

    22.2 开源框架 

    22.2.1 android-pluginmgr 

    22.2.2 dynamic-load-apk 

    22.2.3 DynamicAPK 

    22.2.4 DroidPlugin 

    22.2.5 Small 

     

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

    23.1 推送的开源实现方案 

    23.1.1 基于 XMPP 协议 

    23.1.2 基于 MQTT 协议 

    23.2 推送的第三方平台 

    23.3 自己实现推送功能 

    23.3.1 长连接的建立(TCPConnectThread) 

    23.3.2 数据的发送(TCPSendThread) 

    23.3.3 数据的接收(TCPReceiveThread) 

    23.3.4 心跳包的实现(TCPHeartBeatThread) 

    第24章 APP 瘦身经验总结 

    24.1 APP 为什么变胖了 

    24.2 从 APK 文件的结构说起 

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

    24.3.1 无损压缩 [ImageOptim] 

    24.3.2 有损压缩 [ImageAlpha] 

    24.3.3 有损压缩 [TinyPNG] 

    24.3.4 PNG/JPEG 转换为 WebP 

    24.3.5 尽量使用 NinePatch 格式的 PNG 图 

    24.4 使用 Lint 删除无用资源 

    24.5 利用 Android Gradle 配置 

    24.5.1 minifyEnable 

    24.5.2 shrinkResources 

    24.5.3 resConfigs 

    24.5.4 ndk.abiFilters 

    24.6 重构和优化代码 

    24.7 资源混淆 

    24.8 插件化 

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

    25.1 Java 层 Crash 捕获机制 

    25.1.1 基本原理 

    25.1.2 线程信息 

    25.1.3 SharedPreference 信息 

    25.1.4 系统设置 

    21.1.5 Logcat 中的日志记录 

    25.1.6 自定义 Log 文件中的内容 

    25.1.7 MemInfo 信息 

     

    25.2 Native 层 Crash 捕获机制 

    25.3 Crash 的上报 

    第4篇 新技术篇 

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

    26.1 代码的简化 

    26.2 Operators 简介 

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

    27.1 基本概念 

    27.1.1 构造函数注入 

    27.1.2 Setter 函数注入 

    27.1.3 接口注入 

    27.2 为何需要框架 

    27.3 开源框架的选择 

    27.3.1 ButterKnife 

    27.3.2 RoboGuice 

    27.3.3 Dagger 

    27.3.4 Dagger2 

    27.3.5 框架的对比 

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

    28.1 选择 Kotlin 的原因 

    28.2 Kotlin 的安装和配置 

    28.3 Kotlin 语言的特性 

    28.3.1 可表达性 

    28.3.2 空类型安全 

    28.3.3 扩展函数 

    28.4 Kotlin 的 Gradle 配置 

    28.5 将 Java 类转换成 Kotlin 类 

    28.6 相关资料 

    第29章 React Native For Android入门指南 

    29.1 环境配置 

    29.1.1 Homebrew 

    29.1.2 nvm 

    29.1.3 Node.js 

    29.1.4 watchman 

    29.1.5 flow 

    29.2 Android 开发环境的要求 

    29.3 React Native 工程配置 

    29.3.1 安装react-native 

    29.3.2 生成工程 

    29.4 Android Studio 工程概览 

    29.5 React Native 依赖库修改为本地 

    29.5.1 下载 react-native.aar 

    29.5.2 react-native.aar 的文件内容 

    29.5.3 Gradle 本地依赖 

    29.5.4 将 node_modules 上传到 svn/git 

    29.6 React Native 学习建议 

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

    30.1 在线热修复的基本流程 

    30.2 Dexposed 

    30.2.1 如何集成 

    30.2.2 基本用法 

    30.2.3 在线热修复 

    30.2.4 平台的限制 

    30.3 AndFix 

    30.3.1 如何集成 

    30.3.2 补丁包生成工具 

    30.3.3 平台的限制 

    30.4 Nuwa 

    30.4.1 基本原理 

    30.4.2 如何集成 

    30.4.3 补丁生成工具 

    30.4.4 平台的限制 

    30.5 总结 

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

    31.1 AOP 的基本概念 

    31.2 代码织入的时机 

    31.3 基于 AspectJ 实现 Android 平台的 AOP 

    31.3.1 Hugo 的用法简介 

    31.3.2 Hugo 的实现原理 

    31.4 其他 AOP 开源框架 

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

    32.1 Buck环境配置 

    32.1.1 Homebrew 方式 

    32.1.2 手动构建方式 

    32.1.3 安装 Watchman 

    32.1.4 安装 Android SDK 和 Android NDK 

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

    32.3 Buck 的基本概念 

    32.3.1 构建规则(Build Rule) 

    32.3.2 构建目标(Build Target) 

    32.3.3 构建文件(Build File) 

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

    32.4 项目改造实战 

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

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

    32.4.3 步骤三:创建 BUCK 文件 

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

    32.4.5 步骤五:Exopackage 的使用 

    32.5 Buck 的自动化改造 

    第5篇 性能优化篇 

    第33章 代码优化 

    33.1 数据结构的选择 

    33.2 Handler 和内部类的正确用法 

    33.3 正确地使用 Context 

    33.3.1 Context 的种类 

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

    33.3.3 不同 Context 的对比 

    33.4 掌握 Java 的四种引用方式 

    33.5 其他代码微优化 

    33.5.1 避免创建非必要的对象 

    33.5.2 对常量使用 static final 修饰 

    33.5.3 避免内部的 Getters/Setters 

    33.5.4 代码的重构 

    第34章 图片优化 

    34.1 图片的格式 

    34.1.1 JPEG 

    34.1.2 PNG 

    34.1.3 GIF 

    34.1.4 WebP 

    34.2 图片的压缩 

    34.2.1 无损压缩 ImageOptim 

    34.2.2 有损压缩 ImageAlpha 

    34.2.3 有损压缩 TinyPNG 

    34.2.4 PNG/JPEG 转换为 WebP 

    34.2.5 尽量使用 NinePatch 格式的 PNG 图 

    34.3 图片的缓存 

    第35章 电量优化 

    35.1 BroadcastReceiver 

    35.2 数据传输 

    35.3 位置服务 

    35.4 AlarmManager 

    35.5 WakeLock 

    第36章 布局优化 

    36.1 include 标签共享布局 

    36.2 ViewStub 标签实现延迟加载 

    36.3 merge 标签减少布局层次 

    36.4 尽量使用 CompoundDrawable 

    36.5 使用 Lint 

    第37章 网络优化 

    37.1 避免 DNS 解析 

    37.2 合并网络请求 

    37.3 预先获取数据 

    37.4 避免轮询 

    37.5 优化重连机制 

    37.6 离线缓存 

    37.7 压缩数据大小 

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

    37.9 CDN 的使用 

    第6篇 移动安全篇 

    第38章 Android混淆机制详解 

    38.1 Java 代码的混淆 

    38.1.1 Proguard 的特性 

    38.1.2 Proguard 的使能和配置 

    38.1.3 proguard-rules.pro 文件的编写 

    38.1.4 Proguard 生成的文件 

    38.1.5 Proguard 混淆规则汇总 

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

    38.3 资源文件的混淆 

    第39章 Android 反编译机制详解 

    39.1 资源文件的反编译 

    39.1.1 ApkTool 的安装 

    39.1.2 ApkTool 的使用 

    39.2 Java 代码的反编译 

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

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

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

    40.3 敏感信息隐藏在 BuildConfig 中 

    40.4 使用 DexGuard 

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

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

    40.7 对APK进行加固处理 

    第41章 Android 加固技术研究 

    41.1 爱加密的主要功能 

    41.1.1 漏洞分析 

    41.1.2 加密服务 

    41.1.3 渠道监测 

    41.2 常见 APP 漏洞及风险 

    41.2.1 静态破解 

    41.2.2 二次打包 

    41.2.3 本地储存数据窃取 

    41.2.4 界面截取 

    41.2.5 输入法攻击 

    41.2.6 协议抓取 

    41.3 Android 程序反破解技术 

    41.3.1 对抗反编译 

    41.3.2 对抗静态分析 

    41.3.3 对抗动态调试 

    41.3.4 防止重编译 

    41.4 加固技术研究知识储备 

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

    41.4.2 掌握 Dalvik 指令集代码 

    41.4.3 掌握 Dex 和 Odex 文件格式 

    41.4.4 掌握 Smali 文件格式 

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

    第42章 Android安全编码 

    42.1 WebView 远程代码执行 

    42.2 WebView 密码明文保存 

    42.3 Android 本地拒绝服务 

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

    42.3.2 空 Action 导致的 NullPointerException 

    42.3.3 强制类型转换导致的 ClassCastException 

    42.3.4 数组越界导致的 IndexOutOfBoundsException 

    42.4 SharedPreference 全局任意读写 

    42.5 密钥硬编码 

    42.6 AES/DES/RSA 弱加密 

    42.7 随机函数使用错误 

    42.8 WebView 忽略 SSL 证书 

    42.9 HTTPS 证书弱校验 

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

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

    42.9.3 SSLSocketFactory 信任所有证书 

    42.10 PendingIntent 使用不当 

    第7篇 工具篇 

    第43章 Android调试工具Facebook Stetho 

    43.1 视图布局监视 

    43.2 数据库监视 

    43.3 网络监视 

    43.3.1 网络模块使用的是 HTTPUrlConnection 

    43.3.2 网络模块使用的是 OkHttp 

    43.4 dumpapp 

    43.4.1 插件的编写 

    43.4.2 插件的集成 

    43.4.3 插件的使用 

    43.5 Javascript 控制台 

    43.6 最佳实践 

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

    44.1 基本概念 

    44.2 LeakCanary 的集成 

    44.3 LeakCanary 的原理 

    44.4 LeakCanary 的定制 

    44.4.1 RefWatcher 的自定义 

    44.4.2 通知页面样式的自定义 

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

    44.4.4 Watcher 的延时 

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

    44.4.6 忽略特定的弱引用 

    44.4.7 不监视特定的 Activity 类 

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

    45.1 转换的时机 

    45.2 管道的思想 

    45.3 减少字节码的意义 

    45.4 混淆和压缩 

    45.5 使用内联函数 

    45.6 无用代码的消除 

    45.7 Redex 的集成和使用 

    45.7.1 依赖的安装 

    45.7.2 下载,构建和安装 

    45.7.3 使用 

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

    46.1 Annotate 

    46.2 .ignore 插件 

    46.3 Live Templates 

    46.4 集成 Bug 管理系统 

    第8篇 测试篇 

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

    47.1 Java 单元测试框架 JUnit 

    47.2 Android 单元测试框架 Robolectric 3.0 

    47.3 Java 模拟测试框架 Mockito 

    47.3.1 行为的验证 

    47.3.2 Stub(桩函数)的使用 

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

    48.1 Monkey 

    48.2 MonkeyRunner 

    48.3 UIAutomator 

    48.4 Robotium 

    48.5 Espresso 

    48.6 Appium 

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

    49.1 Java代码规范检查工具CheckStyle 

    49.1.1 Gradle方式 

    49.1.2 Android Studio插件方式 

    49.2 Java静态代码分析工具FindBugs 

    49.2.1 Gradle方式 

    49.2.2 Android Studio插件方式 

    49.3 Java静态代码分析工具PMD 

    49.3.1 Gradle方式 

    49.3.2 Android Studio插件方式 

    49.4 Android代码优化工具Lint 

    49.4.1 Gradle方式 

    49.4.2 Android Studio插件方式 

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

    50.1 Tomcat的下载和启动 

    50.2 Jenkins的下载和运行 

    50.3 Jenkins插件的安装 

    50.4 Jenkins全局配置 

    50.4.1 配置 JDK 环境 

    50.4.2 配置 Android SDK 环境 

    50.4.3 配置 Git 环境 

    50.4.4 配置 SVN 环境 

    50.4.5 配置 Gradle 环境 

    50.5 JOB相关的操作 

    50.5.1 JOB 的创建 

    50.5.2 JOB 的配置 

    50.5.3 Gradle 的配置 

    50.5.4 构建触发器的配置 

    50.5.5 参数化构建 

    50.6 Jenkins预定义的环境变量
查看详情