Implementação do SonarQube 7.7 No Android Studio - MacOs
Tags: android, java, kotlin
Published: 2020-08-27 02:10:36

Fala galera, este será meu primeiro post no fórum, e irei abordar o tema sobre como implementar o SonarQube 7.7 no Android Studio e fazer o Scan de toda sua aplicação localmente.

Pelo baixo conteúdo disponível em português eu decidi abordar este tema, pois acredito que não serei o único a ficar com os cabelos brancos, quando alguém te pede desde a implementação até a extração de report para controle de bugs e qualidade de software, sendo a primeira vez que ouvimos falar nessa ferramenta.

Iremos utilizar para este cenário a versão 7.7 Communit Edition do SonarQube.

**[Download SonarQube](https://www.sonarqube.org/downloads/)**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ygz0uq4ox7vxlgkldmjz.png)


#Instalação 

Após realizar o download, descompacte o arquivo onde preferir, feito isso você notará que ele contém essa estrutura:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3rsow2kuh4c0tcmrj5zs.png)

Feito isso, será necessário iniciar o serviço através do terminal.

Para isso, abra o Terminal do MacOs, navegue até o local onde você descompactou o SonarQube, como pode ver na imagem:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/p65db9un7ubh7klx1dr4.png)

#### Iniciando o servidor SonarQube
Após localizar e acessar a pasta onde contém o executável sonar.sh, execute o comando : `./sonar.sh start`

Logo aparecerá a mensagem de que o servidor foi iniciado.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/z7uk72lnpjs5tfulrcfl.png)

Após ter inicializado o servidor, você deverá validar acessando o servidor pelo localhost.
`http://localhost:9000/about`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/e8makxznzqwd73wbkczg.png)

Como estamos localmente a senha e o password são: `admin`

Crie um novo Projeto, por definição escolhemos o nome relacionado a aplicação que iremos realizar o Scan.

Existe a opção de logar passando como parâmetro de login, o Key de acesso gerado ao criar seu novo projeto, mas nesse caso iremos prosseguir de outra maneira por ser local.

####Preparando o Ambiente no Android Studio

Nessa etapa, acredito que todos tenham instalado o Android Studio em suas máquinas, caso não tenha pode realizar o download através do link :

**[Download Android Studio](https://developer.android.com/studio/?gclid=CjwKCAjwkJj6BRA-EiwA0ZVPVuOma1rdvJ0tNrNW4QJoIWr76oQRnhyZIUoe5TJFjHOQ2w_ydSvzHxoCgA8QAvD_BwE&gclsrc=aw.ds)**

Não irei abortar com mais profundidade sobre como instalar o Android Studio, caso necessite existe muito conteúdo disponível na internet.

#### Implementando o plugin do SonarQube no Gradle.

Dentro do seu projeto, existem dois build.gradle, um para o módulo e outro para o projeto.

Você deve importar a dependência a seguir, dentro do build.gradle do Projeto ( build.gradle (Project)).
`classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.0"`

Lembrando que o import deve ser realizado dentro do dependencies { } 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/32az28i60sxozexbyi4u.png)

Feito isso, o próximo passo é abrir o build.gradle (Module),
e adicionar o plugin junto com os outros plugins que seu projeto estiver utilizando.
`apply plugin: 'org.sonarqube'`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zds4k0fzt08b2c1lf0ww.png)

*Lembrando que os plugins não necessariamente estarão dentro de um bloco*

Próximo passo é colocar o implementar o bloco de código, para comunicação do Android para o Gradle, passando os parâmetros do seu projeto, irei utilizar como exemplo um projeto pessoal.

```
sonarqube {
        properties {
            property "sonar.projectName", "ProjectName"
            property "sonar.projectKey", ":mobileSalesForce"
            property "sonar.host.url", "http://localhost:9000"
            property "sonar.language", "java"
            property "sonar.sources", "src/main/"
            property "sonar.login", "admin"
            property "sonar.password", "admin"
        }
    }
```

Descrição : 
property "sonar.projectName", "ProjectName" = Nome do seu Projeto Android.
property "sonar.projectKey", ":mobileSalesForce" = Nome dado na hora da criação da sua pasta dentro do SonarQube, Exemplo: criei a pasta no Sonar com noome MSF_VENDEDOR, irei por no Key, o mesmo nome da pasta criada.
property "sonar.language" = Linguagem utilizada no desenvolvimento do software.
property "sonar.sources" = Local onde está a localizado seu projeto, geralmente o Android Studio mantém este padrão caso não mude pode utilizá-lo.


Feito Isso você deverá pelo terminal do Android, ir até a pasta do seu projeto onde está localizado os componentes do projeto tais como, gradlew.bat, build.gradle...

Na pasta do projeto, você deverá executar o seguinte comando:
`sudo ./gradlew sonarqube`

Feito isso irá buildar seu projeto, e após alguns minutos ele terá feito o Scan total do seu projeto, e lhe apresentando os dados na pasta onde vc criou dentro do SOnarQube no Localhost:9000.

No exemplo abaixo, eu utilizei um projeto pessoal contendo uma variedade de classes obsoletas, e erros para execução do SonarQube.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/wih0q2vy0d90r34g3jml.png)

Após o Scan completo do Projeto irá ter esse resultado:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/j58ukoqnclysnmcy3cfl.png)

Para verificar o resultado, volte para a página localhost:9000, caso não tenha atualizado sozinho, atualize a página.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cq2i2ucdph533tlrq44i.png)

SonarQube é uma ferramenta muito útil, pois ela consegue identificar as classes que contém os Bugs, as vulnerabilidades, e a quantidade de códigos duplicados, basta você procurar nos resultados do Scan.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/8m9e2t6by7qt05gwaaxm.png)

Como podemos ver abaixo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/i0507j6ia44vf8cpbrs5.png)

Temos também a opção de gerar o Report em .csv para análise, mas esse processo consiste em inserir um plugin na raiz do SonarQube, caso alguém necessite pode me contactar.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/674eacoe01oo1359ra0j.png)


Existem outras formas para se realizar o scanner do projeto, tais como, com chave de acesso, caso tenha necessidade de implementar o SonarQube no servidor.
E também tem outras formas de executar esse processo local, mas resolvi apresentar a consideravelmente mais fácil.

Espero Ter ajudado :)