一个简易的AOP(Android)应用框架。囊括了最实用的AOP应用。
一个简易的AOP(Android)应用框架。囊括了最实用的AOP应用。
XAOP
一个轻量级的AOP(Android)应用框架。囊括了最实用的AOP应用。
关于我
X系列库快速集成
为了方便大家快速集成X系列框架库,我提供了一个空壳模版供大家参考使用: https://github.com/xuexiangjys/TemplateAppProject
特点
1、演示(请star支持)
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.0.5' }}
3.在项目的 build.gradle 中增加依赖并引用xaop插件
apply plugin: 'com.xuexiang.xaop' //引用xaop插件dependencies { ··· //添加依赖 implementation 'com.github.xuexiangjys.XAOP:xaop-runtime:1.0.5' //如果你升级到androidx,请使用下面依赖 implementation 'com.github.xuexiangjys.XAOP:xaop-runtime:1.0.5x'}
4.在Application中进行初始化
XAOP.init(this); //初始化插件XAOP.debug(true); //日志打印切片开启XAOP.setPriority(Log.INFO); //设置日志打印的等级,默认为0//设置动态申请权限切片 申请权限被拒绝的事件响应监听XAOP.setOnPermissionDeniedListener(new PermissionUtils.OnPermissionDeniedListener() { @Override public void onDenied(List
2.2、兼容Kotlin语法配置
1.在项目根目录的 build.gradle 的 dependencies 添加aspectjx插件:
buildscript { ··· dependencies { ··· classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4' }}
2.在项目的 build.gradle 中增加依赖并引用aspectjx插件
apply plugin: 'android-aspectjx' //引用aspectjx插件
详细使用可参见kotlin-test项目进行使用.
3、切片的使用
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标注的方法,在执行时会自动切换至主线程。
@MainThreadprivate 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) { return "hello, " + name + "! Your CardId is " + cardId + ".";}
3.6、内存缓存切片使用
1.使用@MemoryCache标注需要内存缓存的方法。可设置缓存的key,不设置的话默认key为方法名(参数1名=参数1值|参数2名=参数2值|...),当然你也可以修改key的自动生成规则,你只需要调用XAOP.setICacheKeyCreator即可。
2.标注的方法一定要有返回值,否则内存缓存切片将不起作用。
3.使用@MemoryCache标注的方法,可自动实现缓存策略。默认使用的内存缓存是LruCache。
4.可调用XAOP.initMemoryCache设置内存缓存的最大数量。默认是Runtime.getRuntime().maxMemory() / 1024) / 8
@MemoryCacheprivate String hello(String name, String cardId) { return "hello, " + name + "! Your CardId is " + cardId + ".";}
3.7、磁盘缓存切片使用
1.使用@DiskCache标注需要磁盘缓存的方法。可设置缓存的key,不设置的话默认key为方法名(参数1名=参数1值|参数2名=参数2值|...),当然你也可以修改key的自动生成规则,你只需要调用XAOP.setICacheKeyCreator即可。
2.可设置磁盘缓存的有效期,单位:s。不设置的话默认永久有效。
3.标注的方法一定要有返回值,否则磁盘缓存切片将不起作用。
4.使用@DiskCache标注的方法,可自动实现缓存策略。默认使用的磁盘缓存是JakeWharton的DiskLruCache。
5.可调用XAOP.initDiskCache设置磁盘缓存的属性,包括磁盘序列化器IDiskConverter,磁盘缓存的根目录,磁盘缓存的最大空间等。
@DiskCacheprivate String hello(String name, String cardId) { return "hello, " + name + "! Your CardId is " + cardId + ".";}
3.8、自动捕获异常切片使用
1.使用@Safe标注需要进行异常捕获的方法。可设置一个异常捕获的标志Flag,默认的Flag为当前类名.方法名。
2.调用XAOP.setIThrowableHandler设置捕获异常的自定义处理者,可实现对异常的弥补处理。如果不设置的话,将只打印异常的堆栈信息。
3.使用@Safe标注的方法,可自动进行异常捕获,并统一进行异常处理,保证方法平稳执行。
@Safe(TRY_CATCH_KEY)private int getNumber() { return 100 / 0;}
3.9、自定义拦截切片使用
1.使用@Intercept标注需要进行拦截的方法和类。可设置申请一个或多个拦截类型。
2.如果不调用XAOP.setInterceptor设置切片拦截的-的话,自定义拦截切片将不起作用。
3.使用@Intercept标注的类和方法,在执行时将自动调用XAOP设置的-进行拦截处理。如果-处理返回true的话,该类或方法的执行将被拦截,不执行。
4.使用@Intercept可以灵活地进行切片拦截。比如用户登录权限等。
【注意】:当有多个切片注解修饰时,一般是从上至下依次顺序执行。
4、混淆配置
-keep @com.xuexiang.xaop.annotation.* class * {*;}-keep class * { @com.xuexiang.xaop.annotation.*
如果觉得项目还不错,可以考虑打赏一波
你的打赏是我维护的动力,我将会列出所有打赏人员的清单在下方作为凭证,打赏前请留下打赏项目的备注!
联系方式
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~