使用代码分析工具PMD检查Android Java代码缺陷

  • 2020 年 3 月 16 日
  • 筆記

1.背景

使用代码分析工具PMD检查Android Java代码缺陷,本文是个整理。

介绍

PMD是一个静态源代码分析器。它找到常见的编程缺陷,如未使用的变量,空的catch块,不必要的对象创建等等。它主要关注Java和Apex,但支持其他六种语言。 PMD具有许多内置检查(在PMD术语,规则中),这些检查在规则参考中针对每种语言进行了记录。我们还支持广泛的API来编写您自己的规则,您可以使用Java或作为自包含的XPath查询来执行。 在集成到构建过程中时,PMD最有用。然后,它可以用作质量门,以强制执行代码库的编码标准。除其他外,PMD可以运行:

  • 作为Maven的目标
  • 作为Ant任务
  • 作为Gradle任务
  • 从命令行

官网地址 https://pmd.github.io/pmd/index.html

命令行方式使用 PMD 的Demo https://github.com/vir56k/demo/tree/master/pmd/%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%96%B9%E5%BC%8F%E4%BD%BF%E7%94%A8pmd

Gradle 方式使用 PMD 的Demo https://github.com/vir56k/demo/tree/master/pmd/UsePMDByGradle

2.命令行方式使用 PMD

2.1 先了解使用手册

https://pmd.github.io/pmd/pmd_userdocs_installation.html#how-to-install-pmd-and-cpd

2.2 下载

前往官网,下载 压缩包,解压 下载地址 https://github.com/pmd/pmd/releases

2.3 执行检测的命令行格式

   ./run.sh pmd -d ../../../src/main/java/ -f text -R rulesets/java/basic.xml

2.4 我的脚本

    # 准备环境信息      CUR=`PWD`      echo 当前工作目录:${CUR}      basepath=$(cd `dirname $0`; pwd)      echo 当前执行的脚本文件的父目录:${basepath}      PMD_HOME=$basepath/pmd-bin-6.12.0      echo PMD_HOME:${PMD_HOME}      PROJ_DIR=$(cd ${basepath}; cd ../../; pwd)      echo PROJ_DIR:${PROJ_DIR}          SRC=${PROJ_DIR}/app/src/main/java      FORMAT=html      RULE=rulesets/java/basic.xml        ${PMD_HOME}/bin/run.sh pmd -d ${SRC} -f ${FORMAT} -R ${RULE}

3.Gradle 方式使用 PMD

3.1 引用插件

apply plugin: 'pmd'

3.2 编写task

def configDir = "${project.rootDir}/scripts"  def reportsDir = "${project.buildDir}/reports"      task pmd(type: Pmd) {        ignoreFailures = true        ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml")        ruleSets = []          source 'src'        include '**/*.java'        exclude '**/gen/**'          reports {            xml.enabled = false            html.enabled = true            xml {                destination "$reportsDir/pmd/pmd.xml"            }            html {                destination "$reportsDir/pmd/pmd.html"            }        }    }

3.3 关联到 check task

check.dependsOn 'pmd'

3.4 执行 check

./gradlew check

查看报告

位于:build/reports/pmd 文件夹下

image.png

4. 参考

https://pmd.github.io/pmd/index.html