DroidAssist
DroidAssist
是一个轻量级的 Android 字节码编辑插件,基于 Javassist
对字节码操作,根据 xml 配置处理 class 文件,以达到对 class 文件进行动态修改的效果。和其他 AOP 方案不同,DroidAssist 提供了一种更加轻量,简单易用,无侵入,可配置化的字节码操作方式,你不需要 Java 字节码的相关知识,只需要在 Xml 插件配置中添加简单的 Java 代码即可实现类似 AOP 的功能,同时不需要引入其他额外的依赖。
功能
替换:把指定位置代码替换为指定代码
插入:在指定位置的前后插入指定代码
环绕:在指定位置环绕插入指定代码
增强:
TryCatch 对指定代码添加 try catch 代码
Timing 对指定代码添加耗时统计代码
特点
灵活的配置化方式,使得一个配置就可以处理项目中所有的 class 文件。
丰富的字节码处理功能,针对 Android 移动端的特点提供了例如代码替换,添加 try catch,方法耗时等功能。
简单易用,只需要依赖一个插件,处理过程以及处理后的代码中也不需要添加额外的依赖。
处理速度较快,只占用较少的编译时间。
开发文档
DroidAssist 配置文件
DroidAssist 将扫描工程中的每一个单独的 class 以及 jar 中的 class, 并对 class 与配置文件中的规则进行匹配,如果有规则能够匹配到 class,则根据 DroidAssist 配置对此 class 进行字节码修改。DroidAssist 配置是一个 xml 文件,根节点是 DroidAssist
, 根节点下包含 Global
, Insert
, Around
, Replace
, Enhance
代码操作配置,完整的 DroidAssist 配置文件格式如下:
<?xml version="1.0" encoding="utf-8"?>
...
...
...
...
...
为了方便编写配置文件,在 IDE 中能自动提示,请将根目录下 DTD文件 拷贝到配置文件第二行。
配置分类:
Insert:代码插入类
Replace:代码替换类
Around:代码环绕类
Enhance:代码增强类
Source 和 Target
Insert、Replace、Around、Enhance 类型代码操作配置中均需要包含 Source
和 Target
元素:例:
int android.util.Log.d(java.lang.String,java.lang.String)
$_= com.didichuxing.tools.test.LogUtils.log($$);
Source 的值 int android.util.Log.d(java.lang.String,java.lang.String)
表示需要匹配方法调用 android.util.Log.d( )
Target 的值 $_= com.didichuxing.tools.test.LogUtils.log($$);
表示将调用 android.util.Log.d( )
方法调用的代码替换为 com.didichuxing.tools.test.LogUtils.log( )