2014-10-14 20 views
5

ProblemSonar, Gradle i Android zwraca 0 kwestia

Mam Android projekt, który kompiluje i działa poprawnie. Jest "zarządzany" przez Gradle i ciągle budowany z Jenkinsem. Chciałbym przeanalizować jakość mojego kodu za pomocą sonaru.

Analiza sonaru jest wykonywana przy użyciu zadania Gradle z sonarRunner. Problem polega na tym, że Sonar wciąż mówi mi, że jest "0 problem" ... (Mogę zapewnić, że są błędy ... dodam je samemu, aby się upewnić ...). Jednak daje mi to inne informacje, takie jak: liczba linii kodu, liczba klas, komentarze i dokumentacja procentowa, procent powielania, złożoność ... To tak, jakby Android Lint nie był uruchomiony.

Co próbowałem

lint działa jak czar ...:

Ran szarpie na wariantu armRelease: 153 Zagadnienia znaleźć

Ran szarpie wariantu armDebug: znaleziono 153 tematy

Lint ran na wariancie x86Debug: znaleziono 153 problemów

Ran szarpie na wariantu x86Release: 153 Zagadnienia znaleźć

próbowałem wiele rzeczy, które czytałem w internecie i tak, to:

Miałem różne błędy l ike "Class" android/content/res/Resources "nie jest dostępny za pośrednictwem ClassLoader." lub coś innego, ale nigdy nie udało mi się uzyskać prawidłowego raportu).

Dane

Struktura projektu

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

settings.gradle

Pusty


gradle.properties

Empty


budować.Gradle (bezużytecznych części usunięte)

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 
    } 
} 

jak próbowałem wiele rzeczy, nie mam żadnego pojęcia o co próbować dalej. Proszę zapytać w komentarzach, czy potrzebujesz więcej informacji.

Ostatnie informacje:

  • Sonar 3.7
  • Gradle 1,12
  • JVM 1.8.0_20 Oracle
  • OS: Linux Fedora 20

EDIT

gradle sonarRunner log (zadawane w komentarzach): http://pastebin.com/uJwqpAkY

(wszystkie „***” Jesteśmy tutaj, aby ukryć nazwy firm, wszystko jest normalne :))

+0

Byłbyś w stanie udostępnić dziennik analizy? – benzonico

+0

Jeśli powiesz mi, gdzie mogę ją znaleźć, zrobię to tak szybko jak to możliwe – mithrop

+0

Jak czy prowadzisz swoją analizę z sonarem-biegaczem? czy możesz podać, co jest wynikiem polecenia sonar-runner? (jeśli jest na jenkins, powinien to być dziennik pracy) – benzonico

Odpowiedz

3

Wydaje się, że AndroidLintSensor nie jest wykonywany podczas analizy . (w przeciwnym razie zobaczysz wiersz Sensor AndroidLintSensor... gdzieś w dzienniku.)

Może to wynikać z wielu powodów: Twój profil zawiera reguły Androida? Twój projekt musi zawierać pliki Java i manifest Androida umieszczony w twoim katalogu głównym lub źródle katalog wyzwolić wykonanie czujnika (który będzie wykonywał android szarpie)

(jeśli jesteś ciekaw, tutaj jest część kodu, która spowoduje wykonanie czujnika: AndroidLintSensor.java).

+0

Dziękuję bardzo :) AndroidManifest nie został wykryty. Umieściłem go w BaseDir i wszystko działa teraz idealnie. Postaram się umieścić go gdzieś indziej i poprawnie ustawić SonarRunner. Nadal występują wszystkie błędy związane z ClassLoader, ale będzie to kolejne pytanie. – mithrop

+1

Dodaję ostatni komentarz: Umieszczam mój plik AndroidManifest.xml w 'myProject /' (baseDir). To nie jest domyślna lokalizacja. Domyślna lokalizacja to 'myProject/src/main/AndroidManifest.xml' (zgodnie z dokumentem Android). Dla SonarRunner, sonar.sources musi być 'myProject/src/main/java'. Powinienem wybrać pomiędzy Androidem Standard Standard i być kompatybilnym z SonarRunner. Jak mogę stać się jednym i drugim? :) – mithrop

Powiązane problemy