老规矩本人整理脑图,脑图的作用是把不连续的记忆通过图像联系起来,博文的作用是图像表述不清的通过文字记录下来并且记录自己遇到的问题和解决方案。
如果本人表述不清,请参考一下文章,自行脑补更正。
参考文献:
http://kvh.io/cn/embrace-android-studio-gradle-plugin.html 拥抱 Android Studio 之五:Gradle 插件开发
https://blog.youkuaiyun.com/huachao1001/article/details/51810328 在AndroidStudio中自定义Gradle插件
https://blog.youkuaiyun.com/tscyds/article/details/78082861 Gradle Transform
https://juejin.im/post/5aa0e7eff265da2395308f48#heading-19 Android字节码插桩采坑笔记
http://tech.lede.com/2017/02/10/rd/android/android_aop/#1 网易:AOP字节码插装
https://www.ibm.com/developerworks/cn/java/j-lo-asm30/ AOP 的利器:ASM 3.0 介绍
http://www.wangyuwei.me/2017/01/19/JVM指令集整理/ JVM指令集整理
http://www.wangyuwei.me/2017/01/20/ASM-操作字节码初探/ASM 操作字节码初探
http://www.wangyuwei.me/2017/01/22/手摸手增加字节码往方法体内插代码/ 手摸手增加字节码往方法体内插代码
http://www.wangyuwei.me/2017/03/05/ASM实战统计方法耗时/ ASM实战统计方法耗时
由浅到深,以上我们可以分为三个步骤:
- 自定义插件
- 插件继承Transform
- 编写ASM代码,通过Transform插入代码。OK啦
自定义插件
这个可以参考脑图或者上面的参考文章,流水账一样的流程,不多介绍了。
插件继承Transform
这里我们需要知道的知识点:
- 什么是AOP
- AOP的业务场景
- android打包流程
知识点流水账:
- 当你了解了上面那些,你会需要知道:Gradle Transform是Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。目前比较经典的应用是字节码插桩、代码注入技术。
- 那么随之而来的你需要知道如何编写自己需要的.class文件。这里,你需要知道一些字节码知识!
- 当你知道什么是字节码以后你就需要把它和你的android项目结合起来,这个结合起来的语言就是:ASM
编写ASM代码
想要编写出正确的ASM代码,你首先要知道字节码知识,但是我们在有限的时间里手撸代码的可能性实在不大,尤其是如果你的逻辑很复杂的话。
在手摸手增加字节码往方法体内插代码这个文章中有提到ASM Bytecode Outline这个插件,在android studio中也能搜到这个插件,但是安装重启以后不能用,然后我试着安装了个Eclipse,发现也不行。这个插件只能支持到Eclipse4.4,但是我安装的是4.7的用不了,另外我发现作者好像也很久不更新这个了,所以。。。
我试着在百度搜索Bytecode online 然后还是让我找到了一个不错的东西:bytecode-viewer,这个是下载地址:地址。
它的界面是这样的:
你可以直接把.class文件拖到右上角的File框里,然后你就会看到一个成品的字节码文件。阿弥陀佛啊!!!
所以你需要什么字节码文件,你可以先在studio中写一个java文件,然后编译一下在build\intermediates\classes\debug+包名 中找到编译后的.class,或者直接用命令行 javac。反正这个问题解决了。
详细的东西就不介绍了,毕竟别人已经写的很详细了,我也帮大家把需要看的文章都整理出来了。
下一篇:AOP+ASM+插件化总结–实现基于注解的埋点和统计-- 代码篇。