Android用のSpotBugsを設定するにはどうすればよいですか?
公式ドキュメント と 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プロジェクトの最小限の動作設定の例を見せていただけますか?
私は私の側でいくつかのテストを行い、私はそれをこのように機能させることができました:
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')
}
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
excludeFilter = file("$project/spot-bugs-exclude.xml")
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は「Java.io.IOException:分析するファイルを開くことができません」で失敗します
また、人間が読める形式で表示するには、HTMLレポートを有効にし、XMLレポートを無効にする必要があります。
生成されたクラスを分析から除外するには、excludFilter
を設定します。サンプル除外ファイルのチェックについては here または here(findbugs-exclude.xmlと同じ)