# XAOP
[![](https://jitpack.io/v/xuexiangjys/XAOP.svg)](https://jitpack.io/#xuexiangjys/XAOP)
[![api](https://img.shields.io/badge/API-14+-brightgreen.svg)](https://android-arsenal.com/api?level=14)
[![Issue](https://img.shields.io/github/issues/xuexiangjys/XAOP.svg)](https://github.com/xuexiangjys/XAOP/issues)
[![Star](https://img.shields.io/github/stars/xuexiangjys/XAOP.svg)](https://github.com/xuexiangjys/XAOP)
一个轻量级的AOP(Android)应用框架, 囊括了最实用的AOP应用。心动不如行动,还不赶紧点击[使用说明文档](https://github.com/xuexiangjys/XAOP/wiki),体验一下吧!
## 关于我
| 公众号 | 掘金 | 知乎 | CSDN | 简书 | 思否 | 哔哩哔哩 | 今日头条
|---------|---------|--------- |---------|---------|---------|---------|---------|
| [我的Android开源之旅](https://t.1yb.co/Irse) | [点我](https://juejin.im/user/598feef55188257d592e56ed/posts) | [点我](https://www.zhihu.com/people/xuexiangjys/posts) | [点我](https://xuexiangjys.blog.csdn.net/) | [点我](https://www.jianshu.com/u/6bf605575337) | [点我](https://segmentfault.com/u/xuexiangjys) | [点我](https://space.bilibili.com/483850585) | [点我](https://img.rruu.net/image/5ff34ff7b02dd)
## X系列库快速集成
为了方便大家快速集成X系列框架库,我提供了一个空壳模版供大家参考使用: https://github.com/xuexiangjys/TemplateAppProject
---
## 特点
* 支持快速点击切片`@SingleClick`,支持设置快速点击的时间间隔。
* 支持动态申请权限切片`@Permission`,支持自定义响应动作。
* 支持主线程切片`@MainThread`。
* 支持IO线程切片`@IOThread`,支持多种线程池类型。
* 支持日志打印切片`@DebugLog`,支持自定义日志记录方式。
* 支持内存缓存切片`@MemoryCache`,支持设置缓存大小。
* 支持磁盘缓存切片`@DiskCache`,支持自定义磁盘缓存,缓存有效时间等。
* 支持自动捕获异常的拦截切片`@Safe`,支持设置自定义异常处理者。
* 支持自定义拦截切片`@Intercept`,支持自定义切片拦截。
* 兼容Kotlin语法。
* 支持androidx。
## Star趋势图
[![Stargazers over time](https://starchart.cc/xuexiangjys/XAOP.svg)](https://starchart.cc/xuexiangjys/XAOP)
---
## 1、演示(请star支持)
![aop.gif](./img/aop.gif)
## 2、如何使用
目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.
### 2.1、Android Studio导入方法,添加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.在应用项目(一般是app)的 `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<String> permissionsDenied) {
//申请权限被拒绝的处理
}
});
//设置自定义拦截切片的处理拦截器
XAOP.setInterceptor(new Interceptor() {
@Override
public boolean intercept(int type, JoinPoint joinPoint) throws Throwable {
XLogger.d("正在进行拦截,拦截类型:" + type);
switch(type) {
case 1:
//做你想要的拦截
break;
case 2:
return true; //return true,直接拦截切片的执行
default:
break;
}
return false;
}
});
//设置自动捕获异常的处理者
XAOP.setIThrowableHandler(new IThrowableHandler() {
@Override
public Object handleThrowable(String flag, Throwable throwable) {
XLogger.d("捕获到异常,异常的flag:" + flag);
if (flag.equals(TRY_CATCH_KEY)) {
return 100;
}
return null;
}
});
```
### 2.2、兼容Kotlin语法配置
1.在项目根目录的 `build.gradle` 的 dependencies 添加 [aspectjx](https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx) 插件:
```
buildscript {
···
dependencies {
···
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10'
}
}
```
2.在应用项目(一般是app)的 `build.gradle` 中增加依赖并引用 [aspectjx](https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx) 插件
```
apply plugin: 'android-aspectjx' //引用aspectjx插件
aspectjx {
include '项目的applicationId'
}
```
详细使用可参见[kotlin-test](https://github.com/xuexiangjys/XAOP/blob/master/kotlin-test/build.gradle)项目进行使用.
## 3、切片的使用
### 3.1、快速点击切片使用
1.使用`@SingleClick`标注点击的方法。注意点击的方法中一定要有点击控件View作为方法参数,否则将不起作用。
2.可以设置快速点击的时间间隔,单位:ms。不设置的话默认是1000ms。
```
@SingleClick(5000)
public void handleOnClick(View v) {
XLogger.e("点击响应!");
ToastUtil.get().toast("点击响应!");
hello("xuexiangjys", "666666");
}
```
### 3.2、动态申请权限切片使用
1.使用`@Permission`标注需要申请权限执行的方法。可设置申请一个或多个权限。
2.使用`@Permission`标注的方法,在执行时会自动判断是否需要申请权限。
```
@SingleClick
@Permission({PermissionConsts.CALENDAR, PermissionConsts.CAMERA, PermissionConsts.LOCATION})
private void handleRequestPermission(View v) {
}
```
### 3.3、主线程切片使用
1.使用`@MainThread`标注需要在主线程中执行的方法。
2.使用`@MainThread`标注的方法,在执行时会自动切换至主线程。
```
@MainThread
private void doInMainThread(View v) {
mTvHello.setText("工作在主线程");
}
```
### 3.4、IO线程切片使用
1.使用`@IOThread`标注需要在io线程中执行的方法。可设置线程池的类型`ThreadType`,不设置的话默认是Fixed类型。
线程池的类型如下:
* Single:单线程池
* Fixed:多线程池
* Disk:磁盘读写线程池(本质上是单线程池)
* Network:网络请求线程池(本质上是多线程池)
2.使用`@IOThread`标注的方法,在执行时会自动切换至指定类型的io线程。
```
@IOThread(ThreadType.Single)
private String doInIOThread(View v) {
return "io线程名:" + Thread.currentThread().getName();
}
```
### 3.5、日志打印切片使用
1.使用`@DebugLog`标注需要打印的方法和类。可设置打印的优先级,不设置的话默认优先级为0。注意:如果打印的优先级比`XAOP.setPriority`设置的优先级小的话,将不会进行打印。
2.使用`@DebugLog`标注的类和方法在执行的过程中,方法名、参数、执行的时间以及结果都将会被打印。
3.可调用`XAOP.setISerializer`设置打印时序列化参数对象的序列化器。
4.可调用`XAOP.setLogger`设置打印的实现接口。默认提供的是突破4000限制的logcat日志打印。
```
@DebugLog(priority = Log.ERROR)
private String hello(String name, String cardId) {
re
没有合适的资源?快使用搜索试试~ 我知道了~
一个轻量级的AOP(Android)应用框架 囊括了最实用的AOP应用.rar
共140个文件
java:51个
xml:28个
png:20个
需积分: 5 0 下载量 113 浏览量
2023-05-27
20:21:13
上传
评论 1
收藏 597KB RAR 举报
温馨提示
项目是项目androidx项目。精选了X系列最实用的几个库,可大大提高开发的效率。 XUI 一个简洁而优雅的Android原生UI框架,解放你的双手! XUtil 一个方便实用的Android工具类库! XAOP 一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。 XPage 一个非常方便的fragment页面框架。 XUpdate 一个轻量级、高可用性的Android版本更新框架。 XHttp2 一个功能强悍的网络请求库,使用RxJava2 + Retrofit2 + OKHttp组合进行封装。 除此之外,还集成了其他优秀的第三方库: butterknife 控件依赖注入框架: https://github.com/JakeWharton/butterknife AndroidAutoSize 优秀的屏幕适配方案: https://github.com/JessYanCoding/AndroidAutoSize leakcanary 内存泄漏检测 : https://github.com/square/leakcanary
资源推荐
资源详情
资源评论
收起资源包目录
一个轻量级的AOP(Android)应用框架 囊括了最实用的AOP应用.rar (140个子文件)
gradlew.bat 2KB
aop.gif 464KB
.gitignore 241B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
.gitignore 7B
versions.gradle 6KB
build.gradle 2KB
build.gradle 2KB
build.gradle 2KB
build.gradle 2KB
build.gradle 1KB
JitPackUpload.gradle 1KB
build.gradle 1KB
build.gradle 1KB
build.gradle 592B
settings.gradle 138B
gradlew 5KB
XAOPPlugin.groovy 4KB
gradle-wrapper.jar 52KB
PermissionUtils.java 11KB
XLogger.java 9KB
Utils.java 8KB
XCache.java 8KB
XAOP.java 6KB
MainActivity.java 6KB
Strings.java 6KB
DebugLogAspectJ.java 6KB
LruDiskCache.java 5KB
PermissionConsts.java 5KB
BaseDiskCache.java 4KB
LogcatLogger.java 4KB
DiskCacheAspectJ.java 4KB
IOThreadAspectJ.java 3KB
App.java 3KB
MemoryCacheAspectJ.java 3KB
InterceptAspectJ.java 3KB
PermissionAspectJ.java 3KB
AppExecutors.java 3KB
CacheCore.java 3KB
XDiskCache.java 3KB
MainThreadAspectJ.java 2KB
LruMemoryCache.java 2KB
SingleClickAspectJ.java 2KB
XMemoryCache.java 2KB
CommonUtils.java 2KB
SafeAspectJ.java 2KB
GsonDiskConverter.java 2KB
ClickUtils.java 2KB
Module1Activity.java 2KB
SerializableDiskConverter.java 2KB
MD5Utils.java 2KB
DefaultCacheKeyCreator.java 2KB
DiskCache.java 2KB
LoginInfo.java 2KB
MemoryCache.java 2KB
ICache.java 1KB
LoginActivity.java 1KB
IDiskConverter.java 1KB
SingleClick.java 1KB
IOThread.java 1KB
Interceptor.java 1KB
Permission.java 1KB
Intercept.java 1KB
Safe.java 1KB
DebugLog.java 1KB
ThreadType.java 1KB
MainThread.java 1KB
IThrowableHandler.java 1012B
ILogger.java 1012B
ICacheKeyCreator.java 988B
MainActivity.kt 3KB
App.kt 2KB
LICENSE 11KB
README.md 12KB
README.md 5KB
ic_launcher_round.png 15KB
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
ic_launcher.png 4KB
ic_launcher.png 3KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
ic_launcher.png 2KB
共 140 条
- 1
- 2
资源评论
野生的狒狒
- 粉丝: 1510
- 资源: 1530
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
- 发那科工业机器人保养大全
- Sphere.h
- REMD固有时间尺度分解信号分量可视化(Matlab完整源码和数据)
- 嵌入式系统双单片机STC89C52+STC15W104多功能学习板电路图可扩展 适用于单片机初学者和教学
- 基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)大赛作品
- XILINXFPGA源码基于Spartan3火龙刀系列FPGA开发板VGA测试例程
- Java聊天室的设计与实现【尚学堂·百战程序员】
- python中matplotlib教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功