2017-01-17 1 views
4

Timber (V 4.5.0) чеки lint работают только через Gradle (но не через команду lint, а также не в Android Studio Версия 2.3 Beta2).

Резюме

Когда я бегу lint непосредственно в командной строке я получаю сообщение об ошибке.

lint --show TimberArgCount 

Could not load custom rule jar file /home/tmtron/.android/lint/timber-lint.jar 
java.lang.NoClassDefFoundError: com/android/tools/lint/detector/api/Detector$JavaPsiScanner 

, но это работает, когда я вызываю его через Gradle:

./gradlew lint 

MainActivity.java:15: Error: Wrong argument count, 
format string %s.%s requires 2 but format call supplies 1 [TimberArgCount] 
     Timber.d("%s.%s", "onCreate"); 
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Подробное описание

Я сделал небольшой пример проекта на GitHub: TimberLintTest

В основном я сделал следующее:

  • создал простой проект для Android в Android Studio
  • добавил Timber
  • активирован выходной стандартный вывод ошибок линт android { lintOptions { textReport true textOutput "stdout" } }

В MainActivity я использую erronous лог-подобное заявление:

Timber.d("%s.%s", "onCreate"); 

Когда я выполняю lint через Gradle-wrapper из командной строки, он работает как ожидалось - отключенный вывод:

MainActivity.java:15: Error: Wrong argument count, 
format string %s.%s requires 2 but format call supplies 1 [TimberArgCount] 
     Timber.d("%s.%s", "onCreate"); 
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Но проверки не работает в Android Studio, а также не тогда, когда я начинаю lint непосредственно.
Некоторые источники в Интернете указывают, что мы должны скопировать файл lint.jar в ~/.android/lint. Я сделал это для lint.jar (от timber-4.5.0) и переименовал его в timber-lint.jar, так что я в конечном итоге с этим файлом:

~/.android/lint/timber-lint.jar 

Таким образом, проблема в том, что этот JavaPsiScannerинтерфейс является не найден.

Я проверил исходный код древесины, и это зависит от lint-api-25.0.2, где Detector содержит этот внутренний интерфейс. Но в моем локальном SDK-коде (Android/Sdk/tools/lib/lint-api.jar) этот внутренний класс не существует (я думаю, это то, что использует инструмент командной строки и Android Studio).

Так что я думаю, что это просто несоответствие версии. Но я не уверен, как это решить.
Как я могу точно знать, какая версия lint-api.jar моих текущих инструментов для Android?

При запуске диспетчера sdk и показывает, что версия Android SDK Tools - 25.2.5 (я обновил до последней версии).Так это версия lint-api.jar (или это SDK платформы-инструменты, SDK build-tools, ..)?

ответ

0

В качестве обходного пути мы можем сказать, что gradle всегда запускает проверки lint после компиляции. Затем чеки будут также выполняться после нажатия Build - Сделайте проект в Android Studio, который решает мою оригинальную проблему.

Детали гальки в this SO-answer.