SonarRunner:无法找到文件警告

时间:2015-05-12 15:08:39

标签: android android-studio sonarqube lint sonar-runner

我已经配置了一个Android示例应用项目,以便检测 Lint 错误并将其包含在 SonarQube 服务器中。一切正常但是当我在AndroidManifest.xml中明确引入错误(删除allowBackup行)时,声纳 - 跑步者执行会显示下一个警告:

16:33:57.681 WARN  - Unable to find file C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml to report issue

路径没问题,所以这不是问题。此外,当我创建gradle lint并将其写入lint-results.xml文件时,错误位置正确:

<issue
    id="AllowBackup"
    severity="Warning"
    message="Should explicitly set `android:allowBackup` to `true` or `false` (it&apos;s `true` by default, and that can have some security implications for the application&apos;s data)"
    category="Security"
    priority="3"
    summary="Missing `allowBackup` attribute"
    explanation="The allowBackup attribute determines if an application&apos;s data can be backed up and restored. It is documented at http://developer.android.com/reference/android/R.attr.html#allowBackup

By default, this flag is set to `true`. When this flag is set to `true`, application data can be backed up and restored by the user using `adb backup` and `adb restore`.

This may have security consequences for an application. `adb backup` allows users who have enabled USB debugging to copy application data off of the device. Once backed up, all application data can be read by the user. `adb restore` allows creation of application data from a source specified by the user. Following a restore, applications should not assume that the data, file permissions, and directory permissions were created by the application itself.

Setting `allowBackup=&quot;false&quot;` opts an application out of both backup and restore.

To fix this warning, decide whether your application should support backup, and explicitly set `android:allowBackup=(true|false)&quot;`"
    url="http://developer.android.com/reference/android/R.attr.html#allowBackup"
    urls="http://developer.android.com/reference/android/R.attr.html#allowBackup"
    errorLine1="    &lt;application
"
    errorLine2="    ^"
    quickfix="studio,adt">
    <location
        file="C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml"
        line="5"
        column="5"/>
</issue>

可能导致此警告的原因以及为什么SonarQube服务器中未显示错误?

4 个答案:

答案 0 :(得分:5)

我有同样的问题。遵循@benzonico建议的解决方案,仍然面临着这个问题。然后我发现了我的问题。在sonar.sources中,我刚才提到了'src&#39;路径,但忘记了&#39; res&#39; (在我的项目中,我在src外面有res)。然后我把两个路径都放到了sonar.sources。然后所有的xml文件都被编入索引。谢谢@benzonico。

答案 1 :(得分:3)

显示此警告是因为平台未对xml文件编制索引。因此,android lint插件会尝试报告您的问题,但无法在服务器端找到该文件。

这是平台的当前限制,应尽快解决。

要解决此限制并将xml文件编入索引,您可以:

  • 安装xml插件(将强制索引xml文件)
  • 如果您使用的是SonarQube 5.1,则可以将sonar.import_unknown_files设置为true。

(您还可以查看此thread了解更多信息)

答案 2 :(得分:0)

实际上,您需要索引项目的.xml文件: - 将资源路径添加到src属性 - 确保在SQ服务器上安装了xml插件 - 确保项目的语言设置为java和xml

此时,SQ必须索引xml文件,它们必须显示在仪表板中。

问题在于,问题的“严重性”属性仅为“警告”。似乎声纳插件不会导入警告,只会导致错误。

您可能需要创建一个lint配置文件来覆盖默认配置,它应如下所示:

lint.xml:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="AllowBackup" severity="error" />
</lint>

然后在build.gradle的android部分:

lintOptions {
    lintConfig = file("${projectDir}/lint.xml")
    showAll true
    abortOnError false
    ...
}  

[编辑]似乎gradle插件可以选择将警告视为错误。我没有测试过它,但您可以尝试使用followin而不是使用自定义lintConfig文件

lintOptions {
    warningsAsErrors true
    showAll true
    abortOnError false
    ...
}

答案 3 :(得分:0)

我在SonarQube v6.0上遇到了同样的问题,我在here找到了官方解决方案:

<强>配置

为了在分析期间执行规则,该功能需要SQ来导入XML文件。 这可以使用两种不同的方法来完成:

1. 安装XML插件XML plugin除了其他功能外,还会为XML文件编制索引。

2. (SQ 5.1+)导入未知文件:通过设置属性&#34; sonar.import_unknown_files&#34;打开项目的import of unknown files。 to&#34; true&#34;。

对于审核1:

仍显示&#34;无法找到文件警告&#34;错误信息。

解决方法:

1.Like @Henry说:添加&#39; res&#39;文件夹到来源:sonar.sources=src, res

2.从配置中删除sonar.language=java,因为SQ现在支持mutil语言。如果你不删除语言,SQ只会处理java文件。当你删除并运行时,会输出一些日志,如下所示:

11:06:30.781 INFO  - Index files
11:06:31.016 INFO  - 120 files indexed
11:06:31.029 INFO  - Quality profile for java: Android Rules
11:06:31.029 INFO  - Quality profile for xml: Sonar way

如何处理2?

它可以工作,但很多未知文件都是索引。甚至包括一些png,jpg文件和&#34;代码行&#34;在SQ中还将包含这些未知文件。所以,我并不是真的这么推荐!