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, ..)?