AOP方式向okhttp完成网络的监听拦截

拜拜、爱过 提交于 2020-04-06 06:10:09

AOP方式向okhttp完成网络的监听拦截

 

在编译时候,会在所有调用OkHttpClient的地方,自动添加,保证不会忘记,如果你的App还是用其他的sdk,sdk里面也是用OKhttp的话,也会监控到sdk里面的网络请求,不少大厂已经使用了这种方法,然后收集请求数据到后端,方便管理和优化。

下面简单介绍相关代码:

首先集成gradle_plugin_android_aspectjx插件

dependencies {
    classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.9'
}

然后定义Aspectj切入点

import com.facebook.stetho.okhttp3.StethoInterceptor;
import com.readystatesoftware.chuck.ChuckInterceptor;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

import me.ele.breakfastapp.AppContext;
import okhttp3.OkHttpClient;

@Aspect
public class OkHttpAspect {

    @Pointcut("call(public okhttp3.OkHttpClient build())")
    public void build() {
    }

    @Around("build()")
    public Object aroundBuild(ProceedingJoinPoint joinPoint) throws Throwable {
        Object target = joinPoint.getTarget();
        if (target instanceof OkHttpClient.Builder) {
            OkHttpClient.Builder builder = (OkHttpClient.Builder) target;
            builder.addNetworkInterceptor(new StethoInterceptor());
            builder.addNetworkInterceptor(new ChuckInterceptor(AppContext.get()));
        }

        return joinPoint.proceed();
    }
}

那么在代码编译的时候,会自动插入字节码。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!