图书介绍

Android高级进阶2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

Android高级进阶
  • 顾浩鑫著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:7121298455
  • 出版时间:2016
  • 标注页数:516页
  • 文件大小:43MB
  • 文件页数:538页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Android高级进阶PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1篇 基础篇2

第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 插值器Interpolator27

3.2.2 AlphaAnimation29

3.2.3 ScaleAnimation30

3.2.4 TranslateAnimation31

3.2.5 RotateAnimation32

3.2.6 自定义补间动画34

3.3 属性动画(Property Animation)34

3.3.1 Evaluator35

3.3.2 AnimatorSet36

3.3.3 ValueAnimator36

3.3.4 ObjectAnimator38

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 Central92

9.1 Maven Central和JCenter92

9.1.1 Maven Central93

9.1.2 JCenter93

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 步骤五:上传函数库到Bintray104

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

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

第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 BlockCanary142

第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篇 系统架构篇180

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

16.1 MVP的基本概念180

16.2 MVP与MVC的区别181

16.3 MVP的开源实现182

16.3.1 Android-Architecture182

16.3.2 TODO-MVP182

16.3.3 TODO-MVP-Loaders183

16.3.4 TODO-MVP-Clean183

16.3.5 TODO-Databinding184

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 EventBus193

18.3.2 otto194

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 Javadoc200

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 gson207

20.4.2 jackson207

20.4.3 Fastjson208

20.4.4 LoganSquare208

20.5 数据库操作能力210

20.5.1 ActiveAndroid210

20.5.2 ormlite211

20.5.3 greenDAO211

20.5.4 Realm212

20.6 网络通信能力213

20.6.1 android-async-http213

20.6.2 OkHttp215

20.6.3 Volley216

20.6.4 Retrofit217

20.7 图片缓存和显示能力217

20.7.1 BitmapFun218

20.7.2 Picasso218

20.7.3 Glide218

20.7.4 Fresco219

20.7.5 Android-Universal-Image-Loader219

第3篇 经验总结篇222

第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-pluginmgr232

22.2.2 dynamic-load-apk232

22.2.3 DynamicAPK232

22.2.4 DroidPlugin233

22.2.5 Small234

第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 shrinkResources249

24.5.3 resConfigs249

24.5.4 ndk.abiFilters250

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篇 新技术篇272

第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 ButterKnife280

27.3.2 RoboGuice282

27.3.3 Dagger285

27.3.4 Dagger2288

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 Homebrew304

29.1.2 nvm305

29.1.3 Node.js305

29.1.4 watchman306

29.1.5 flow306

29.2 Android开发环境的要求306

29.3 React Native工程配置307

29.3.1 安装react-native307

29.3.2 生成工程307

29.4 Android Studio工程概览308

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

29.5.1 下载react-native.aar314

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

29.5.3 Gradle本地依赖316

29.5.4 将node_modules上传到svn/git318

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 安装Watchman348

32.1.4 安装Android SDK和Android NDK348

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-support363

32.4.5 步骤五:Exopackage的使用363

32.5 Buck的自动化改造366

第5篇 性能优化篇368

第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/Setters378

33.5.4 代码的重构378

第34章 图片优化379

34.1 图片的格式379

34.1.1 JPEG380

34.1.2 PNG380

34.1.3 GIF380

34.1.4 WebP380

34.2 图片的压缩380

34.2.1 无损压缩ImageOptim381

34.2.2 有损压缩ImageAlpha381

34.2.3 有损压缩TinyPNG381

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篇 移动安全篇400

第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 非法序列化对象导致的ClassNotFoundException431

42.3.2 空Action导致的NullPointerException432

42.3.3 强制类型转换导致的ClassCastException433

42.3.4 数组越界导致的IndexOutOfBoundsException433

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篇 工具篇446

第43章 Android调试工具Facebook Stetho446

43.1 视图布局监视447

43.2 数据库监视447

43.3 网络监视448

43.3.1 网络模块使用的是HTTPUrlConnection449

43.3.2 网络模块使用的是OkHttp452

43.4 dumpapp454

43.4.1 插件的编写454

43.4.2 插件的集成456

43.4.3 插件的使用456

43.5 Javascript控制台457

43.6 最佳实践457

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

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篇 测试篇486

第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

热门推荐