自学内容网 自学内容网

Android中接入hook框架:lancet-base

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")。


原文地址:https://blog.csdn.net/chenzhengfeng/article/details/140588238

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!