【问题标题】:Android classes not found during sonar analysis声纳分析期间未找到 Android 类
【发布时间】:2014-07-23 10:18:42
【问题描述】:

我试图在一个 android 项目上设置声纳分析

使用4.3版的sonarQube trough sonar-runner进行分析,安装android-plugin,在/path/to/android/sdk上设置ANDROID_HOME环境变量,使用ant构建没有任何问题

执行运行良好,但我有大量错误消息:

14:23:46.563 ERROR - Class not found: android.content.UriMatcher
14:23:46.563 ERROR - Class not found: android.net.Uri
14:23:46.563 ERROR - Class not found: android.database.sqlite.SQLiteDatabase
14:23:46.568 ERROR - Class not found: android.provider.BaseColumns
14:23:46.757 ERROR - Class not found: android.net.Uri
14:23:46.829 ERROR - Class not found: android.content.ContentProvider
14:23:46.829 ERROR - Class not found: android.net.Uri
14:23:46.830 ERROR - Class not found: android.database.sqlite.SQLiteDatabase
14:23:46.830 ERROR - Class not found: android.content.Context
...

我的 sonar-project.propeties :

sonar.projectKey=Client-Project
sonar.projectName=Client-Project
sonar.projectVersion=2.0

sonar.sources=src
sonar.binaries=bin/classes
sonar.librairies=bin/dexedLibs,usr/local/android-sdk-linux

sonar.language=java
sonar.sourceEncoding=UTF-8

sonar.profile=Android Lint

如何设置 Sonar 来查找这些 android 类?

【问题讨论】:

  • 您找到解决此问题的方法了吗?

标签: android sonarqube sonar-runner


【解决方案1】:

要摆脱这些错误,请将 android.jar 位置直接添加到sonar.libraries

sonar.libraries=libs/*.jar,/usr/local/opt/android-sdk/platforms/android-18/android.jar

这样做有两个明显的缺点:

  1. 直接指向本地环境。 SonarQube 项目配置尚不支持环境变量 (https://jira.codehaus.org/browse/SONARUNNER-76)。
  2. 直接指向android平台的一个版本;这可能没问题,但需要手动与您的 targetSdk 保持同步

【讨论】:

    【解决方案2】:

    以 Mikko 的回答为基础,请注意,您实际上不必手动使设置与您的 targetSdk 保持同步。您可以从 gradle 获取它,如下所示:

    def androidJarPath;
    afterEvaluate {
        def rootDir = project.rootDir
        def localProperties = new File(rootDir, "local.properties")
        if (localProperties.exists()) {
            Properties properties = new Properties()
            localProperties.withInputStream { instr ->
                properties.load(instr)
            }
            def sdkDir = properties.getProperty('sdk.dir')
            androidJarPath = sdkDir + "/platforms/" + android.compileSdkVersion + "/android.jar"
        }
    }
    
    sonarqube {
        properties {
            property "sonar.java.libraries", androidJarPath
            ...
        }
    }
    

    干杯!

    【讨论】:

      【解决方案3】:

      除了 Mikko 的回答之外,我还需要设置这些属性才能让 FindBugs 也正常运行:

      sonar.libraries=libs/*.jar,/usr/local/android/android-sdk-linux/platforms/android-25/android.jar
      sonar.java.binaries=bin/classes
      sonar.java.libraries=libs/*.jar,/usr/local/android/android-sdk-linux/platforms/android-25/android.jar
      sonar.java.test.libraries=libs/*.jar,/usr/local/android/android-sdk-linux/platforms/android-25/android.jar
      

      【讨论】:

        猜你喜欢
        • 2016-03-12
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 2018-03-02
        相关资源
        最近更新 更多