JAop
介绍
已适配 AndroidX。
你可以通过添加注解的方式实现以下功能:
点击事件防抖
拦截
动态权限请求
性能监控
依赖
在项目下的 build.gradle 中添加如下依赖
buildscript {
repositories {
jcenter()
}
dependencies {
// aspectj 插件
classpath 'com.cby.aop:aspectj-plugin:1.0.0'
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
}
在 module 下的 build.gradle 中
// aspectj 插件
apply plugin: 'aspectj-plugin'
dependencies {
// androidx 版
implementation 'com.github.Chen-Baiyi:JAop:1.1.0'
// support 版
// implementation 'com.github.Chen-Baiyi:JAop:1.0.6'
}
使用
在Application的onCreate里初始化
/**
* 初始化 Aop
*/
private void initAop() {
// 初始化 aop
Aop.init(this);
// 开启 debug 模式
Aop.setDebug(true);
// 配置拦截操作,拦截成功时 return true,否则 return false。
Aop.setInterceptor((type, joinPoint) -> {
Object context = joinPoint.getThis();
Activity activity = null;
if (context instanceof FragmentActivity) {
activity = (Activity) context;
}
if (context instanceof Fragment) {
activity = ((Fragment) context).getActivity();
}
switch (type) {
case 0:
// 未登录拦截,前往登录
if (!isLogin) {
Intent intent = new Intent(activity, LoginActivity.class);
activity.startActivity(intent);
return true;
}
case 1:
// 拦截
Toast.makeText(instance, "拦截消息", Toast.LENGTH_SHORT).show();
return true;
}
return false;
});
// 配置权限拒绝的操作
Aop.setOnPermissionDeniedListener(permissionsDenied -> {
Toast.makeText(instance, "拒绝权限 -> " + Utils.listToString(permissionsDenied), Toast.LENGTH_SHORT).show();
});
}
单击事件防抖
在点击事件方法上添加注解 @JSingleClick
// 默认1000ms
@JSingleClick(2000)
public void onClick(View v) {
}
权限申请
在对应的方法上添加注解 @JPermission(String[])
@JPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE})
private void method() {
}
拦截
在对应的方法上添加注解 @JIntercept(int[])
@JIntercept(0)
private void method() {
}
性能监控
在对应的方法上添加注解 @JTrace
@JTrace
private void method() {
}
混淆
-keep @com.cby.aspectj.annotation.* class * {*;}
-keep class * {
@com.cby.aspectj.annotation.* ;
}
-keepclassmembers class * {
@com.cby.aspectj.annotation.* ;
}