2014-10-14 14 views
5

Il problemaSonar, Gradle e Android restituisce 0 problema

Ho un progetto Android che compila e funziona correttamente. È "gestito" da Gradle e continuamente costruito con Jenkins. Vorrei analizzare la qualità del mio codice con Sonar.

L'analisi del sonar viene eseguita con l'attività Gradle sonarRunner. Il problema è che Sonar mi sta ancora dicendo che c'è "0 problema" ... (Posso assicurarti che ci siano errori ... Ne aggiungo uno io stesso per essere sicuro ...). Tuttavia, mi dà altre informazioni come: numero di righe di codice, numero di classi, commenti e percentuali di documentazione, percentuale di duplicazione, complessità ... È come se Android Lint non fosse in esecuzione.

Quello che ho cercato

lint funziona come un fascino ...:

Ran pelucchi della variante armRelease: 153 problemi trovati

Ran pelucchi della variante armDebug: 153 problemi rilevati

Tan lint on variant x86Debug: 153 problemi trovati

Ran pelucchi della variante x86Release: 153 problemi trovati

Ho provato un sacco di cose che ho letto su Internet e SO:

Ho avuto alcuni errori l ike "Class 'android/content/res/Resources" non è accessibile tramite ClassLoader. " o qualcos'altro, ma non sono mai stato in grado di avere una relazione corretta).

I dettagli

Struttura del progetto

- myProjectName 
    | build 
    | libs 
    | src 
     | debug 
     | main 
      | assets 
      | java 
       | com.myPackage... 
      | jniLibs 
      | res 
      | AndroidManifest.xml 
     | release 
    | build.gradle 
    | gradle.properties 
    | settings.gradle 

settings.gradle

Vuoto


gradle.properties

Vuoto


compilazione.Gradle (parti inutili rimossi)

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.12.2' 
    } 
} 

/********************************** 
* Plugins declarations 
**********************************/ 
apply plugin: 'com.android.application' 
apply plugin: "sonar-runner" 

/********************************** 
* Sonar Runner configuration 
**********************************/ 
sonarRunner { 
    sonarProperties { 
     property "sonar.host.url", "http://pic.url/sonar" 
     property "sonar.jdbc.url", "jdbc:mysql://pic.url/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true" 
     property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver" 
     property "sonar.jdbc.username", "*****" 
     property "sonar.jdbc.password", "*****" 

     property "sonar.language", "java" 
     property "sonar.profile", "MyCompany Android" 
     property "sonar.projectVersion", "1.0" 
     property "sonar.analysis.mode", "analysis" 

     properties["sonar.sources"] = android.sourceSets.main.java.srcDirs 
     properties["sonar.binaries"] = [file("build/intermediates/classes/x86/debug")] 
    } 
} 

/********************************** 
* Android configuration 
**********************************/ 
android { 
    compileSdkVersion 20 
    buildToolsVersion "20.0.0" 

    defaultConfig { 
     applicationId "com.myPackage..." 
     minSdkVersion 14 
     targetSdkVersion 16 
     versionCode 1 
     versionName "1.0" 
    } 

    lintOptions { 
     abortOnError false 
    } 
} 

Come ho provato un sacco di cose, non mi alcun indizio su cosa provare dopo. Si prega di chiedere nei commenti se avete bisogno di ulteriori informazioni.

Ultima informazione:

  • Sonar 3.7
  • Gradle 1.12
  • JVM 1.8.0_20 Oracle
  • SO: Linux Fedora 20

EDIT

gradle sonarRunner log (richiesto nei commenti): http://pastebin.com/uJwqpAkY

(tutti i '***' sono qui per nascondere i nomi di società, tutto è normale :))

+0

Sareste in grado di condividere il registro delle analisi? – benzonico

+0

Se mi dici dove posso trovarlo, lo farò il prima possibile – mithrop

+0

Come conduci la tua analisi con il sonar-runner? puoi fornire qual è l'output del comando sonar-runner? (se è su Jenkins, questo dovrebbe essere il log del lavoro) – benzonico

risposta

3

Sembra che il AndroidLintSensor non viene eseguita durante la vostra analisi . (altrimenti vedresti la riga

Questo potrebbe essere dovuto a molti motivi: il tuo profilo include regole Android? Il tuo progetto deve avere file java e un file manifest Android nella tua directory di base o nella tua fonte directory per innescare l'esecuzione del sensore (che eseguirà pelucchi Android)

(se siete curiosi, qui è la parte del codice che attiverà l'esecuzione del sensore: AndroidLintSensor.java).

+0

Grazie mille :) L'AndroidManifest non è stato rilevato. L'ho inserito nel BaseDir e tutto funziona perfettamente ora. Proverò a posizionarlo da qualche altra parte e impostare correttamente il SonarRunner. Ancora hanno tutti gli errori su ClassLoader, ma sarà un'altra domanda. – mithrop

+1

Aggiunta di un ultimo commento: ho inserito il mio AndroidManifest.xml in 'myProject /' (baseDir). Non è la posizione predefinita. La posizione predefinita è 'mioProject/src/main/AndroidManifest.xml' (secondo il documento di Android). Per SonarRunner, sonar.sources deve essere 'myProject/src/main/java'. Dovrei scegliere tra i seguenti Android gradle Standard ed essere compatibile con SonarRunner. Come posso diventare entrambi? :) – mithrop

Problemi correlati