×
超值优惠券
¥50
100可用 有效期2天

全场图书通用(淘书团除外)

关闭
暂无评论
图文详情
  • ISBN:9787115612618
  • 装帧:平装
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:388
  • 出版时间:2023-07-01
  • 条形码:9787115612618 ; 978-7-115-61261-8

本书特色

1.开启数据新时代:由神策数据专业团队倾力打造,结合实战案例,通过深入浅出的方式,揭示了ASM技术和Android全埋点技术的奥秘。让您拥有玩转数据的先机!

2.行业先进技术:作者王灼洲、张伟是业内杰出人才,在移动开发领域有超过十年的经验,分别撰写过《Android 全埋点解决方案》和《iOS 全埋点解决方案》,为您呈现前沿的ASM技术和全埋点开发实践。

3.满足用户需求:行业用户对全埋点技术的需求迫切。本书详细、客观地阐述了ASM在Android全埋点中的应用。覆盖各种真实商业场景,并清晰地讲解其技术原理和实现步骤,助您充分利用全埋点技术的特长和优势。

4.非专业工程师的福音:作为一本技术参考书,本书特别适合非专业开发工程师在日常工作中使用。书中将复杂的技术内容解读为通俗易懂的语言,让您轻松掌握与自动化埋点相关的知识,实现数据采集的无缝衔接。

6.详尽深入的技术指南:无论是想学习技术的开发人员还是相关研究者,本书都是实用的参考书。涵盖插件开发和全埋点技术,详细介绍Android插件开发的基础知识,讲解字节码基础和ASM技术的应用。通过本书,您将掌握全埋点开发的核心概念和实现方法,能够独立完成插件开发和全埋点实践。

内容简介

本书由业内专业团队神策数据的专业人士编写,结合实战案例,深入浅出地介绍了ASM技术和Android全埋点技术。 作者从神策数据服务超过2000家客户的经历中,发现了行业用户对全埋点技术的迫切需求。本书针对这一点,详细、客观地阐述了ASM在Android全埋点中的应用,涵盖各种真实商业场景,并清晰地讲解其技术原理和实现步骤,以帮助用户利用好全埋点技术的特长和优势。 本书作为一本技术参考书,特别适合非专业开发工程师在日常工作中使用。

目录

1 Gradle插件介绍

1.1 什么是Gradle插件 /002

1.2 Gradle基础知识 /002

1.2.1 学习前提 /002

1.2.2 Gradle项目结构 /002

1.2.3 生命周期 /004

1.2.4 Project API介绍 /005

1.2.5 Gradle任务介绍 /007

1.2.6 生命周期回调 /013

1.2.7 Gradle执行流程 /018

1.2.8 获取属性的几种常见方式 /018

1.2.9 任务执行后的几种状态 /018

1.2.10 增量构建 /019

1.3 插件类型 /022

1.3.1 脚本插件 /022

1.3.2 buildSrc插件 /024

1.3.3 单独项目插件 /025

1.3.4 单独项目插件优化 /028

1.3.5 插件使用方式 /032

1.3.6 小结 /034

1.4 Gradle扩展 /035

1.4.1 什么是扩展 /035

1.4.2 ExtensionContainer API介绍 /035

1.4.3 创建扩展 /038

1.4.4 添加和查找扩展 /040

1.4.5 扩展嵌套 /042

1.4.6 NamedDomainObjectContainer /043

1.5 综合示例 /050

1.5.1 概述 /050

1.5.2 集成步骤 /051

1.6 插件发布 /055

1.6.1 Gradle Plugin Portal /055

1.6.2 Maven Central简介 /059

1.6.3 上传到Maven Central /060

1.7 插件调试 /067

1.7.1 输出日志 /067

1.7.2 断点调试 /068

1.8 小结 /070



2 Transform介绍

2.1 Android应用的构建 /072

2.1.1 什么是APK文件 /072

2.1.2 什么是DEX文件 /073

2.1.3 Android应用的构建流程 /073

