Android系统版本与AspectJ
16lz
2021-01-26
本文仅仅作为笔记的形式来记录一下使用AspectJ遇到的坑。 某日,在帖子上看到Android中使用AspectJ的字眼,这玩意让我眼前一亮,于是便挪到项目中使用。主要用到的功能之一是:系统权限适配。挪进去之后,发现运行稳定。AspectJ是通过织入代码的方式,最终生成新的class文件,当时了解到这一点之后,就没有去想AspectJ在不同系统版本上的异同。于是便愉快地:打包,上线。 又是风和日丽的某日,尽管风和日丽,却接到一个晴天霹雳的消息。说是用户点击登录按钮时,程序闪退。咨询到用户手机型号为三星、Android系统版本为4.2。优先考虑系统版本的问题,赶紧创建一个4.2的虚拟机 -> 运行项目 -> 登录,结果发现,确实闪退了,抛了空指针异常,指向却是切片类中传入的注解实例。
看到如此结果,心下一惊。于是乎,打开编译后的class文件查看,到底是哪旮旯出了问题。于是我看到了下图:
这里还对var10002做了判空操作,当var10002==null时,则通过Class.getDeclearedMethod().getAnnotation()方法获取注解实例,该方法最终调用了Method的getAnnotationNative这个本地方法。于是本人对该方法做了测试,发现了很神奇的现象:
无可奈何花落去,最终我只能在切片类中加入了注解实例判空逻辑。直接让方法运行即可,反正6.0以下手机都不用做权限适配,不是吗?
更多相关文章
- Android(安卓)Studio中新建assets文件的两种方法
- 安卓开机logo和开机动画的几种实现方法
- android canvas常用的方法解析(一)
- 《第一行代码》读完总结
- Android(安卓)Api Demo学习之Activity
- Android(安卓)Develop Training——管理Activity的生命周期(Manag
- Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)
- Android获取SD卡总容量,可用大小,机身内存总容量及可用大小的系统
- 【Android的从零单排开发日记】之入门篇(五)——Android四大组件之