【问题标题】:Sonar, Gradle and Android returns 0 issueSonar、Gradle 和 Android 返回 0 个问题
【发布时间】:2014-12-09 12:42:43
【问题描述】:

问题

我有一个可以正确编译和运行的 Android 项目。它由 Gradle “管理”,并由 Jenkins 持续构建。我想用 Sonar 分析我的代码质量。

声纳分析是使用sonarRunner Gradle 任务进行的。问题是声纳仍然告诉我有“0 个问题”......(我可以确保你有错误......我自己添加一个以确保......)。但是,它给了我其他信息,例如:代码行数、类数、cmets 和文档百分比、重复百分比、复杂性......就像 Android Lint 没有运行一样。

我尝试了什么

lint 就像一个魅力...:

在变体 armRelease 上运行 lint:发现 153 个问题

在变体 armDebug 上运行 lint:发现 153 个问题

在变体 x86Debug 上运行 lint:发现 153 个问题

在变体 x86Release 上运行 lint:发现 153 个问题

我尝试了很多我在互联网上阅读的东西,所以:

我遇到了一些不同的错误,例如“无法通过 ClassLoader 访问类 'android/content/res/Resources'”。或其他东西,但我从来没有能够得到正确的报告)。

详情

项目结构

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

settings.gradle


gradle.properties


build.gradle(删除无用部分)

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

因为我尝试了很多东西,所以我不知道接下来要尝试什么。如果您需要更多信息,请在 cmets 中询问。

最后信息:

  • 声纳 3.7
  • Gradle 1.12
  • JVM 1.8.0_20 甲骨文
  • 操作系统:Linux Fedora 20

编辑

gradle sonarRunner 日志(在 cmets 中询问):http://pastebin.com/uJwqpAkY

(所有的'***'都是为了隐藏公司名称,一切正常:))

【问题讨论】:

  • 你能分享分析的日志吗?
  • 如果你告诉我在哪里可以找到它,我会尽快完成
  • 如何使用 sonar-runner 进行分析?您能提供 sonar-runner 命令的输出吗? (如果在 jenkins 上,这应该是工作日志)
  • 我正在使用gradle sonarRunner 命令运行它。我将添加此命令的日志。
  • 我添加了 sonarRunner 任务的日志

标签: android gradle sonarqube


【解决方案1】:

您的分析过程中似乎没有执行AndroidLintSensor。 (否则您会在日志中的某处看到 Sensor AndroidLintSensor... 行。

这可能是由于多种原因:您的个人资料是否包含 android 规则?您的项目必须在您的基本目录或源目录中包含 java 文件和一个 android 清单,以触发传感器的执行(它将执行 android lint)。

(如果你好奇,这里是触发传感器执行的部分代码:AndroidLintSensor.java

【讨论】:

  • 非常感谢 :) 未检测到 AndroidManifest。我把它放在 BaseDir 中,现在一切正常。我会尝试将它放在其他地方并正确设置 SonarRunner。仍然有关于 ClassLoader 的所有错误,但这将是另一个问题。
  • 添加最后一条评论:我将我的 AndroidManifest.xml 放在 myProject/ (baseDir) 中。它不是默认位置。默认位置是myProject/src/main/AndroidManifest.xml(根据 Android 文档)。对于 SonarRunner,sonar.sources 必须是 myProject/src/main/java。我应该在遵循 Android gradle Standard 和兼容 SonarRunner 之间进行选择。我怎样才能成为他们两个? :)
猜你喜欢
  • 2018-07-12
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多