2.2 Transform简介 /076

2.3 Transform的简单应用 /076

2.4 Transform API详细介绍 /079

2.4.1 getName() /080

2.4.2 getInputTypes() /081

2.4.3 getScopes() /082

2.4.4 transform() /085

2.4.5 getReferencedScopes() /090

2.4.6 isIncremental() /091

2.4.7 isCacheable() /092

2.4.8 getSecondaryFiles() /092

2.5 Transform模板 /094

2.6 并发编译 /101

2.7 Transform原理介绍 /102

2.8 小结 /106



3 字节码基础

3.1 Java虚拟机 /108

3.2 javap工具介绍 /108

3.3 特定名称介绍 /113

3.3.1 字段描述符、方法描述符 /113

3.3.2 全限定名 /114

3.3.3  和 /116

3.4 .class文件结构 /117

3.4.1 初识 .class文件 /117

3.4.2 .class文件的组成 /118

3.5 小结 /151



4 字节码指令

4.1 Java虚拟机栈 /154

4.2 栈帧 /155

4.3 局部变量表 /156

4.4 操作数栈 /158

4.5 字节码指令介绍 /159

4.5.1 加载和存储指令 /160

4.5.2 算术指令 /163

4.5.3 类型转换指令 /166

4.5.4 对象的创建和操作指令 /167

4.5.5 操作数栈管理指令 /171

4.5.6 控制转移指令 /175

4.5.7 方法调用和返回指令 /179

4.5.8 异常抛出指令 /180

4.5.9 同步指令 /180

4.6 方法调用 /181

4.6.1 invokevirtual指令 /181

4.6.2 invokestatic指令 /182

4.6.3 invokespecial指令 /183

4.6.4 invokeinterface指令 /185

4.6.5 方法调用指令的区别和方法分派 /185

4.6.6 invokedynamic指令 /191

4.7 案例分析 /195

4.7.1 System.out.println /195

4.7.2 switch-case与String /195

4.7.3 for循环原理 /198

4.7.4 try-catch-finally原理 /198

4.8 加载、链接、初始化 /203

4.8.1 加载时机 /204

4.8.2 加载过程 /205

4.8.3 字节码剖析 /207

4.9 字节码指令偏移 /211

4.10 Java虚拟机中的数据类型 /212

4.10.1 基本数据类型 /213

4.10.2 引用数据类型 /214

4.11 小结 /214



5 ASM基础

5.1 ASM简介 /216

5.2 ASM组成 /216

5.3 ClassReader API介绍 /217

5.3.1 构造方法 /217

5.3.2 accept()方法 /219

5.4 ClassVisitor API介绍 /221

5.4.1 ClassVisitor()构造方法 /222

5.4.2 visit() /223

5.4.3 visitSource() /223

5.4.4 visitModule() /223

5.4.5 visitNestHost() /224

5.4.6 visitNestMember() /227

5.4.7 visitInnerClass() /228

5.4.8 visitOuterClass() /228

5.4.9 visitField() /228

5.4.10 visitMethod() /229

5.4.11 visitAnnotation() /230

5.4.12 visitTypeAnnotation() /230

5.4.13 visitPermittedSubclass() /232

5.4.14 visitRecordComponent() /232

5.4.15 visitEnd() /233

5.5 ClassWriter API介绍 /233

5.5.1 构造方法 /233

5.5.2 toByteArray() /233

5.6 类的转换和修改 /235

5.6.1 转换类的方式 /235

5.6.2 删除Class成员 /239

5.6.3 增加Class成员 /240

5.6.4 修改Class成员 /242

5.7 MethodVisitor API介绍 /245

5.7.1 visitParameter() /248

5.7.2 visitAnnotationDefault() /249

5.7.3 visitAnnotation() /249

5.7.4 visitTypeAnnotation() /250

5.7.5 visitAnnotableParameterCount()和visitParameterAnnotation() /251

5.7.6 visitAttribute() /252

5.7.7 visitCode() /252

