2015-05-12 2 views
2

Я настроил проект приложения для Android, чтобы обнаружить Lint ошибки и включить их в SonarQube server. Все работает нормально, но когда я явно ввести ошибку в AndroidManifest.xml (исключив allowBackup линии), то сонар-бегун исполнение показывает следующее предупреждение:SonarRunner: Не удалось найти предупреждение файла

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?

+0

Hi frapen, вы нашли решение для этого? Я попробовал ответить ниже на @benzonico, но все еще есть проблема. – Henry

+0

Да, @Henry, решение, данное benzonico, работало для меня и решило мою проблему. – frapen

ответ

3

Это предупреждение отображается, потому что файл xml не проиндексирован платформой. Как следствие, плагин android lint пытается сообщить о вашей проблеме, но файл не может быть найден на стороне сервера.

Это текущее ограничение платформы, которое должно быть рассмотрено очень скоро.

Чтобы обойти это ограничение и проиндексировать ваш файл xml вы можете:

  • установить XML-плагин (который заставит индексацию файлов XML)
  • если вы используете SonarQube 5.1 вы можете установить sonar.import_unknown_files в правда.

(вы также можете взглянуть на эту thread для немного больше информации)

+0

Спасибо за ваш быстрый ответ, но я пробовал обходные пути без успеха. – frapen

+0

Я использую SonarQube 5.1. Во-первых, я установил плагин XML из меню «Настройки»> «Центр»> Центр обновлений> [XML] (http://docs.sonarqube.org/display/SONAR/XML+Plugin) **, перезапустил сервер и выполнил «gradle sonarRunner» , Наконец, я написал 'sonar.import_all_files = true' в файле' sonar-project.properties' и попробовал еще раз. Что я делаю не так? – frapen

+1

настройка скважины 'sonar.import_unknown_files' не' sonar.import_all_files' – benzonico

4

Я была такая же проблема. Следующее решение, предложенное @benzonico, по-прежнему сталкивается с проблемой. Затем я узнал о своей проблеме. В sonar.sources я только что упомянул путь 'src', но забыл о 'res' (в моем проекте у меня есть res вне src). Затем я помещаю оба пути в источники сонара. Затем все xml-файлы были проиндексированы. Спасибо @benzonico.

+0

Да, это обычная ошибка при настройке проекта, и это иногда трудно понять. Спасибо, что поделились своей проблемой и решением. – frapen

0

В самом деле, вы должны проиндексировать XML-файлы проекта: - Добавьте путь ресурса в собственность Src - Убедитесь, что XML-плагин установлен на вашем сервере SQ - Убедитесь, что язык для вашего проекта установлено значение java и xml

На этом этапе SQ индексирует файлы xml, они должны отображаться на панели управления.

Проблема в том, что атрибут «серьезности» вашей проблемы является только «предупреждением». Похоже, что плагин сонара не импортирует предупреждения, а только ошибки.

Вы, возможно, потребуется создать файл конфигурации ворса, чтобы переопределить настройки по умолчанию, он должен выглядеть следующим образом:

lint.xml:

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

затем в андроида разделе сборки.Gradle:

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

[EDIT] Похоже, что Gradle плагин имеет возможность рассматривать предупреждения как ошибки. Я не проверял, но вы можете попробовать followin вместо того, чтобы использовать пользовательский lintConfig файл

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

Я имел такой же вопрос о SonarQube v6.0, и я нашел официальное решение по here:

Конфигурация

Для выполнения правил во время анализа функция требует, чтобы SQ импортировал файлы XML. Это может быть сделано с помощью двух различных подходов:

1. Install XML плагин: в XML plugin, поверх других функций, индексы XML-файлов.

2. (SQ 5.1 +) Импорт неизвестных файлов: поворот на import of unknown files для ваших проектов, установив свойство «sonar.import_unknown_files» к «истинной».

Для approache 1:

Еще показать "Невозможно найти файл предупреждение" сообщение об ошибке.

Обход:

1.Like @Henry говорит: добавить папку 'Рез' источников: sonar.sources=src, res

2.Remove sonar.language=java от конфигурации, поскольку SQ является поддержка языка мутил в настоящее время. Если вы не удалите язык, SQ будет только процесс Java files.When удалить и запустить некоторые журналы Выведет и выглядит следующим образом:

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 

насчет approache 2?

Это работает, но много неизвестных файлов будет индексом. Даже включенные некоторые png, jpg-файлы и «Lines of Code» в SQ также содержат эти неизвестные файлы. Итак, я действительно не рекомендую этот путь!

Смежные вопросы