练习Sample跑起来 | ASM插桩强化练习
孙鹏飞
该思维导图由 AI 生成,仅供参考
你好,我是孙鹏飞。
专栏上一期,绍文讲了编译插桩的三种方法:AspectJ、ASM、ReDex,以及它们的应用场景。学完以后你是不是有些动心,想赶快把它们应用到实际工作中去。但我也还了解到,不少同学其实接触插桩并不多,在工作中更是很少使用。由于这项技术太重要了,可以实现很多功能,所以我还是希望你通过理论 + 实践的方式尽可能掌握它。因此今天我给你安排了一期“强化训练”,希望你可以趁热打铁,保持学习的连贯性,把上一期的理论知识,应用到今天插桩的练习上。
为了尽量降低上手的难度,我尽量给出详细的操作步骤,相信你只要照着做,并结合专栏上期内容的学习,你一定可以掌握插桩的精髓。
ASM 插桩强化练习
在上一期里,Eateeer 同学留言说得非常好,提到了一个工具,我也在使用这个工具帮助自己理解 ASM。安装“ASM Bytecode Outline”也非常简单,只需要在 Android Studio 中的 Plugin 搜索即可。
ASM Bytecode Outline 插件可以快速展示当前编辑类的字节码表示,也可以展示出生成这个类的 ASM 代码,你可以在 Android Studio 源码编译框内右键选择“Show Bytecode Outline“来查看,反编译后的字节码在右侧展示。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何通过ASM插桩来实现方法耗时统计和替换项目中的线程。作者首先介绍了使用ASM Bytecode Outline插件来展示当前编辑类的字节码表示,并详细讲解了如何通过ASM实现统计每个方法的耗时和替换项目中的线程。在实践中,读者可以通过这些方法来加深对ASM使用的理解,并且需要注意处理字节码时可能出现的各种情况。文章还提供了一个思考题,即如何给某个方法增加一个try catch。通过这篇文章,读者可以快速了解ASM插桩的强化练习,以及在实践中需要注意的细节和技术特点。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Android 开发高手课》,新⼈⾸单¥59
《Android 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(10)
- 最新
- 精选
- 唯鹿感谢老师的认可与鼓励,我会继续坚持学习与分享!🙏
作者回复: 你是最棒的!
2019-02-2330 - Neil这个插件是不是在AS3.3上失效了啊
作者回复: 3.3应该是没问题的
2019-03-1142 - 肥牛大猛请问在写Transform的过程中,如何debug代码呢?初期对ASM不熟悉,在写的过程中如果能debug最好了
作者回复: 可以debug的,在前一篇文章里面有一个参考链接
2019-03-0121 - blithe为什么是使用发射的方式,替换了transformClassesWithDexBuilderForDebug,而不是直接在plugin中直接加入进去一个
作者回复: 因为要拿到原来transform的一些输入和输出,不过gradle 3.6 之后慢慢都换回task了
2019-12-12 - 王大大@splm 我的方法是在本地建repo,然后在项目中classpath引进去,然后在apply进去,但是修改了代码调试需要重新uploadArchives,就很麻烦,有什么好的调试办法吗
作者回复: 可以现在task编译一次localmaven的,我已经写了支持
2019-03-28 - splm如果不上传maven的话,本地工程使用,提示找不到插件类,这个是什么问题?
作者回复: 需要先编译localmaven
2019-03-26 - 杨泉如何运行Demo ASMSample项目先注释掉 // apply plugin: 'com.geektime.asm-plugin' // classpath ("com.geektime.asm:asm-gradle-plugin:1.0") { changing = true }` 编译和发布asm-gradle-plugin 到本地maven ./gradlew buildAndPublishToLocalMaven 还原第1步注释掉的插件依赖,即可运行Demo ./gradlew installDebug 我的,还要修改以下3点,才能编译通过: 1 把项目的改为 distributionUrl=https://services.gradle.org/distributions/gradle-5.6.4-all.zip 2 项目的 buildscript{ dependencies { classpath 'com.android.tools.build:gradle:3.6.1' } } 3 asm-gradle-plugin module中的 dependencies { compile 'com.android.tools.build:gradle:3.6.1' //从2.1.0改为3.6.1,否则com.android.build.gradle.internal.pipeline和com.android.build.api.transform包找不到 }2020-05-022
- ysnowshttps://plugins.jetbrains.com/plugin/14860-asm-bytecode-viewer-support-kotlin 大家也可以用这个插件,ASM Bytecode Outline已经不更新了2022-01-26
- haizhiyun你好,asm 如何在一个方法的调用后面插入一个方法 ,并获取这个方法的所有参数,实现类似 aspectJ @After("call(...)") 或者 @Around("call(...)")的功能2019-11-29
- splmCould not find implementation class for plugin error when using Gradle 4.1+。 有遇到这个问题的朋友,可以肯定是找不到类,第一要看插件的properties文件命名和里面的内容指向,命名是用来apply的,内容是用来找到对应插件类,要明确这个关系。第二,要仔细groovy文件是否有后缀。我之前就是粗心连续的回车,导致忘记给文件家后缀,一直报这个恶心的错误。2019-03-26
收起评论