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 文件夹下