1、FindBugs简介算法
FindBugs是一款Java缺陷检测工具,它经过分析静态字节码能够查找出200多种错误模式,例如空指针取消引用、无限递归循环、Java库的错误使用和死锁等。安全
2、安装FindBugs插件多线程
Android Studio默认是没有安装FindBugs插件的,须要咱们本身进行安装。所幸Android Studio提供了丰富的插件,能够直接从库插件库中进行安装。固然也能够本身手动从网上下载好该插件,而后安装。这里将两种方法都简单介绍一下。函数
一、从Android Studio插件库中安装 工具
点击面板中主菜单Files > Settings > Plugs 就能够 进入到插件中心,以下图所示。性能
②处能够输入要查找的插件名,若是安装了,并知足③处筛选条件,会显示在④处列表中。加密
③处选择筛选范围,插件
④处用于显示在②处和③处所指定条件下查询到的插件列表,右边的选择框可选中表示该插件能够用,不然表示不可用。 线程
⑤处显示选择的插件的相关信息3d
⑥处是一个入口,能够跳转去安装JetBrains提供的插件。
⑦处用于跳转到从仓库中浏览并安装插件。
⑧处用于安转下载到本地的插件。
这里咱们选择从“Browse Repositories”进入安装,进入后搜索“FindBugs”会显示以下界面,咱们选择“FindBugs-IDEA”进行安装。(我这里是已经安装过了,若是没有安装,右边会显示“install”按钮。)
安装完成后,返回到Plugs主面板,搜索“FindBugs”就会显示以下界面,若是不想用了,能够点击“Uninstall”来卸载。
当安装完成后,会提示重启AS,重启动后便可使用了。
二、从磁盘安装
首先手动下载该插件,这里提供下一个连接:https://pan.baidu.com/s/1qbtsnCby-xpmbC9jBdfMSg ,提取码:fuae。
仍然是从上述的插件面板中操做,选择第⑧点击“Install plugin from disk”后选择下载好的插件,按照提示操做便可。
3、FindBugs的启动
安装成功后,有两种方式能够启动FindBugs的分析功能。
一、从控制面板中启动
在AS界面的左下角有个“FindBugs-IDEA”按钮,以下图红框所示,经过点击该按钮,能够调起工具窗口面板,经过该窗口能够开始启动分析(工具窗口面板及其使用,后面会介绍)。
二、经过右键菜单启动
在AS界面点击右键,在弹出的菜单栏中能够看到“FindBugs”选项,子菜单栏中能够选择要分析的文件范围(AS的不一样区域点击右键,“FindBugs”选项的位置和子菜单也会略有不一样)。
4、FindBugs的基本使用
分析完成后,默认会显示以下界面。这里对该面板各个区域进行介绍。
一、工具窗口
该区域提供了众多的选项,能够方便设置分析范围和展现分析结果。
这里对其中几项再详细进行说明。
(1)bug的类型
按照第12点根据bug类型分组后,会显示以下界面:
当前模块分析结果只展现了部分类型的bug,实际上FindBugs能够展现9中类型:
1)Bad practice
很差的实践。好比不规范的类、方法、变量的命名;调用有返回值的方法时没有正确使用返回值等。
2)Dodgy code
可疑的代码。好比使用switch/case语法,没有使用default;数据计算后的精度丢失等。
3)Malicious code vulnerability
恶意的代码漏洞,若是代码公开,可能致使恶意的修改和攻击。好比该使用final修改的常量没有使用final,致使该常量可能被修改;该使用protected修饰的,却使用public修饰,这不利于对成员的保护;
4)Correctness
正确性问题,不正确使用会致使报错。好比该判断空指针的地方没有判空,这会致使空指针异常;构造函数中使用了没有复制的变量,若是使用时对该变量有判空,该语句不会执行,而若是没有判空,则会报空指针异常。
5)Performance
性能问题。好比定义了某些变量却从未被读取过;定义的变量从未被使用过等,在执行过程当中会占用空间和时间,建议删掉;内部类应该加上static修饰符;能够采用更高效的函数来实现功能等。
6)Multithreaded correctness
多线程正确性,主要是多线程环境下线程安全问题。好比volatile的不正确使用;该使用syncronized关键字的地方没有使用等。
7)Experimental
实验。
8)Security
安全性问题。要扫描到安全方面的bug,须要在设置>FindBugs-IDEA >General > Plugins中添加Find Security Bugs插件。这里主要聚焦于安全方面的问题,好比向sdcard等存储卡中写数据,其中可能包含私人信息;写入sdcard等存储器数据容易被其它程序读取;使用的加密算法不够安全等。
9)Internationalization(I18N)
国际化问题。好比字符串与字节相互转换时的字符集问题等,有些地方须要显示指定字符集,由于不一样平台或语言使用的字符集有差别。
这里仅对这几个大类简单的介绍,因为能检测到的错误项很是多,没法一一举例。在实际使用过程当中,能够查看具体项,根据提示来解决问题。固然,有些问题,FindBugs报出来了,但咱们实际工做中可能想忽略掉,不但愿被检测,能够在设置中选择要分析的项,后面会介绍该设置项。
(2)Bug的严重级别
第15点中,按照bug严重级别进行排列,分析结果会以以下形式展现,每一项点击后能够查看更详细的列表:
其严重级别分为分为以下4个等级:
1)Of Concren 建议, 若是遵循能更好的完善代码
2)Troubling 很差的, 可能会引起不良后果
3)Scary 严重问题, 在某种状况下必定会出现问题
4)Scariest 很是严重, 已经影响到当前程序功能
(3)设置
进入到FindBugs的高阶设置面板。
二、分析结果显示区
以树状结构展现分析后的结果,能够经过工具窗口中的选择,来决定该区域是展开仍是关闭,以什么对结果进行分组,须要显示哪些内容等。
三、bug预览区
当选择具体某一个bug时,此处会显示问题点所在的上下文环境。
四、bug详情区
这部分展现了选中的bug的详细信息,好比所在的类,方法,有问题的字段,当期bug是什么样的问题,为何须要修改,修改建议等。
5、FindBugs的高阶使用
控制面板中提供了“设置”入口,从这个入口能够配置FindBlugs的一些更高阶的用法。好比添加安全相关问题的扫描,过滤哪些文件不扫描,设置报告文档中不包含那些问题项等。这一节介绍其中比较经常使用的一些功能点。该设置面板的路径为:设置 > FindBugs-IDEA。
一、General
这一栏总共有六项
(1)Compile affected files before analyze 在分析以前进行编译
(2)Analyze affected files affter comlplie 在变更的文件编译以后分析
(3)Analyze affected files after auto make 在自动Make以后分析变更的文件 自动
(4)Run analyze in background 在后台分析,不显示进度条窗口
(5) Active toolwindow on run
(6)Plugins
这部分能够再添加一些增强FindBugs功能的插件,前面提到过的“Security”,就须要用到这里的“find Security Bugs”插件来扫描。
二、Report
这一项中有多个选项,用于选择报告文件中要包含的内容。
三、Filter
过滤器,用于过滤哪些文件须要扫描,哪些不用扫描。
四、Detector
用于配置检测器列表,选中的检测器将参与到扫描中。
五、Annotate
注解相关的设置,这一部分均选择默认便可。
六、Share
共享设置文件,通常能够忽略。