Build optimizations on android (#88)
* staticAnalysis tasks now generated by build variants * Checkstyle and Pmd now disabled by default
This commit is contained in:
parent
15ef3d7332
commit
1da691921b
|
|
@ -6,7 +6,7 @@ apply plugin: 'io.gitlab.arturbosch.detekt'
|
|||
def getCpdTask
|
||||
def getPmdTask
|
||||
def getCheckstyleTask
|
||||
def getLintTasks
|
||||
def getLintTask
|
||||
def getKotlinDetektTask
|
||||
|
||||
def appendError
|
||||
|
|
@ -73,15 +73,19 @@ ext.getIdeaFormatTask = { isAndroidProject, sources ->
|
|||
}
|
||||
}
|
||||
|
||||
ext.getStaticAnalysisTaskNames = { isAndroidProject, sources ->
|
||||
ext.getStaticAnalysisTaskNames = { isAndroidProject, sources, buildVariant, checkstyleEnabled, pmdEnabled ->
|
||||
def tasksNames = new ArrayList<String>()
|
||||
try {
|
||||
tasksNames.add(getCpdTask(isAndroidProject, sources))
|
||||
tasksNames.add(getKotlinDetektTask())
|
||||
if (isAndroidProject) {
|
||||
tasksNames.add(getCheckstyleTask(sources))
|
||||
tasksNames.add(getPmdTask(sources))
|
||||
tasksNames.addAll(getLintTasks())
|
||||
if (checkstyleEnabled) {
|
||||
tasksNames.add(getCheckstyleTask(sources))
|
||||
}
|
||||
if (pmdEnabled) {
|
||||
tasksNames.add(getPmdTask(sources))
|
||||
}
|
||||
tasksNames.add(getLintTask(buildVariant))
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
println(exception.toString())
|
||||
|
|
@ -111,12 +115,26 @@ ext.generateReport = { isAndroidProject ->
|
|||
}
|
||||
|
||||
if (isAndroidProject) {
|
||||
previousCount = count
|
||||
count = appendPmdErrors(count, new File("${project.buildDir}/reports/pmd.xml"))
|
||||
if (count - previousCount > 0) {
|
||||
consoleReport.append("\nPMD: FAILED (" + (count - previousCount) + " errors)")
|
||||
} else {
|
||||
consoleReport.append("\nPMD: PASSED")
|
||||
def checkstyleFile = new File("${project.buildDir}/reports/checkstyle.xml")
|
||||
if (checkstyleFile.exists()) {
|
||||
previousCount = count
|
||||
count = appendCheckstyleErrors(count, checkstyleFile)
|
||||
if (count - previousCount > 0) {
|
||||
consoleReport.append("\nCheckstyle: FAILED (" + (count - previousCount) + " errors)")
|
||||
} else {
|
||||
consoleReport.append("\nCheckstyle: PASSED")
|
||||
}
|
||||
}
|
||||
|
||||
def pmdFile = new File("${project.buildDir}/reports/pmd.xml")
|
||||
if (pmdFile.exists()) {
|
||||
previousCount = count
|
||||
count = appendPmdErrors(count, pmdFile)
|
||||
if (count - previousCount > 0) {
|
||||
consoleReport.append("\nPMD: FAILED (" + (count - previousCount) + " errors)")
|
||||
} else {
|
||||
consoleReport.append("\nPMD: PASSED")
|
||||
}
|
||||
}
|
||||
|
||||
previousCount = count
|
||||
|
|
@ -126,14 +144,6 @@ ext.generateReport = { isAndroidProject ->
|
|||
} else {
|
||||
consoleReport.append("\nLint: PASSED")
|
||||
}
|
||||
|
||||
previousCount = count
|
||||
count = appendCheckstyleErrors(count, new File("${project.buildDir}/reports/checkstyle.xml"))
|
||||
if (count - previousCount > 0) {
|
||||
consoleReport.append("\nCheckstyle: FAILED (" + (count - previousCount) + " errors)")
|
||||
} else {
|
||||
consoleReport.append("\nCheckstyle: PASSED")
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 0) {
|
||||
|
|
@ -254,57 +264,56 @@ appendLintErrors = { count, lintFile ->
|
|||
|
||||
getCpdTask = { isAndroidProject, sources ->
|
||||
def taskName = (isAndroidProject ? "android" : "server") + "cpd_${project.name}"
|
||||
tasks.create(taskName, tasks.findByName('cpdCheck').getClass().getSuperclass()) {
|
||||
minimumTokenCount = 60
|
||||
source = files(sources)
|
||||
ignoreFailures = true
|
||||
reports {
|
||||
xml {
|
||||
enabled = true
|
||||
destination = file("${project.buildDir}/reports/cpd.xml")
|
||||
def task = tasks.findByName(taskName)
|
||||
if (task == null) {
|
||||
task = tasks.create(taskName, tasks.findByName('cpdCheck').getClass().getSuperclass()) {
|
||||
minimumTokenCount = 60
|
||||
source = files(sources)
|
||||
ignoreFailures = true
|
||||
reports {
|
||||
xml {
|
||||
enabled = true
|
||||
destination = file("${project.buildDir}/reports/cpd.xml")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return taskName
|
||||
return task.name
|
||||
}
|
||||
|
||||
getPmdTask = { sources ->
|
||||
def taskName = "pmd_${project.name}"
|
||||
tasks.create(taskName, Pmd) {
|
||||
pmdClasspath = configurations.pmd.asFileTree
|
||||
ruleSetFiles = files "$buildScriptsDir/pmd/rulesets/java/android.xml"
|
||||
ruleSets = []
|
||||
source files(sources)
|
||||
ignoreFailures = true
|
||||
reports {
|
||||
html {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/pmd.html")
|
||||
}
|
||||
xml {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/pmd.xml")
|
||||
def task = tasks.findByName(taskName)
|
||||
if (task == null) {
|
||||
task = tasks.create(taskName, Pmd) {
|
||||
pmdClasspath = configurations.pmd.asFileTree
|
||||
ruleSetFiles = files "$buildScriptsDir/pmd/rulesets/java/android.xml"
|
||||
ruleSets = []
|
||||
source files(sources)
|
||||
ignoreFailures = true
|
||||
reports {
|
||||
html {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/pmd.html")
|
||||
}
|
||||
xml {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/pmd.xml")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return taskName
|
||||
return task.name
|
||||
}
|
||||
|
||||
getLintTasks = {
|
||||
def lintTaskNames = new ArrayList<String>()
|
||||
|
||||
def lintReleaseTask = tasks.matching {
|
||||
it.getName().contains("lint") && it.getName().contains("Release")
|
||||
}.first()
|
||||
//TODO return on jack lintReleaseTask.dependsOn.clear()
|
||||
lintTaskNames.add(lintReleaseTask.getName())
|
||||
|
||||
def lintDebugTask = tasks.matching {
|
||||
it.getName().contains("lint") && it.getName().contains("Debug")
|
||||
}.first()
|
||||
//TODO return on jack lintDebugTask.dependsOn.clear()
|
||||
lintTaskNames.add(lintDebugTask.getName())
|
||||
|
||||
getLintTask = { buildVariant ->
|
||||
def lintTaskName
|
||||
if (buildVariant != null) {
|
||||
lintTaskName = "lint${buildVariant.name.capitalize()}"
|
||||
} else {
|
||||
def lintDebugTask = tasks.matching { it.getName().contains("lint") && it.getName().contains("Debug") }.first()
|
||||
lintTaskName = lintDebugTask.getName()
|
||||
}
|
||||
android.lintOptions.abortOnError = false
|
||||
android.lintOptions.checkAllWarnings = true
|
||||
android.lintOptions.warningsAsErrors = false
|
||||
|
|
@ -312,36 +321,37 @@ getLintTasks = {
|
|||
android.lintOptions.xmlOutput = file "$project.buildDir/reports/lint_report.xml"
|
||||
android.lintOptions.htmlReport = false
|
||||
android.lintOptions.lintConfig = file "$buildScriptsDir/lint/lint.xml"
|
||||
return lintTaskNames
|
||||
return lintTaskName
|
||||
}
|
||||
|
||||
getCheckstyleTask = { sources ->
|
||||
def taskName = "checkstyle_${project.name}"
|
||||
def compileReleaseTask = tasks.matching {
|
||||
it.getName().contains("compile") && it.getName().contains("Release") && it.getName().contains("Java") && !it.getName().contains("UnitTest")
|
||||
}.last()
|
||||
tasks.create(taskName, Checkstyle) {
|
||||
ignoreFailures = true
|
||||
showViolations = false
|
||||
source files(sources)
|
||||
configFile file("$buildScriptsDir/checkstyle/configuration/touchin_checkstyle.xml")
|
||||
checkstyleClasspath = configurations.checkstyle.asFileTree
|
||||
classpath = files(System.getenv("ANDROID_HOME") + "/platforms/" + android.compileSdkVersion + "/android.jar") +
|
||||
files(System.properties.'java.home' + "/lib/rt.jar") +
|
||||
compileReleaseTask.classpath
|
||||
reports {
|
||||
xml {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/checkstyle.xml")
|
||||
def taskName = "checkstyle_$project.name"
|
||||
def task = tasks.findByName(taskName)
|
||||
if (task == null) {
|
||||
def compileReleaseTask = tasks.matching {
|
||||
it.getName().contains("compile") && it.getName().contains("Release") && it.getName().contains("Java") && !it.getName().contains("UnitTest")
|
||||
}.last()
|
||||
task = tasks.create(taskName, Checkstyle) {
|
||||
ignoreFailures = true
|
||||
showViolations = false
|
||||
source files(sources)
|
||||
configFile file("$buildScriptsDir/checkstyle/configuration/touchin_checkstyle.xml")
|
||||
checkstyleClasspath = configurations.checkstyle.asFileTree
|
||||
classpath = files(System.getenv("ANDROID_HOME") + "/platforms/" + android.compileSdkVersion + "/android.jar") +
|
||||
files(System.properties.'java.home' + "/lib/rt.jar") +
|
||||
compileReleaseTask.classpath
|
||||
reports {
|
||||
xml {
|
||||
enabled = true
|
||||
destination file("${project.buildDir}/reports/checkstyle.xml")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return taskName
|
||||
return task.name
|
||||
}
|
||||
|
||||
getKotlinDetektTask = {
|
||||
return "detekt"
|
||||
}
|
||||
getKotlinDetektTask = { "detekt" }
|
||||
|
||||
task optimizePng {
|
||||
doFirst {
|
||||
|
|
|
|||
|
|
@ -18,10 +18,14 @@ gradle.projectsEvaluated {
|
|||
}
|
||||
|
||||
def excludes = rootProject.extensions.findByName("staticAnalysisExcludes")
|
||||
def checkstyleEnabled = rootProject.extensions.findByName("checkstyleEnabled") ?: false
|
||||
def pmdEnabled = rootProject.extensions.findByName("pmdEnabled") ?: false
|
||||
|
||||
def androidStaticAnalysisTasks = getStaticAnalysisTaskNames(true, getAndroidProjectSources(excludes))
|
||||
def androidIdeaFormatTask = getIdeaFormatTask(true, getAndroidProjectSources(excludes))
|
||||
task staticAnalysis {
|
||||
def androidSources = getAndroidProjectSources(excludes)
|
||||
def androidStaticAnalysisTasks = getStaticAnalysisTaskNames(true, androidSources, null, checkstyleEnabled, pmdEnabled)
|
||||
def androidIdeaFormatTask = getIdeaFormatTask(true, androidSources)
|
||||
|
||||
task staticAnalysisWithFormatting {
|
||||
androidStaticAnalysisTasks.each { task ->
|
||||
tasks.findByName(task).mustRunAfter(androidIdeaFormatTask)
|
||||
}
|
||||
|
|
@ -32,16 +36,17 @@ gradle.projectsEvaluated {
|
|||
}
|
||||
}
|
||||
|
||||
task staticAnalysisWithoutFormatting {
|
||||
task staticAnalysis {
|
||||
dependsOn androidStaticAnalysisTasks
|
||||
doFirst {
|
||||
generateReport(true)
|
||||
}
|
||||
}
|
||||
|
||||
def serverStaticAnalysisTasks = getStaticAnalysisTaskNames(false, getServerProjectSources(excludes))
|
||||
def serverStaticAnalysisTasks = getStaticAnalysisTaskNames(false, getServerProjectSources(excludes), null, checkstyleEnabled, pmdEnabled)
|
||||
def serverIdeaFormatTask = getIdeaFormatTask(false, getServerProjectSources(excludes))
|
||||
task serverStaticAnalysis {
|
||||
|
||||
task serverStaticAnalysisWithFormatting {
|
||||
serverStaticAnalysisTasks.each { task ->
|
||||
tasks.findByName(task).mustRunAfter(serverIdeaFormatTask)
|
||||
}
|
||||
|
|
@ -52,12 +57,19 @@ gradle.projectsEvaluated {
|
|||
}
|
||||
}
|
||||
|
||||
task serverStaticAnalysisWithoutFormatting {
|
||||
task serverStaticAnalysis {
|
||||
dependsOn serverStaticAnalysisTasks
|
||||
doFirst {
|
||||
generateReport(false)
|
||||
}
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
task("staticAnalysis${variant.name.capitalize()}") {
|
||||
dependsOn getStaticAnalysisTaskNames(true, androidSources, variant, checkstyleEnabled, pmdEnabled)
|
||||
doFirst { generateReport(true) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getServerProjectSources = { excludes ->
|
||||
|
|
|
|||
Loading…
Reference in New Issue