项目简介
一个轻量级的AOP(Android)应用框架,囊括了最实用的AOP应用。项目地址: https://github.com/xuexiangjys/XAOP, 喜欢的话,欢迎star支持!
设计原由
在我们平时开发的过程中,一定会遇到权限申请、线程切换、数据缓存、异常捕获、埋点和方法执行时间统计等问题。这些都是非常常见的问题,实现起来也不是很难,不过就是太麻烦了,还会让程序多出很多重复性、模版化的代码。
设计思路
让我最初接触到AOP思想的是JakeWharton的hugo,通过阅读它的源码之后,让我对aspectj这项技术的动态代码编织深深地着了迷。之后我详细研究了aspectj相关的技术,并不断搜集AOP在Android上的典型应用场景,然后通过aspectj这项技术去逐一实现。最后就成就了XAOP这个库。
解决痛点
解决快速点击的问题
解决Android6.0以上动态权限申请的问题
线程自由切换的问题
日志埋点问题
缓存问题(磁盘缓存和内存缓存)
异常捕获处理
业务拦截(登陆验证、有效性验证等)
集成指南
添加Gradle依赖
1.先在项目根目录的 build.gradle 的 repositories 添加:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2.再在项目根目录的 build.gradle 的 dependencies 添加xaop插件:
buildscript {
···
dependencies {
···
classpath 'com.github.xuexiangjys.XAOP:xaop-plugin:1.1.0'
}
}
3.在项目的 build.gradle 中增加依赖并引用xaop插件
apply plugin: 'com.xuexiang.xaop' //引用xaop插件
dependencies {
···
//如果是androidx项目,使用1.1.0版本及以上
implementation 'com.github.xuexiangjys.XAOP:xaop-runtime:1.1.0'
//如果是support项目,请使用1.0.5版本
implementation 'com.github.xuexiangjys.XAOP:xaop-runtime:1.0.5'
}
4.在Application中进行初始化
XAOP.init(this); //初始化插件
XAOP.debug(true); //日志打印切片开启
XAOP.setPriority(Log.INFO); //设置日志打印的等级,默认为0
//设置动态申请权限切片 申请权限被拒绝的事件响应监听
XAOP.setOnPermissionDeniedListener(new PermissionUtils.OnPermissionDeniedListener() {
@Override
public void onDenied(List permissionsDenied) {
// 权限申请被拒绝的处理
}
});
//设置自定义拦截切片的处理拦截器
XAOP.setInterceptor(new Interceptor() {
@Override
public boolean intercept(int type, JoinPoint joinPoint) throws Throwable {
XLogger.d("正在进行拦截,拦截类型:" + type);
switch(type) {
case 1:
//做你想要的拦截
break;