Android里使用AspectJ实现双击自定义注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * <pre> * desc : 双击 * author : 刘金 * time : 2023/2/28 下午6:35 * </pre> */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface DoubleClick { long DEFAULT_INTERVAL_MILLIS = 1000; /** * @return 快速点击的间隔(ms),默认是1000ms */ long value() default DEFAULT_INTERVAL_MILLIS; }
使用AspectJ进行埋点
为了在 Android
使用 AOP
埋点需要引入 AspectJX
,在项目根目录的 build.gradle
下加入:
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0'
然后,在 app
目录下的 build.gradle
下加入:
apply plugin: 'android-aspectjx' implement 'org.aspectj:aspectjrt:1.8.+' // AspectJX默认会处理所有的二进制代码文件和库,为了提升编译效率及规避部分第三方库出现的编译兼容性问题, // AspectJX提供include,exclude命令来过滤需要处理的文件及排除某些文件(包括class文件及jar文件)。 // 常用排除一些目录下的代码 aspectjx { exclude 'versions.9', 'androidx', 'com.google', 'com.taobao', 'com.ut' }
注:埋点后有时候需要重新编译,不然即使代码正确也提示异常。
然后编写双击埋点的AspectJ类。
/** * <pre> * desc : 双击 * author : 刘金 * time : 2023/2/28 下午6:35 * </pre> */ @Aspect public class DoubleClickAspectJ { @Pointcut("within(@com.weiguo.collection.annotation.DoubleClick *)") public void withinAnnotatedClass() { } @Pointcut("execution(!synthetic * *(..)) && withinAnnotatedClass()") public void methodInsideAnnotatedType() { } @Pointcut("execution(@com.weiguo.collection.annotation.DoubleClick * *(..)) || methodInsideAnnotatedType()") public void method() { } //方法切入点 @Around("method() && @annotation(doubleClick)")//在连接点进行方法替换 public void aroundJoinPoint(ProceedingJoinPoint joinPoint, DoubleClick doubleClick) throws Throwable { if (是双击)) { joinPoint.proceed();//是双击,执行原方法 } else { } } }
然后将注解@DoubleClick放到想双击触发的函数上即可。
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/17246302.html
https://www.cnblogs.com/kiba/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2021-02-22 C#使用OpenCV剪切图片中的人物头像