Android系统版本与AspectJ

本文仅仅作为笔记的形式来记录一下使用AspectJ遇到的坑。

    某日,在帖子上看到Android中使用AspectJ的字眼,这玩意让我眼前一亮,于是便挪到项目中使用。主要用到的功能之一是:系统权限适配。挪进去之后,发现运行稳定。AspectJ是通过织入代码的方式,最终生成新的class文件,当时了解到这一点之后,就没有去想AspectJ在不同系统版本上的异同。于是便愉快地:打包,上线。

    又是风和日丽的某日,尽管风和日丽,却接到一个晴天霹雳的消息。说是用户点击登录按钮时,程序闪退。咨询到用户手机型号为三星、Android系统版本为4.2。优先考虑系统版本的问题,赶紧创建一个4.2的虚拟机 -> 运行项目 -> 登录,结果发现,确实闪退了,抛了空指针异常,指向却是切片类中传入的注解实例。

图1.1

    看到如此结果,心下一惊。于是乎,打开编译后的class文件查看,到底是哪旮旯出了问题。于是我看到了下图:

这里写图片描述

    这里还对var10002做了判空操作,当var10002==null时,则通过Class.getDeclearedMethod().getAnnotation()方法获取注解实例,该方法最终调用了Method的getAnnotationNative这个本地方法。于是本人对该方法做了测试,发现了很神奇的现象:

该getAnnotation()方法在Android 5.0以上是能获取到注解实例的,但是在Android 5.0以下则会返回null。

    无可奈何花落去,最终我只能在切片类中加入了注解实例判空逻辑。直接让方法运行即可,反正6.0以下手机都不用做权限适配,不是吗?

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值