APET-NPE插件工作原理

android应用程序编译的过程如下:

从图中,我们可以看出,app编译大致经历了四大阶段:java source files -> .class files -> .dex files -> .apk package 。分析这些阶段,我们兴奋的发现,过程中会产生.class文件,因此,可以借鉴字节码的思路来实现检测目标。

该插件的工作原理如下:

通过合理选择编译过程文件+改造findbugs,扫描过程文件(.class files)来实现NullPointerException检测。

PS:绿色部分为人机交互动作,接下来会详细描述。

怎么安装APET-NPE插件

1、入口链接
入口链接: http://tools.taobao.net/site/store/product_detail.htm?product_id=336
2、安装
方式一:
(1)使用eclipse的插件安装功能 Help -> Install New Software
(2)在Work with输入链接 http://tools.taobao.net/file/eclipsePlugin/eclipse/336/update_site
(3)勾选下面的apet,点next安装
(4)重启eclipse
建议取消 Contact all update sites during install to find required software的勾选,已提高安装速度。
注意:mac和ubuntu操作系统只能采用方式一安装,否则会导致eclipse无法启动!
方式二:
(1)确保eclipse处于关闭状态
(2)拷贝解压后的下载包,直接粘贴至 \eclipse 目录下
推荐使用方式一安装

3、修改eclipse配置(可选,但推荐做)

我们都知道,eclipse是内存大户,eclipse的启动配置,直接影响着它的运行速度和用户体验。因此,我们推荐大家使用以下配置:

(1)找到eclipse.ini文件,打开

(2)推荐删除 --launcher.XXMaxPermSize项,并修改-vmargs配置
==============
windows操作系统
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms512m
-Xmx512m
-XX:PermSize=96m
-XX:MaxPermSize=96m
-Xmn128m
-XX:+DisableExplicitGC
==============
==============
mac操作系统
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Xms512m
-Xmx512m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-Xmn128m
-XX:NewRatio=8
-XX:+DisableExplicitGC
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
==============
==============
ubuntu操作系统
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-Xms512m
-Xmx512m
-XX:PermSize=128m
-XX:MaxPermSize=256m
-Xmn128m
-XX:+DisableExplicitGC
==============

PS:经过测试,优化后的配置,比默认配置减少67.8%的FGC次数,有效提升eclipse速度和体验 :)

4、启动eclipse

怎么使用APET-NPE插件

很简单,操作分为四步进行:

1、打开bugs table视图:Window -> Show View -> Other -> Apet Category -> bugs table

2、选中目标项目/文件夹/文件,点击图标(可以关注 eclipse右下角的进度信息)

3、双击 bugs table 视图的 Description列,查看具体的NullPointerException代码

4、改代码,fix NPE bug

截图如下:

1、打开bugs table

2、选中检测对象,进行扫描

3、查看详细的问题代码

APET-NPE与官方findbugs的区别

有同学问到,按照字节码的思路,findbugs本身就可以扫描NullPointerException,为什么还要自己开发一套新插件呢? 这个问题提的非常好,年初我们也想直接用findbugs,但不能如愿,它本身的特性,限制了它在android领域的作用,最直接的一点,就是它无法直接扫描android代码。于是,jimmy也就应运而生了。

APET-NPE较官方findbugs而言,有以下优势,欢迎大家鉴定:

1、量身定制:我们改造了findbugs的逻辑,简化了android工程的扫描过程。同时在它上面封装一层业务代码,用来选择文件、记录文件路径、管理findbugs启动停止等;
2、支持多任务:APET-NPE能并行处理多任务,且结果视图更清晰易懂,bug描述中文化、简洁化,而官方findbugs只能一次处理一个任务(前提都是要import到eclipse中);
3、精简规则:使潜在缺陷的数量从“千数量级”降低到“10数量级”,提高开发、测试工程师的工作效率;
4、优化逻辑:从逻辑上做了优化,避免findbugs扫描过程中产生的过度消耗机器内存,eclipse挂起、无响应的现象,提高稳定性;
5、贴心推荐eclipse配置:充分优化eclipse.ini中-vmargs的配置,提升插件运行过程中的用户体验。

NullPointerException检测的更多相关文章

  1. APP漏洞扫描器之本地拒绝服务检测详解

    APP漏洞扫描器之本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确全面.本文将讲一下应用漏洞 ...

  2. java 空指针异常(java.lang.NullPointerException)

    在Java中对值为null的指针调用任何方法,就会引发空指针异常(java.lang.NullPointerException).空指针异常绝对 是Java中最难查找和调试的一种异常,你永远无法得到任 ...

  3. java.lang.NullPointerException错误分析

    java.lang.NullPointerException是什么错误 你使用了空的指针.在java中虽然号称抛弃了C++中不安全的指针,但其实他所有的东西你都可以理解为指针.这种情况一般发生在你使用 ...

  4. 空指针错误 java.lang.NullPointerException

    使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便 不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long) ...

  5. 安卓开发过程中空指针的问题Java.lang.NullPointerException

    最近做一个新闻客户端的应用,经常出现空指针的问题,我想一方面可能是自己水平有限,二是开发过程中有一些遗漏的地方.一般情况下新手出现空指针的概率较高.下面来总结一下经常出现的问题. 1.所谓的指针,就是 ...

  6. java.lang.NullPointerException 错误原因

    [http-nio-8081-exec-1] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for ...

  7. JAVA可检测异常和非检测异常

    Java的可检测异常和非检测异常泾渭分明.可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则. 非检测异常不遵循处理或声明规则.在产生此类异常时,不一定非要采取任何适当 ...

  8. NullPointerException异常的原因及java异常??

    所谓空指针异常,是因为用空(null)去调用属性或方法.   null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常.   <--主要有以下几种原因:   1.使用了未 ...

  9. eclipse中。安装findbugs java检测工具

    问题提出: 当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价 ...

随机推荐

  1. 创建oracle数据库图示(一步一步教你安装oracle)

    123456 密码 版权声明:本文为博主原创文章,未经博主允许不得转载.

  2. 【249】◀▶IEW-Unit14

    Unit 14 Money and Finance 线图写作技巧 1.Model1对应图片分析 The graph contains information about the price in US ...

  3. 后缀数组dc3算法模版(待补)

    模版: ; #define F(x) ((x)/3+((x)%3==1?0:tb)) #define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2) int wa[maxn ...

  4. 有关Linux的.a、.so和.o文件---mark一下(转)

    gcc 生成 .a静态库和 .so动态库   (转载) 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该 ...

  5. 51nod1117【贪心】

    思路:哈夫曼树~~哇塞,那么有道理. 利用堆维护:每次从堆里取两个最小加起来,然后还是最小的两个,最后只剩一根总的 #include <bits/stdc++.h> using names ...

  6. python矩阵相加

    举个栗子: # 两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵: # 使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中. import n ...

  7. vue路由守卫

    路由守卫 //路由进来之时 beforeRouteEnter(to, from, next) { console.log(this, 'beforeRouteEnter'); // undefined ...

  8. unity 模型层次细节

    http://blog.csdn.net/qq_25210959/article/details/51734517 层次细节(LOD),它是根据物体在游戏画面中所占视图的百分比来调用不同复杂度的模型的 ...

  9. 自动化测试工具 Test Studio入门教程

    Test Studio安装 可以到下载试用版 官网 http://www.telerik.com/teststudio , 装完以后需要装silverlight 安装好了,主界面是介个样子的 Test ...

  10. 查看java 版本

    执行 java -version 命令,如下图所示如果没有明确显示位数的,则说明是32位 C:\MyTools\jdk1.7.0\bin>java -version java version & ...