ASM 框架字节码插桩的常见用法

作者&投稿:奚筠 (若有异议请与网页底部的电邮联系)
~ ASM 是一款 Java 字节码操作工具,允许开发者在不修改源代码的情况下,以字节码形式创建类、修改类属性和方法,常用于开发辅助框架。在 Android 开发中,通过字节码插桩技术,实现热修复、事件监听、埋点等功能,与 Gradle 插件协同使用。ASM API 可以从官网下载,包含从4.0到最新版本的所有 jar 包,同时,JDK 内置 asm API,而 Gradle 内置 API 适用于 Android 开发。建议在 Android Studio 安装 ASM 相关插件,以便更高效地使用字节码技术。

ASM 的常见使用场景包括生成完整类、修改现有类、方法注入和方法调用注入。

生成完整类时,建议使用 `ClassWriter` 的 `COMPUTE_FRAMES|COMPUTE_MAXS` 参数,自动更新操作数栈和方法调用帧计算。生成类后,可打包供他人使用,实现面向字节码编程。

修改类时,可以增加属性、删除或修改方法,如新增 `phone` 字段,删除 `testA` 方法,修改 `testC` 方法访问权限,新增 `getPhone` 方法。修改后,生成的类文件可替换原文件,重新打包入 jar。

方法注入时,通过 ASM 代码避开构造方法,注入新的方法调用,增加特定功能,如调用 `Tool.useTool()` 方法。

ASM 功能强大,支持丰富的字节码操作。更多细节和高级用法参见官方文档和 GitHub 仓库,为开发者提供了灵活、强大的字节码编程手段。


乾县13772318857: android 热部署是什么意思 -
盈甄金喜: 在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作.对于某些大型的应用来说,每次的重启都需要花费大量...

乾县13772318857: spring 框架 3.0 中 asm jar包 的作用 -
盈甄金喜: 主要是操作PO字节dng码的,在开发中java很少使用一个框架,当spring , hibernate整合时,他们两者都有asm.jar包,这是就是删除spring下的asm.jar包.

乾县13772318857: struts2为什么需要asm - tree3.3.jar包?asm - tree3.3.jar包的功能是什么 -
盈甄金喜: ASM是小巧轻便的 Java 字节码操控框架 ,它能方便地生成和改造 Java 代码.

乾县13772318857: asm是不是C语言关键字! -
盈甄金喜: 可以在C语言中内嵌汇编asm 格式:在TC2.0下是可以用汇编的,方法是使用asm关键字:其格式是: asm opcode <operands> <;newline>,不过使用以上的样式,要记住:每一句汇编语句都要以asm开头,如果一行内有多个句子,那么千万不...

乾县13772318857: ssh框架poi需要什么jar包 -
盈甄金喜: Hibernate Jar:1、hibernate3.jar,这个是hibernate3.0的核心jar包,没的选,像我们常用的Session,Query,Transaction都位于这个jar文件中,必要.2、cglib-2.1.3.jar,CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必要...

乾县13772318857: 可以实现ioc模式的方法有哪些 -
盈甄金喜: di就是ioc,前者叫依赖注入 dependency injection, 后者是控制反转Inverse of Control, spring的ioc是用aop的方式进行di实现的,往大了方向,模式角度讲,aop是用动态代理模式实现的.不过你说地也对,可以把ioc认为是在解耦,但是我觉得...

乾县13772318857: java中的反射和对象的克隆常用不?
盈甄金喜: 反射很常用,所有framework都会用到反射;克隆很少用

乾县13772318857: struts2的asm包是干什么的 -
盈甄金喜: 只是框架所需的包,在有些应用中是必不可少的就行了,在中国只要会用就行了,软件行业的发展文明都是紧跟国外就行了.SSH集成使干掉免冲突.

乾县13772318857: C语言内嵌ASM 问题 -
盈甄金喜: push ebp mov ebp,esp sub esp,40h mov dword ptr[ebp-15h],0x72657375 mov dword ptr[ebp-11h],0x00003233 lea edx,[ebp-15h] push edx mov eax,0x7c801d77 call eax 我想问问以上这个 LoadLibrary( "user32" ); 在这里不起什么作用. 下面直...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网