首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Android的最小工作SpotBugs设置

用于Android的最小工作SpotBugs设置
EN

Stack Overflow用户
提问于 2018-10-04 09:52:32
回答 2查看 6.1K关注 0票数 26

如何为安卓系统设置SpotBugs?

我试着跟随正式文件gradle插件,但是安卓的设置是不完整和令人困惑的,没有起作用。

我尝试了下面的设置。

build.gradle (项目):

代码语言:javascript
复制
buildscript {
  repositories {
    // ...
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    // ...
    classpath "gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.4"
  }
}

build.gradle (app):

代码语言:javascript
复制
//...
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项目最小工作设置的例子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-09 10:32:53

我做了一些测试,我设法让它像这样工作:

1)将sourceSets声明移出android块。让它空置,这只是为spotbugsMain的任务生成,它不会影响到全球安卓系统的建设。

代码语言:javascript
复制
android {
   // ...
}

sourceSets {
    main {
        java.srcDirs = []
    }
}

2)保留spotbugs块并配置如下SpotBugsTask任务:

代码语言:javascript
复制
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依赖项:

代码语言:javascript
复制
tasks.withType(com.github.spotbugs.SpotBugsTask) {
    dependsOn 'assemble'
    classes = files("$projectDir.absolutePath/build/intermediates/classes/debug")
    source = fileTree('src/main/java')
}
票数 12
EN

Stack Overflow用户

发布于 2019-06-05 20:47:14

以下是ToYonos答案(2018年10月9日);将此用于AndroidStudio3.4及以上版本:

项目/build.gradle

代码语言:javascript
复制
buildscript {
    repositories {
        google()
        jcenter()
        maven {
            url 'https:// maven url 1'
        }
        maven {
            url "https://plugins.gradle.org/m2/" // Add this, for SpotBugs
        }
    }
    dependencies {
        classpath '...'

        // If you're using gradle 6.x, add this to use SpotBugs app version 4.0.2
        classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.3.0"

        // If you're using gradle 4.x or 5.x, add this to use SpotBugs app version 3.1.2
        classpath "com.github.spotbugs:spotbugs-gradle-plugin:2.0.1" 
    }
}

项目/应用程序/build.gradle

代码语言:javascript
复制
apply plugin: 'com.android.application'
apply plugin: '...'
apply plugin: "com.github.spotbugs" // <- Add this
    
dependencies {
    ...
}

// This block is only needed for gradle 4/5 only.
// It's for SpotBugs to create a 'spotbugsMain' gradle task.
sourceSets {
    main {
        java.srcDirs = []
    }
}
    
spotbugs {
    ignoreFailures = true
    reportsDir = file("$project.buildDir/SpotBugsReports")
    effort = "max"
    reportLevel = "high"
}

// Note: gradle 4/5 should use "com.github.spotbugs.SpotBugsTask"
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
    dependsOn 'assembleDebug'
    classes = files("$project.buildDir/intermediates/javac") // Important to use this path
    excludeFilter = file("$project/spot-bugs-exclude.xml") // Optional - Explained below
    source = fileTree('src/main/java') // Only needed on gradle 4/5
    reports {
        // Enable HTML report only
        html.enabled = true
        xml.enabled = false
    }
}

可以通过运行gradle任务为调试生成生成报告:

第6级:./gradlew spotbugsDebug用于第5级或第4级:./gradlew spotbugsMain

使用classes = files("$project.buildDir/intermediates/javac")很重要,否则您将得到一个错误"java.io.IOException: No files to analyze could be opened" --参见Findbug在"java.io.IOException:无法打开要分析的文件“中失败

您还需要启用HTML报告并禁用XML报告,以查看可读的格式。

ignoreFailures = true是可选的。当SpotBugs检测到代码警告时,默认情况下它将以"BUILD FAILED" +报表文件结尾。设置ignoreFailures = true意味着分级任务将以"BUILD SUCCESSFUL" +一个报表文件结束。

若要从分析中排除某些生成的类,请设置一个excludeFilter。对于示例排除文件,请检查这里这里(与findbug相同)

更多信息和教程在这里:https://mikedemaso.com/tech/2020-06-10-spotbugs-gradle-plugin-android/

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52643805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档