我已经配置了一个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's `true` by default, and that can have some security implications for the application's data)"
category="Security"
priority="3"
summary="Missing `allowBackup` attribute"
explanation="The allowBackup attribute determines if an application'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="false"` 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)"`"
url="http://developer.android.com/reference/android/R.attr.html#allowBackup"
urls="http://developer.android.com/reference/android/R.attr.html#allowBackup"
errorLine1=" <application
"
errorLine2=" ^"
quickfix="studio,adt">
<location
file="C:\Code\Android\SampleApp\app\src\main\AndroidManifest.xml"
line="5"
column="5"/>
</issue>
可能导致此警告的原因以及为什么SonarQube服务器中未显示错误?
答案 0 :(得分:5)
我有同样的问题。遵循@benzonico建议的解决方案,仍然面临着这个问题。然后我发现了我的问题。在sonar.sources中,我刚才提到了'src&#39;路径,但忘记了&#39; res&#39; (在我的项目中,我在src外面有res)。然后我把两个路径都放到了sonar.sources。然后所有的xml文件都被编入索引。谢谢@benzonico。
答案 1 :(得分:3)
显示此警告是因为平台未对xml
文件编制索引。因此,android lint插件会尝试报告您的问题,但无法在服务器端找到该文件。
这是平台的当前限制,应尽快解决。
要解决此限制并将xml
文件编入索引,您可以:
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中还将包含这些未知文件。所以,我并不是真的这么推荐!