适用于Android的最低工作SpotBugs设置

时间:2018-10-04 09:52:33

标签: android gradle spotbugs

如何为Android设置SpotBug?

我尝试遵循official documentationgradle 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项目的最小工作设置示例吗?

2 个答案:

答案 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:

project / build.gradle

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
    }
}

project / app / build.gradle

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报告,以查看人类可读的格式。