Skip to content

Android Aop 拦截,支持 androidx。你可以通过添加注解的方式实现以下功能: 1、点击事件防抖; 2、拦截;3、动态权限请求等

Notifications You must be signed in to change notification settings

Chen-Baiyi/JAop

Repository files navigation

JAop

介绍

已适配 AndroidX。

你可以通过添加注解的方式实现以下功能:

  1. 点击事件防抖
  2. 拦截
  3. 动态权限请求
  4. 性能监控

依赖

  1. 在项目下的 build.gradle 中添加如下依赖
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // aspectj 插件
        classpath 'com.cby.aop:aspectj-plugin:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}	
  1. 在 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'
}

使用

  1. 在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();
        });
    }
  1. 单击事件防抖 在点击事件方法上添加注解 @JSingleClick
    // 默认1000ms
    @JSingleClick(2000)
    public void onClick(View v) {
        
    }
  1. 权限申请 在对应的方法上添加注解 @JPermission(String[])
    @JPermission({Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CALL_PHONE})
    private void method() {
    }
  1. 拦截 在对应的方法上添加注解 @JIntercept(int[])
    @JIntercept(0)
    private void method() {
    }
  1. 性能监控 在对应的方法上添加注解 @JTrace
    @JTrace
    private void method() {
    }

混淆

-keep @com.cby.aspectj.annotation.* class * {*;}
-keep class * {
    @com.cby.aspectj.annotation.* <fields>;
}
-keepclassmembers class * {
    @com.cby.aspectj.annotation.* <methods>;
}

About

Android Aop 拦截,支持 androidx。你可以通过添加注解的方式实现以下功能: 1、点击事件防抖; 2、拦截;3、动态权限请求等

Resources

Stars

Watchers

Forks

Packages

No packages published