本文仅仅作为笔记的形式来记录一下使用AspectJ遇到的坑。    某日,在帖子上看到Android中使用AspectJ的字眼,这玩意让我眼前一亮,于是便挪到项目中使用。主要用到的功能之一是:系统权限适配。挪进去之后,发现运行稳定。AspectJ是通过织入代码的方式,最终生成新的class文件,当时了解到这一点之后,就没有去想AspectJ在不同系统版本上的异同。于是便愉快地:打包,上线。    又是风和日丽的某日,尽管风和日丽,却接到一个晴天霹雳的消息。说是用户点击登录按钮时,程序闪退。咨询到用户手机型号为三星、Android系统版本为4.2。优先考虑系统版本的问题,赶紧创建一个4.2的虚拟机 -> 运行项目 -> 登录,结果发现,确实闪退了,抛了空指针异常,指向却是切片类中传入的注解实例。

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

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

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

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

更多相关文章

  1. Android(安卓)Studio中新建assets文件的两种方法
  2. 安卓开机logo和开机动画的几种实现方法
  3. android canvas常用的方法解析(一)
  4. 《第一行代码》读完总结
  5. Android(安卓)Api Demo学习之Activity
  6. Android(安卓)Develop Training——管理Activity的生命周期(Manag
  7. Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)
  8. Android获取SD卡总容量,可用大小,机身内存总容量及可用大小的系统
  9. 【Android的从零单排开发日记】之入门篇(五)——Android四大组件之

随机推荐

  1. Android 事件分发机制
  2. android中的sqlite数据库加密
  3. android source code online
  4. 在Android中使用Handler和Thread线程执行
  5. Android ImageView 总结【转载】
  6. Android ImageView图片显示点击背景切换
  7. android退出应用程序解决方案
  8. xmlns:android的作用
  9. Android定时器实现的几种方法
  10. Android 修改开机动画(bootanimation)