me.ele:lancet-base是"饿了么"开发的Android平台的开源hook框架,GitHub地址为:https://github.com/eleme/lancet。
此框架的优点如下:
1.编译速度快, 并且支持增量编译。
2.简洁的 API, 几行 Java 代码完成注入需求。
3.没有任何多余代码插入 apk。
4.支持用于 SDK, 可以在SDK编写注入代码来修改依赖SDK的App。
接入me.ele:lancet-base框架的步骤如下:
1.在项目根目录的build.gradle中添加:
dependencies {
...
classpath 'com.bytedance.tools.lancet:lancet-plugin-asm6:1.0.2'
}
2.在主module的build.gradle中添加:
apply plugin: 'me.ele.lancet'
3.在module的build.gradle中添加:
dependencies {
...
implementation "me.ele:lancet-base:1.0.6"
}
4.在module中添加hook代码:
import me.ele.lancet.base.Origin;
import me.ele.lancet.base.annotations.Proxy;
import me.ele.lancet.base.annotations.TargetClass;
@Proxy("i")
@TargetClass("android.util.Log")
public static int anyName(String tag, String msg) {
msg = msg + "lancet";
return (int) Origin.call();
}
说明:
1. @TargetClass:指定了将要被织入代码的目标类,此处为:android.util.Log。
2. @Proxy:指定了将要被织入代码的目标方法,此处为:i。
3. Origin.call():代表了 Log.i() 这个目标方法。
4. 所以这个示例Hook方法的作用就是:将代码里出现的所有 Log.i(tag,msg) 代码替换为Log.i(tag,msg + "lancet")。