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. jQuery名字冲突 noConflict()方法

    今天检查项目的时候发现一个jquery变量$的控制权让渡问题,原因是: 开发这个模块的同事使用了一个日历插件,把$的控制权让出了,就导致了加载完这个页面后再加载其他页面就会报出$不是一个函数的错误. ...

  2. CodeForces 485A Factory (抽屉原理)

    A. Factory time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. CentOS6下安装Java jdk1.7.0_10和 maven

    安装步骤如下: 1. 下载JDK7.0_10 (jdk-7u10-linux-i586.tar.gz) 地址: 2. 卸载系统自带的开源JDK 查看是否安装JDK rpm -qa | grep jav ...

  4. Linear Algebra - Determinant(几何意义)

    二阶行列式的几何意义 二阶行列式 \(D = \begin{vmatrix}a_1&a_2\\b_1&b_2\end{vmatrix} = a_1b_2 - a_2b_1\) 的几何意 ...

  5. 关于$_SERVER['PHP_SELF']用法及其安全性---改良

    网站来源:http://www.5idev.com/p-php_server_php_self.shtml PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题 PH ...

  6. FString转到char* TCHAR*

    int ARPG_Database::BP_GetColumnIndex(int resultSet, FString columnName) { return GetColumnIndex(resu ...

  7. Shaderlab blend

    http://www.cnblogs.com/daxiaxiaohao/p/4059310.html 1.不透明度 当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们 ...

  8. 51nod1112(xjb)

    題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1112 題意:中文題誒- 思路:對於函數 f(x) = a + ...

  9. 洛谷P3405 [USACO16DEC]Cities and States省市

    P3405 [USACO16DEC]Cities and States省市 题目描述 To keep his cows intellectually stimulated, Farmer John h ...

  10. uoj#280. 【UTR #2】题目难度提升(构造)

    传送门 咱先膜一下\(GXZ\)再说 我们先把序列从小到大排序,然后分情况讨论 无解是不存在的,从小到大输出所有数肯定可行 情况一,如果\(a[mid]=a[mid+1]\),因为最终的中位数也是它们 ...