ASM
介绍的文章:
相关知识点:
- Android打包流程
相关资料:Apk 打包流程梳理、Android APK打包流程 - Java字节码
相关资料:一文让你明白Java字节码、Java字节码(维基百科)、如何阅读JAVA 字节码(一)、《深入理解Java虚拟机》第6章(有条件的话,推荐看书) - 自定义Gradle插件、Transform API
相关资料:在AndroidStudio中自定义Gradle插件、深入理解Android之Gradle、打包Apk过程中的Transform API 、Transform官方文档 - ASM
相关资料:AOP 的利器:ASM 3.0 介绍、Class文件格式实战:使用ASM动态生成class文件
自定义Gradle插件+ASM实现埋点,记录页面被打开\关闭(对应Activity
的onCreate()
和onDestory()
)
思路: 在class文件转换成dex之前,修改它,修改完成覆盖class文件。
class文件:Java源文件经过
javac
后生成的一种紧凑的8位字节的二进制流文件。
插入点:“dex”节点,表示将class
文件打包到dex
文件的过程,其输入包括class
文件以及第三方依赖的class
文件
关于Transform API :从1.5.0-beta1
开始,Gradle插件包含一个Transform API,允许第三方插件在将编译后的类文件转换为dex
文件之前对其进行操作。
关于混淆:可以不用当心。混淆其实是个ProguardTransform
,在自定义的Transform之后执行。