android { compileSdk 31 defaultConfig { minSdk 19 targetSdk 30 multiDexEnabled true vectorDrawables.useSupportLibrary true vectorDrawables.generatedDensities = [] testApplicationId "de.danoeh.antennapod.core.tests" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard.cfg" } debug { } } packagingOptions { exclude "META-INF/LICENSE.txt" exclude "META-INF/NOTICE.txt" // Extraneous jsoup files exclude "META-INF/CHANGES" exclude "META-INF/README.md" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } testOptions { animationsDisabled = true unitTests { includeAndroidResources = true } } lintOptions { disable "GradleDependency" checkDependencies true warningsAsErrors true abortOnError true checkGeneratedSources = true } buildFeatures { viewBinding true } } tasks.withType(Test) { testLogging { exceptionFormat "full" events "skipped", "passed", "failed" showStandardStreams true displayGranularity 2 } } gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint" } } apply plugin: 'com.github.spotbugs' spotbugs { effort = 'max' reportLevel = 'medium' excludeFilter = rootProject.file('config/spotbugs/exclude.xml') ignoreFailures = true // Handled by printing task } gradle.taskGraph.beforeTask { task -> if (task.name.toLowerCase().contains('spotbugs')) { task.doLast { def reportFile = task.project.file("build/reports/spotbugs/playDebug.xml") if (!reportFile.exists()) return def slurped = new groovy.xml.XmlSlurper().parse(reportFile) def foundErrors = false slurped['BugInstance'].each { bug -> logger.error "[SpotBugs] ${bug['LongMessage']} [${bug.@'type'}]" bug['SourceLine'].each { line -> logger.error "[SpotBugs] ${line['Message']}" foundErrors = true } } if (foundErrors) { throw new TaskExecutionException(task, new Exception("SpotBugs violations were found. See output above for details.")) } } } }