5.7.8 visitInsn() /252

5.7.9 visitIntInsc() /253

5.7.10 visitVarInsn() /253

5.7.11 visitTypeInsn() /253

5.7.12 visitFieldInsn() /254

5.7.13 visitMethodInsn() /254

5.7.14 visitInvokeDynamicInsn() /254

5.7.15 visitLabel() /256

5.7.16 visitJumpInsn() /256

5.7.17 visitLdcInsn() /257

5.7.18 visitIincInsn() /258

5.7.19 visitTableSwitchInsn() /258

5.7.20 visitLookupSwitchInsn() /259

5.7.21 visitTryCatchBlock() /261

5.7.22 visitLocalVariable和visitLineNumber() /261

5.7.23 visitFrame() /261

5.7.24 visitMaxs() /263

5.7.25 visitEnd() /264

5.8 方法的转换和修改 /264

5.8.1 方法生成 /264

5.8.2 删除方法和方法体内容 /266

5.8.3 优化方法中的指令 /267

5.9 ASM工具包介绍 /269

5.9.1 Type /269

5.9.2 TraceClassVisitor /270

5.9.3 CheckClassAdapter /271

5.9.4 ASMifier /274

5.9.5 TraceMethodVisitor /278

5.9.6 CheckMethodAdapter /278

5.9.7 LocalVariableSorter /278

5.9.8 GeneratorAdapter /282

5.9.9 AdviceAdapter /283

5.10 其他实例 /284

5.10.1 方法替换 /284

5.10.2 方法参数复用 /286

5.11 小结 /288



6 ASM基础之Tree API

6.1 Tree API简介 /290

6.2 ClassNode API介绍 /290

6.2.1 类的生成 /293

6.2.2 类的转换和修改 /294

6.3 ClassNode与Core API相互转换 /295

6.3.1 ClassNode的特性 /296

6.3.2 与Core API相互转换 /296

6.4 MethodNode API介绍 /299

6.4.1 方法的生成 /303

6.4.2 方法的转换和修改 /304

6.5 MethodNode与Core API相互转换 /305

6.5.1 MethodNode的特性 /305

6.5.2 与Core API相互转换 /305

6.6 Core API和Tree API如何选择 /307

6.7 其他 /307

6.7.1 方法分析 /307

6.7.2 兼容性探讨 /311

6.7.3 Attribute /314

6.7.4 ASM框架分析 /315

6.8 小结 /322



7 ASM实现全埋点——基础部分

7.1 目标 /324

7.2 实现步骤 /324

7.2.1 创建Demo工程和SDK模块 /324

7.2.2 创建插件框架 /328

7.2.3 编写插件逻辑 /332

7.2.4 验证 /335

7.2.5 发布 /336

7.3 小结 /336



8 ASM实现全埋点——进阶部分

8.1 黑名单 /338

8.2 防止多次插入 /341

8.3 方法前插还是后插 /344

8.4 支持Lambda和方法引用 /346

8.4.1 原因分析 /346

8.4.2 Lambda表达式的实现原理 /347

8.4.3 Lambda设计参考 /360

8.4.4 Hook Lambda和方法引用 /365

8.5 小结 /376



9 ASM实践分享和未来展望

9.1 是否可以注册多个Transform /378

9.2 插入代码是否会改变行号 /378

9.3 是否支持Kotlin /380

9.4 ASM如何处理继承关系 /381

9.4.1 ClassLoader方式 /382

9.4.2 类图方式 /384

9.5 慎用static变量 /384

9.6 AGP 7的变化 /385

9.7 小结 /388
展开全部

作者简介

王灼洲是《Android 全埋点解决方案》《iOS 全埋点解决方案》作者,担任数据治理研发部负责,有超过十年的Android & iOS 相关开发经验,是国内早期从事 Android 研发工作的工程师。 张伟,从事移动研发工作超过十年,在神策主要负责埋点技术研究工作。编写过Flutter全埋点解决方案。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航