本demo插件用的是AspectJX
一、插件引入
1、project的build.gradle中配置插件
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
}
2、app的build.gradle中配置
apply plugin: 'com.android.application'
apply plugin: 'android-aspectjx'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.app.aoptest"
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
二、开始编程
1、新建注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DoubleClickAnnotation {
}
2、新建Aspect
//新建切面DoubleClickAspect
@Aspect
public class DoubleClickAspect {
private final String POINT_CUT_DOUBLE_CLICK = "execution(@com.suning.jr.aoptest.DoubleClickAnnotation * *(..))";
//切入点
@Pointcut(POINT_CUT_DOUBLE_CLICK)
public void doubleClick() {
}
//advice通知
@Around("doubleClick()")
public void execute(ProceedingJoinPoint joinPoint) {
try {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
DoubleClickAnnotation annotation = signature.getMethod()
.getAnnotation(DoubleClickAnnotation.class);
if (annotation != null) {
//处理自己的逻辑
Log.e("KKKk","点击拦截");
}
joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
3、使用
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.bt).setOnClickListener(this);
}
@Override
@DoubleClickAnnotation
public void onClick(View v) {
}
}
输出结果: