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(); } }
那么在代码编译的时候,会自动插入字节码。
来源:oschina
链接:https://my.oschina.net/u/1446823/blog/3213881