Primeiro, adicione ao build.gradle de nível de projeto:
buildscript {
repositories {
//...
maven {
url "https://plugins.gradle.org/m2/"
}
}
}
buildscript {
dependencies {
//...
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE")
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.1"
}
}
allprojects {
repositories {
//...
maven {
url "https://plugins.gradle.org/m2/"
}
}
}
Depois adicione no build.gradle do seu módulo principal/base (normalmente chamado de :app), as seguintes linhas abaixo do apply dos outros plugins:
apply plugin: "org.sonarqube"
apply from: './sonarqube.gradle'
Em seguida crie um arquivo chamado ./sonarqube.gradle
e adicione essas linhas a ela:
sonarqube {
properties {
property "sonar.projectName", "made-sonar-qube-test-android" //nome que será exibido no dashboard do SonarQube
property "sonar.projectKey", "made-sonar-qube-test-android" //chave/id único do projeto no dashboard do SonarQube
property "sonar.host.url", "http://127.0.0.1:9000/" //endereço do seu server do SonarQube
property "sonar.language", "java" //não percebi nenhuma diferença ao trocar para kotlin
property "sonar.login", "username" //nome de usuário para logar com funções de adm para poder subir os projetos e atualizações
property "sonar.password", "senha" //senha desse usuario
property "sonar.sources", "src/main/" //quais são os arquivos .java e .kt daonde o SonarQube vai tirar as métricas
//property "sonar.sources", "app/src/main/, splash/src/main" //caso vc tenha mais de um caminho (de outros módulos) para analisar
property "sonar.java.binaries", "build/tmp/kotlin-classes" //no caso do kotlin, é o caminho da onde o binários das classes javes são extraídos. Não sei pra q server ainda
property "sonar.tests", "src/test" //O caminho para os testes unitários. Mas não sei pra q server ainda já que os relatórios de cobertura são extraídos do jacoco
//Configuração da parte do Jacoco. Não precisa ter essas linhas caso o teste de coverage não for necessário
property "sonar.jacoco.reportPaths", "build/jacoco/testDebugUnitTest.exec, app/build/outputs/code_coverage/debugAndroidTest/connected/*.ec"
property "sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacocoCombined/debug/jacoco.xml"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.junit.reportsPath", "build/jacoco/testDebugUnitTest.exec"
property "sonar.android.lint.report", "build/reports/lint-results.xml"
}
}
Com essa configuração você pode subir o projeto no SonarQube rodando:
./gradlew sonarqube
Primeiro, adicione ao build.gradle de nível de projeto:
buildscript {
dependencies {
//...
classpath "com.vanniktech:gradle-android-junit-jacoco-plugin:0.15.0"
}
}
Depois adicione no build.gradle do seu módulo principal/base (normalmente chamado de :app), as seguintes linhas abaixo do apply dos outros plugins:
apply plugin: "com.vanniktech.android.junit.jacoco"
apply from: './jacoco.gradle'
Em seguida crie um arquivo chamado ./jacoco.gradle
e adicione essas linhas a ela:
junitJacoco {
jacocoVersion = '0.8.2' // type String
ignoreProjects = [] // type String array
excludes = [
'**/R*.class',
'**/BuildConfig**'
] // type String List
includeNoLocationClasses = false // type boolean
includeInstrumentationCoverageInMergedReport = false // type boolean
}
Com essa configuração você pode subir o projeto no SonarQube e com os testes de cobertura rodando:
./gradlew clean connectedAndroidTest test createDebugCoverageReport combinedTestReportDebug sonarqube
Dependendo dos productFlavors que vc tiver, esses comandos tem que ser alterados.