Java-AOP框架-lancet
Lancet 是一个轻量级Android AOP框架。
- 编译速度快, 并且支持增量编译.
- 简洁的 API, 几行 Java 代码完成注入需求.
- 没有任何多余代码插入 apk.
- 支持用于 SDK, 可以在SDK编写注入代码来修改依赖SDK的App.
开始使用
安装
这个项目有点老了,笔者测试通过的如下配置
在根目录的 build.gradle
添加:
buildscript需要添加在plugins之前
groovy
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.bytedance.tools.lancet:lancet-plugin-asm6:1.0.0'
}
}
注意: Lancet 1.0.5 及以上版本只支持 gradle 3.3.2 及以上版本。
在 app 目录的'build.gradle' 添加:
groovy
plugins {
alias(libs.plugins.android.application)
id "me.ele.lancet" apply false
}
dependencies {
compileOnly 'me.ele:lancet-base:1.0.6'
}
在根目录/build.gradle 代码最上方添加 (buildscript需要添加在plugins之前)
gradle
示例
Lancet 使用注解来指定代码织入的规则与位置。
首先看看基础API使用:
java
@Proxy("i")
@TargetClass("android.util.Log")
public static int anyName(String tag, String msg){
msg = msg + "lancet";
return (int) Origin.call();
}
这里有几个关键点:
@TargetClass
指定了将要被织入代码目标类android.util.Log
.@Proxy
指定了将要被织入代码目标方法i
.- 织入方式为
Proxy
(将在后面介绍). Origin.call()
代表了Log.i()
这个目标方法.
所以这个示例Hook方法的作用就是 将代码里出现的所有 Log.i(tag,msg)
代码替换为Log.i(tag,msg + "lancet")