如何为Android设置SpotBug?
我尝试遵循official documentation和gradle plugin的要求,但是Android的设置不完整且令人困惑,并且无法正常工作。
我尝试了以下设置。
build.gradle(项目):
buildscript {
repositories {
// ...
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
// ...
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.4"
}
}
build.gradle(应用程序):
//...
apply plugin: "com.github.spotbugs"
android {
// ...
sourceSets {
main {
java.srcDirs = ['src/main/java']
}
}
}
// ...
spotbugs {
toolVersion = "3.1.3"
ignoreFailures = true
reportsDir = file("$project.buildDir/findbugsReports")
effort = "max"
reportLevel = "high"
}
tasks.withType(com.github.spotbugs.SpotBugsTask) {
// What do I need to do here?
}
我尝试使用./gradlew spotbugsMain
运行它,但是gradle任务丢失了。
我应该手动添加任务吗?我该怎么办?
您能给我看看一个Android项目的最小工作设置示例吗?
答案 0 :(得分:5)
我站在一边进行了一些测试,然后设法使它像这样工作:
1)将sourceSets
声明移到android
块之外。将其保留为空,仅用于生成spotbugsMain
任务,不会影响全球Android版本。
android {
// ...
}
sourceSets {
main {
java.srcDirs = []
}
}
2)保留您的spotbugs
块,并像这样配置SpotBugsTask
任务:
tasks.withType(com.github.spotbugs.SpotBugsTask) {
classes = files("$projectDir.absolutePath/build/intermediates/classes/debug")
source = fileTree('src/main/java')
}
它将在app/build/findbugsReports
重要提示:
它仅与./gradlew build
命令一起使用,./gradlew spotbugsMain
无效,因为必须先构建项目
您可以解决添加assemble
依赖项的问题:
tasks.withType(com.github.spotbugs.SpotBugsTask) {
dependsOn 'assemble'
classes = files("$projectDir.absolutePath/build/intermediates/classes/debug")
source = fileTree('src/main/java')
}
答案 1 :(得分:0)
继ToYonos回答之后(2018年10月9日);将此用于Android Studio 3.4:
buildscript {
repositories {
google()
jcenter()
maven {
url 'https:// maven url 1'
}
maven {
url "https://plugins.gradle.org/m2/" // For SpotBugs
}
}
dependencies {
classpath '...'
classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:2.0.0" // For SpotBugs
}
}
apply plugin: 'com.android.application'
apply plugin: '...'
apply plugin: "com.github.spotbugs"
dependencies {
...
}
// For SpotBugs to create 'spotbugsMain' gradle task
sourceSets {
main {
java.srcDirs = []
}
}
spotbugs {
ignoreFailures = true
reportsDir = file("$project.buildDir/SpotBugsReports")
effort = "max"
reportLevel = "high"
}
tasks.withType(com.github.spotbugs.SpotBugsTask) {
dependsOn 'assembleDebug'
classes = files("$project.buildDir/intermediates/javac") // Important to use this path
source = fileTree('src/main/java')
reports {
// Enable HTML report only
html.enabled = true
xml.enabled = false
}
}
您可以通过运行gradle任务为您的调试版本生成报告: ./gradlew spotbugsMain
使用classes = files("$project.buildDir/intermediates/javac")
很重要,否则会出现错误"java.io.IOException: No files to analyze could be opened"
-请参见Findbugs fails with "java.io.IOException: No files to analyze could be opened"
您还需要启用HTML报告和禁用XML报告,以查看人类可读的格式。