- 博客(15)
- 资源 (2)
- 收藏
- 关注
原创 【Android字节码插桩实战】字节码插桩——双击防抖
摘要:本文介绍了在Android开发中实现双击防抖功能的方案,通过自定义注解和ASM字节码插桩技术实现。首先定义@DoubleClickCheck注解标注需要防抖的方法,指定间隔时间和提示信息。然后使用ASM在编译期修改字节码:为类添加记录点击时间的字段,在被注解方法开头插入时间判断逻辑。当检测到快速双击时,会打印提示信息并返回;否则更新点击时间并执行原逻辑。这种方案无需修改源代码,通过注解配置即可实现精准的点击防抖控制。
2025-11-14 15:10:42
65
原创 【Android字节码插桩实战】字节码(五)同步指令
摘要:Java中的同步通过监视器锁实现,对应字节码指令monitorenter和monitorexit。同步代码块会生成两个monitorexit指令分别处理正常和异常情况,而同步方法通过ACC_SYNCHRONIZED标志实现,实例方法锁this对象,静态方法锁Class对象。JVM在调用ACC_SYNCHRONIZED方法时会自动获取并释放监视器锁。
2025-11-10 10:19:43
54
原创 【Android字节码插桩实战】字节码(四)控制转移指令
控制转移指令通过修改程序计数器改变执行流程,包含条件分支(if_icmple等)、无条件跳转(goto)和表跳转(tableswitch/lookupswitch)。条件分支实现if-else和循环;表跳转分别针对连续和稀疏case值优化switch性能;异常处理则通过异常表实现try-catch-finally。这些指令共同支持程序流程控制,示例代码展示了它们的具体应用和字节码表示。
2025-11-07 10:13:39
69
原创 Android Drawable目录ldpi、mdpi、hdpi、xhdpi、xxhdpi屏幕密度适配
本文介绍了Android开发中屏幕密度的基础概念和资源适配方案。核心内容包括:1) 解释分辨率、屏幕密度(dpi)、dp单位等基本概念;2) 详细说明ldpi至xxxhdpi六种标准密度目录的对应参数和适用设备;3) 阐述系统自动选择资源目录的原理和计算公式;4) 通过具体示例演示图片在不同密度设备上的缩放计算过程。文章强调为每个密度目录提供按标准比例缩放的图片资源,才能在所有设备上获得最佳显示效果,避免图片模糊或失真问题。
2025-11-06 16:01:45
3505
原创 【Android字节码插桩实战】字节码(三)操作数栈指令
操作数栈(Operand Stack)是JVM栈帧的重要组成部分,用于存储计算过程中的中间结果和临时数据。它是一个后进先出(LIFO)的数据结构。
2025-11-06 10:00:26
53
原创 【Android字节码插桩实战】字节码(二)对象创建和访问指令
通常将Java字节码指令分为多个类别,如加载和存储、算术运算、类型转换、对象创建与操作、操作数栈管理、控制转移、方法调用和返回等。这里我们重点关注“创建和访问指令”,这主要包括对象的创建、数组的创建、以及字段的访问指令。这些指令在Java字节码中非常常见,是操作对象和数组的基础。创建和访问指令主要围绕和这两种复合数据类型进行操作。
2025-11-05 20:31:11
55
原创 【Android字节码插桩实战】字节码(一)加载,存储和运算指令
Java字节码由操作码和操作数组成,操作码代表特定操作,操作数提供参数支持。JVM指令对数据类型支持有限,byte、short等类型运算时会转换为int类型处理。指令按功能分为9类,包括加载存储、运算、类型转换等。加载存储指令实现变量与操作数栈的交互,运算指令支持算术和位运算操作。不同类型的常量通过iconst、ldc等指令加载,数值运算通过iadd、fadd等指令实现。字节码设计体现了JVM对数据类型的高效处理机制。
2025-11-04 20:34:18
151
原创 【Android字节码插桩实战】Java虚拟机--栈帧、操作数栈和局部变量表
摘要:栈帧是JVM方法调用的核心数据结构,包含局部变量表和操作数栈等组件。局部变量表存储方法参数和局部变量,以变量槽为单位,64位数据占用两个槽位。操作数栈是方法执行的临时工作区,32位数据占1个栈位,64位占2个。二者容量均在编译期确定,共同支撑字节码指令的执行。栈帧的生命周期与方法调用同步,具有线程私有特性,是理解JVM执行机制的关键基础。
2025-10-30 20:24:46
69
原创 【Android字节码插桩实战】字节码基础 java class文件结构解析
本文详细介绍了Java Class文件结构与字节码操作。首先通过示例展示如何使用ASM工具进行字节码处理,然后以Animal类为例,解析Class文件的核心组成部分。重点讲解了魔数、版本号、常量池(包含Class、FieldRef、MethodRef等7种常量类型)、字段信息和方法信息等关键结构,并提供了Oracle官方文档参考。文章通过具体代码段(如插入日志语句)和javap反编译结果,直观展示了Class文件内部的组织形式和各部分功能,为深入理解字节码操作奠定了基础。
2025-10-29 20:02:15
69
原创 【Android字节码插桩实战】Gradle 插件开发和详解
本文详细介绍了如何开发独立项目的Gradle插件以实现ASM字节码插桩。主要内容包括:首先解释了Gradle插件的基础概念和作用,重点阐述了独立项目插件的实现过程,包括创建Java库模块、配置build.gradle、实现Plugin接口、参数扩展配置等核心环节。具体说明了通过ExtensionContainer处理插件参数的方法,以及如何定义插件名称并发布到本地仓库。最后给出了主工程引用插件的配置方法,并简要讨论了字节码插桩技术在性能监控、安全审计等多个领域的应用价值。整个过程涵盖了从插件开发到集成应用的
2025-10-29 11:32:08
70
原创 【Android字节码插桩实战】Transform详解和工作流程
本文介绍了Android开发中Transform API的使用,它允许开发者在构建过程中操作.class文件。Transform继承自Transform类,通过核心方法transform实现对字节码的修改,支持处理目录和JAR文件。文章详细讲解了Transform的工作流程、核心接口实现、输入输出处理、类文件过滤、JAR包遍历等关键步骤,并介绍了Transform名称、作用范围、作用域和增量编译等配置选项。通过结合ASM字节码操作库,Transform可以实现在Gradle构建过程中自动对项目代码进行插桩处
2025-10-28 16:30:33
110
原创 【Android字节码插桩实战】ASM字节码操作详解
ASM是一个Java字节码操作框架,可直接修改已编译的类文件或动态生成类,常用于Android开发的代码插桩(如埋点、性能检测等)典型应用包括添加字段/方法、方法耗时统计等,通过自定义ClassVisitor和MethodVisitor实现。
2025-10-27 18:04:19
126
原创 机器学习—感知机(Perceptron)
感知机(perceptron)是线性二分类的分类模型,输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机的模型为: f(x)=sign(w*x+b)其中sign为激活函数。
2024-10-18 20:06:30
1244
1
原创 机器学习—多元线性回归
多元线性回归指的就是一个样本有多个特征的线性回归问题。对于一个有个特征的样本而言,可以看作为多个自变量X对一个因变量Y的影响情况,
2024-10-18 14:37:57
594
利用gradle插件进行asm字节码插桩统计方法耗时统计
2025-10-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