Помимо создания тестов, позволяющих убедиться, что ваше приложение соответствует функциональным требованиям, важно также запустить код с помощью инструмента проверки, чтобы убедиться, что в вашем коде нет структурных проблем. Инструмент lint помогает найти плохо структурированный код, который может повлиять на надежность и эффективность ваших приложений Android и усложнить поддержку вашего кода. Настоятельно рекомендуется исправить все ошибки, обнаруженные lint, перед публикацией приложения.
Например, если ваши файлы ресурсов XML содержат неиспользуемые пространства имен, это занимает место и требует ненужной обработки. Другие структурные проблемы, такие как использование устаревших элементов или вызовов API, которые не поддерживаются целевыми версиями API, могут привести к неправильной работе кода. Lint может помочь вам решить эти проблемы.
Чтобы повысить производительность линтинга, вы также можете добавлять в код аннотации .
Обзор
Android Studio предоставляет инструмент сканирования кода под названием lint , который может помочь вам выявить и исправить проблемы со структурным качеством вашего кода без необходимости запускать приложение или писать тестовые примеры. О каждой проблеме, обнаруженной инструментом, сообщается с описанием и уровнем серьезности, чтобы вы могли расставить приоритеты критически важных улучшений, которые необходимо внести. Вы также можете снизить уровень серьезности проблемы, чтобы игнорировать проблемы, не имеющие отношения к вашему проекту, или повысить уровень серьезности, чтобы выделить конкретные проблемы.
Инструмент lint проверяет исходные файлы вашего проекта Android на наличие потенциальных ошибок и улучшений оптимизации на предмет правильности, безопасности, производительности, удобства использования, доступности и интернационализации. При использовании Android Studio настроенные проверки lint и IDE запускаются при создании приложения. Однако вы можете запустить проверки вручную или запустить lint из командной строки , как описано на этой странице.
Встроенный инструмент проверки проверяет ваш код, пока вы используете Android Studio. Просмотреть предупреждения и ошибки можно двумя способами:
- В виде всплывающего текста в окне редактора. Когда lint обнаруживает проблему, он выделяет проблемный код желтым цветом. При более серьезных проблемах код подчеркивается красным.
- В окне «Результаты проверки lint» при нажатии «Код» > «Проверить код» .
Примечание. Когда ваш код компилируется в Android Studio, выполняются дополнительные проверки кода IntelliJ, чтобы упростить проверку кода. Поддерживайте актуальность Android Studio , чтобы обеспечить доступность новейших правил и проверок.
На рис. 1 показано, как инструмент lint обрабатывает исходные файлы приложения.
- Исходные файлы приложения
- Исходные файлы состоят из файлов, составляющих ваш проект Android, включая файлы Kotlin, Java и XML, значки и файлы конфигурации ProGuard.
- Файл
lint.xml
- Файл конфигурации, который можно использовать для указания любых проверок, которые вы хотите исключить, и для настройки уровней серьезности проблем.
- Инструмент для ворса
- Инструмент статического сканирования кода, который вы можете запустить в своем проекте Android либо из командной строки, либо в Android Studio. Инструмент lint проверяет наличие проблем в структурном коде, которые могут повлиять на качество и производительность вашего приложения Android.
- Результаты проверки ворса
- Вы можете просмотреть результаты lint либо в консоли, либо в окне «Результаты проверки» в Android Studio. Если вы запускаете
lint
из командной строки, результаты записываются в папкуbuild/
. Дополнительную информацию см. в разделе о проведении проверок вручную .
Запуск lint из командной строки
Если вы используете Android Studio или Gradle, используйте оболочку Gradle , чтобы вызвать задачу lint
вашего проекта, введя одну из следующих команд из корневого каталога вашего проекта:
Примечание. Поддерживайте актуальность плагина Android Gradle , чтобы использовать новейшие правила проверки.
- В Windows:
gradlew lint
- В Linux или macOS:
./gradlew lint
Вы должны увидеть вывод, аналогичный следующему:
> Task :app:lintDebug Wrote HTML report to file:<path-to-project>/app/build/reports/lint-results-debug.html
Когда инструмент проверки завершает свои проверки, он предоставляет пути к XML- и HTML-версиям отчета о проверке. Затем вы можете перейти к отчету HTML и открыть его в браузере, как показано на рисунке 2.
Если ваш проект включает варианты сборки , lint проверяет только вариант по умолчанию. Если вы хотите запустить lint для другого варианта, вы должны написать имя варианта с заглавной буквы и поставить перед ним префикс lint
.
./gradlew lintRelease
Примечание. Lint не запускается автоматически при сборке. Мы настоятельно рекомендуем вам явно запускать lint как часть сборки непрерывной интеграции , чтобы вы могли видеть последние проверки lint при сборке существующего исходного кода.
Чтобы узнать больше о запуске задач Gradle из командной строки, прочтите статью «Создание приложения из командной строки» .
Запустите lint с помощью автономного инструмента
Если вы не используете Android Studio или Gradle, установите инструменты командной строки Android SDK, чтобы использовать автономный инструмент проверки. Найдите инструмент lint в android_sdk /cmdline-tools/ version /bin/lint
.
Примечание. Если вы попытаетесь запустить автономный инструмент в проекте Gradle, он выдаст ошибку. Вы всегда должны использовать gradle lint
(в Windows) или ./gradlew lint
(в macOS или Linux) для запуска lint в проекте Gradle.
Чтобы запустить lint для списка файлов в каталоге проекта, используйте следующую команду:
lint [flags] <project directory>
Например, вы можете ввести следующую команду для сканирования файлов в каталоге myproject
и его подкаталогах. Идентификатор проблемы MissingPrefix
указывает lint сканировать только атрибуты XML, в которых отсутствует префикс пространства имен Android.
lint --check MissingPrefix myproject
Чтобы просмотреть полный список флагов и аргументов командной строки, поддерживаемых этим инструментом, используйте следующую команду:
lint --help
В следующем примере показан вывод консоли, когда команда lint выполняется для проекта под названием Earthquake:
$ lint Earthquake Scanning Earthquake: ............................................................................................................................... Scanning Earthquake (Phase 2): ....... AndroidManifest.xml:23: Warning: <uses-sdk> tag appears after <application> tag [ManifestOrder] <uses-sdk android:minSdkVersion="7" /> ^ AndroidManifest.xml:23: Warning: <uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?" [UsesMinSdkAttributes] <uses-sdk android:minSdkVersion="7" /> ^ res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources] res: Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder] 0 errors, 4 warnings
В примере выходных данных перечислены четыре предупреждения и нет ошибок.
Два предупреждения относятся к файлу AndroidManifest.xml
проекта:
-
ManifestOrder
-
UsesMinSdkAttributes
Preferences.xml
: UnusedResources
. Одно предупреждение относится к каталогу res
: IconMissingDensityFolder
.
Настройте lint для подавления предупреждений
По умолчанию, когда вы запускаете сканирование, инструмент проверяет все проблемы, которые поддерживает lint. Вы также можете ограничить проблемы для проверки lint и назначить уровни серьезности для проблем. Например, вы можете отключить проверку lint для конкретных проблем, которые не имеют отношения к вашему проекту, а также настроить lint для сообщения о некритических проблемах с более низким уровнем серьезности.
Уровни серьезности следующие:
-
enable
-
disable
илиignore
-
informational
-
warning
-
error
-
fatal
Вы можете настроить проверку lint для разных уровней:
- Глобально (весь проект)
- Модуль проекта
- Производственный модуль
- Тестовый модуль
- Открыть файлы
- Иерархия классов
- Области применения системы контроля версий (VCS)
Настройте файл lint
Вы можете указать свои настройки проверки ворса в файле lint.xml
. Если вы создаете этот файл вручную, поместите его в корневой каталог вашего проекта Android.
Файл lint.xml
состоит из родительского тега <lint>
, который содержит один или несколько дочерних элементов <issue>
. Lint определяет уникальное значение атрибута id
для каждой <issue>
:
<?xml version="1.0" encoding="UTF-8"?> <lint> <!-- list of issues to configure --> </lint>
Чтобы изменить уровень серьезности проблемы или отключить проверку проблемы, установите атрибут серьезности в теге <issue>
.
Совет: Чтобы получить полный список проблем, поддерживаемых lint, и соответствующие им идентификаторы проблем, выполните команду lint --list
.
Пример файла lint.xml
В следующем примере показано содержимое файла lint.xml
:
<?xml version="1.0" encoding="UTF-8"?> <lint> <!-- Disable the IconMissingDensityFolder check in this project --> <issue id="IconMissingDensityFolder" severity="ignore" /> <!-- Ignore the ObsoleteLayoutParam issue in the specified files --> <issue id="ObsoleteLayoutParam"> <ignore path="res/layout/activation.xml" /> <ignore path="res/layout-xlarge/activation.xml" /> </issue> <!-- Ignore the UselessLeaf issue in the specified file --> <issue id="UselessLeaf"> <ignore path="res/layout/main.xml" /> </issue> <!-- Change the severity of hardcoded strings to "error" --> <issue id="HardcodedText" severity="error" /> </lint>
В этом примере показано, как сообщается о различных типах проблем. Проверка IconMissingDensityFolder
отключена полностью, а проверка ObsoleteLayoutParam
отключена только в файлах, указанных в прилагаемых объявлениях <ignore ... />
.
Настройте проверку ворса для исходных файлов Kotlin, Java и XML.
Вы можете отключить проверку ворса для исходных файлов Kotlin, Java и XML в диалоговом окне «Настройки» :
- Выберите «Файл» > «Настройки» (в Windows) или «Android Studio» > «Настройки» (в macOS или Linux).
- Выберите «Редактор» > «Проверки» .
- Чтобы отключить, отмените выбор соответствующего исходного файла.
Вы можете установить их либо для IDE, либо для отдельных проектов, выбрав соответствующий профиль.
Настройте проверку ворса в Java или Kotlin
Чтобы отключить проверку ворса специально для класса или метода в вашем проекте Android, добавьте к этому коду аннотацию @SuppressLint
.
В следующем примере показано, как отключить проверку ворса на наличие проблемы NewApi
в методе onCreate
. Инструмент проверки продолжает проверять наличие проблемы NewApi
в других методах этого класса.
Котлин
@SuppressLint("NewApi") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main)
Ява
@SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
То же самое можно сделать с любым Composable. В следующем фрагменте кода показано, как отключить проверки NewApi
для любого Composable.
Котлин
@SuppressLint("NewApi") @Composable fun MyComposable{ ... }
В следующем примере показано, как отключить проверку на наличие проблемы ParserError
в классе FeedProvider
:
Котлин
@SuppressLint("ParserError") class FeedProvider : ContentProvider() {
Ява
@SuppressLint("ParserError") public class FeedProvider extends ContentProvider {
Чтобы отключить проверку всех проблем с ворсом в файле, используйте ключевое слово all
:
Котлин
@SuppressLint("all")
Ява
@SuppressLint("all")
Вы можете использовать ту же аннотацию для подавления проверок любой составной функции.
Настройка проверки lint в XML
Используйте атрибут tools:ignore
, чтобы отключить проверку на наличие ворсинок для определенных разделов ваших XML-файлов. Поместите следующее значение пространства имен в файл lint.xml
, чтобы инструмент lint распознал атрибут:
namespace xmlns:tools="http://schemas.android.com/tools"
В следующем примере показано, как отключить проверку на наличие проблемы UnusedResources
в элементе <LinearLayout>
XML-файла макета. Атрибут ignore
наследуется дочерними элементами родительского элемента, в котором объявлен атрибут. В этом примере проверка ворса также отключена для дочернего элемента <TextView>
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="UnusedResources" > <TextView android:text="@string/auto_update_prompt" /> </LinearLayout>
Чтобы отключить более одной проблемы, перечислите проблемы, которые нужно отключить, в строке, разделенной запятыми. Например:
tools:ignore="NewApi,StringFormatInvalid"
Чтобы отключить проверку всех проблем с ворсом в элементе XML, используйте ключевое слово all
:
tools:ignore="all"
Настройте параметры lint с помощью Gradle
Плагин Android Gradle позволяет настраивать определенные параметры проверки, например, какие проверки выполнять, а какие игнорировать, используя блок lint{}
в файле build.gradle
на уровне модуля.
В следующем фрагменте кода показаны некоторые свойства, которые можно настроить:
Котлин
android { ... lint { // Turns off checks for the issue IDs you specify. disable += "TypographyFractions" + "TypographyQuotes" // Turns on checks for the issue IDs you specify. These checks are in // addition to the default lint checks. enable += "RtlHardcoded" + "RtlCompat" + "RtlEnabled" // To enable checks for only a subset of issue IDs and ignore all others, // list the issue IDs with the 'check' property instead. This property overrides // any issue IDs you enable or disable using the properties above. checkOnly += "NewApi" + "InlinedApi" // If set to true, turns off analysis progress reporting by lint. quiet = true // If set to true (default), stops the build if errors are found. abortOnError = false // If set to true, lint only reports errors. ignoreWarnings = true // If set to true, lint also checks all dependencies as part of its analysis. // Recommended for projects consisting of an app with library dependencies. checkDependencies = true } } ...
классный
android { ... lint { // Turns off checks for the issue IDs you specify. disable 'TypographyFractions','TypographyQuotes' // Turns on checks for the issue IDs you specify. These checks are in // addition to the default lint checks. enable 'RtlHardcoded','RtlCompat', 'RtlEnabled' // To enable checks for only a subset of issue IDs and ignore all others, // list the issue IDs with the 'check' property instead. This property overrides // any issue IDs you enable or disable using the properties above. checkOnly 'NewApi', 'InlinedApi' // If set to true, turns off analysis progress reporting by lint. quiet true // If set to true (default), stops the build if errors are found. abortOnError false // If set to true, lint only reports errors. ignoreWarnings true // If set to true, lint also checks all dependencies as part of its analysis. // Recommended for projects consisting of an app with library dependencies. checkDependencies true } } ...
Все методы проверки, которые переопределяют заданный уровень серьезности проблемы, соблюдают порядок настройки. Например, установка проблемы как фатальной в finalizeDsl()
переопределяет ее отключение в основном DSL.
Создайте базовый план предупреждений
Вы можете сделать снимок текущего набора предупреждений вашего проекта, а затем использовать этот снимок в качестве основы для будущих проверок, чтобы сообщать только о новых проблемах. Базовый снимок позволяет вам начать использовать lint для предотвращения сбоя сборки без необходимости возвращаться назад и сначала решать все существующие проблемы.
Чтобы создать базовый снимок, измените файл build.gradle
вашего проекта следующим образом:
Котлин
android { lint { baseline = file("lint-baseline.xml") } }
классный
android { lintOptions { baseline file("lint-baseline.xml") } }
Когда вы впервые добавляете эту строку, создается файл lint-baseline.xml
для определения базовой линии. С этого момента инструменты читают файл только для определения базовой линии. Если вы хотите создать новую базовую версию, вручную удалите файл и снова запустите lint, чтобы создать его заново.
Затем запустите lint из IDE, выбрав «Код» > «Проверить код» или из командной строки следующим образом. В выводе выводится расположение файла lint-baseline.xml
. Местоположение файла вашей настройки может отличаться от того, что показано здесь:
$ ./gradlew lintDebug -Dlint.baselines.continue=true ... Wrote XML report to file:///app/lint-baseline.xml Created baseline file /app/lint-baseline.xml
Запуск lint
записывает все текущие проблемы в файл lint-baseline.xml
. Набор текущих проблем называется базовым . Вы можете проверить файл lint-baseline.xml
в системе контроля версий, если хотите поделиться им с другими.
Настройте базовый уровень
Если вы хотите добавить в базовый план только определенные типы проблем, укажите проблемы, которые нужно добавить, отредактировав файл build.gradle
вашего проекта следующим образом:
Котлин
android { lint { checkOnly += "NewApi" + "HandlerLeak" baseline = file("lint-baseline.xml") } }
классный
android { lintOptions { checkOnly 'NewApi', 'HandlerLeak' baseline file("lint-baseline.xml") } }
Если вы добавите какие-либо новые предупреждения в базу кода после создания базовой версии, lint перечисляет только вновь возникшие ошибки.
Базовое предупреждение
Когда базовый план действует, вы получаете информационное предупреждение о том, что одна или несколько проблем были отфильтрованы, поскольку они указаны в базовом плане. Это предупреждение помогает вам помнить, что вы настроили базовый план и что вам необходимо устранить все проблемы в какой-то момент.
Это информационное предупреждение также отслеживает проблемы, о которых больше не сообщается. Эта информация позволит вам узнать, действительно ли вы устранили проблемы, поэтому при необходимости вы можете заново создать базовый план, чтобы ошибка не вернулась незамеченной.
Примечание. Базовые показатели включаются при выполнении проверок в пакетном режиме в среде IDE, но они игнорируются при проверках в редакторе, которые выполняются в фоновом режиме при редактировании файла. Это связано с тем, что базовые показатели предназначены для случаев, когда в базе кода имеется большое количество существующих предупреждений, но вы хотите устранять проблемы локально, прикасаясь к коду.
Запуск проверок вручную
Чтобы вручную запустить настроенный lint и другие проверки IDE, выберите «Код» > «Проверить код» . Результаты проверки появятся в окне «Результаты проверки» .
Установите объем и профиль проверки
Выберите файлы, которые вы хотите проанализировать ( область проверки) и проверки, которые вы хотите запустить ( профиль проверки), следующим образом:
- В представлении Android откройте свой проект и выберите проект, папку или файл, который вы хотите проанализировать.
- В строке меню выберите «Код» > «Проверить код» .
В диалоговом окне «Укажите объем проверки» проверьте настройки.
Параметры, отображаемые в диалоговом окне «Указать объем проверки», различаются в зависимости от того, выбрали ли вы проект, папку или файл:
- Когда вы выбираете один проект, файл или каталог, в диалоговом окне «Укажите область проверки» отображается путь к выбранному вами проекту, файлу или каталогу.
- Когда вы выбираете более одного проекта, файла или каталога, в диалоговом окне «Указать область проверки» отображается выбранный переключатель для «Выбранные файлы» .
Чтобы изменить объект проверки, выберите один из других переключателей. См. диалоговое окно «Укажите область проверки» для описания всех возможных полей в диалоговом окне «Укажите область проверки» .
- В разделе «Профиль проверки» выберите профиль, который вы хотите использовать.
Нажмите «ОК», чтобы запустить проверку.
На рис. 4 показаны результаты проверки lint и других IDE при запуске кода проверки :
На панели «Результаты проверки» просмотрите результаты проверки, развернув и выбрав категории, типы или проблемы ошибок.
На панели «Отчет о проверке» отображается отчет о проверке для категории, типа или проблемы ошибки, выбранной на панели «Результаты проверки» , а также имя и расположение ошибки. Там, где это применимо, в отчете о проверке отображается другая информация, например описание проблемы, которая поможет вам устранить проблему.
В древовидном представлении панели «Результаты проверки» щелкните правой кнопкой мыши категорию, тип или проблему, чтобы отобразить контекстное меню.
В зависимости от контекста вы можете:
- Перейти к источнику.
- Исключить и включить выбранные элементы.
- Подавить проблемы.
- Изменить настройки.
- Управляйте оповещениями о проверках.
- Повторите проверку.
Описание кнопок панели инструментов, пунктов контекстного меню и полей отчета о проверке см. в окне инструмента «Результаты проверки» .
Используйте пользовательскую область
Используйте одну из пользовательских областей, предоставленных в Android Studio, следующим образом:
- В диалоговом окне «Укажите область проверки» выберите «Пользовательская область» .
Щелкните список «Пользовательская область», чтобы отобразить доступные параметры:
- Все места: Все файлы.
- Файлы проекта: все файлы текущего проекта.
- Исходные файлы проекта: только исходные файлы текущего проекта.
- Производственные файлы проекта: только рабочие файлы текущего проекта.
- Тестовые файлы проекта: только тестовые файлы в текущем проекте.
- Scratches and Consoles: только рабочие файлы и консоли, открытые в текущем проекте.
- Недавно просмотренные файлы: только недавно просмотренные файлы в текущем проекте.
- Текущий файл: только текущий файл в вашем текущем проекте. Появляется, когда у вас выбран файл или папка.
- Выбранный каталог: только текущая папка в вашем текущем проекте. Появляется, когда вы выбрали папку.
- Иерархия классов: если вы выберете этот параметр и нажмете «ОК» , появится диалоговое окно со всеми классами в текущем проекте. В диалоговом окне используйте поле «Поиск по имени» , чтобы отфильтровать и выбрать классы для проверки. Если вы не фильтруете список классов, проверка кода проверяет все классы.
- Нажмите ОК.
Если у вас настроена система VCS для проекта, есть также возможность ограничить поиск только измененными файлами.
Создайте пользовательскую область
Если вы хотите проверить набор файлов и каталогов, которые не охвачены ни одной из доступных настраиваемых областей, вы можете создать настраиваемую область:
- В диалоговом окне «Укажите область проверки» выберите «Пользовательская область» .
Нажмите на три точки после списка «Пользовательская область» .
Появится диалоговое окно Области действия .
- Нажмите кнопку в верхнем левом углу диалогового окна, чтобы определить новую область действия.
- В появившемся списке «Добавить область» выберите «Локальный» .
В проекте для функции проверки кода используются как локальная, так и общая области. Общая область также может использоваться с другими функциями проекта, имеющими поле области. Например, когда вы нажимаете Изменить настройки Чтобы изменить настройки « Найти использование» , в появившемся диалоговом окне есть поле «Область» , в котором вы можете выбрать общую область.
- Дайте области имя и нажмите «ОК» .
На правой панели диалогового окна «Области» отображаются параметры, позволяющие определить пользовательскую область.
- В списке выберите Проект .
Появится список доступных проектов.
Примечание. Вы можете создать собственную область действия для проектов или пакетов. Шаги те же.
Разверните папки проекта, выберите, что вы хотите добавить в пользовательскую область, и выберите, включить или исключить это.
- Включить : включить эту папку и ее файлы, но не включать ни одну из ее подпапок.
- Включить рекурсивно : включить эту папку и ее файлы, а также ее подпапки и их файлы.
- Исключить : исключить эту папку и ее файлы, но не исключать ни одну из ее подпапок.
- Исключить рекурсивно : исключить эту папку и ее файлы, а также ее подпапки и их файлы.
На рис. 10 показано, что включена основная папка, а папки java и res включены рекурсивно. Синий указывает на частично включенную папку, а зеленый указывает на рекурсивно включенные папки и файлы.
- Если вы выберете папку Java и нажмете «Рекурсивно исключить» , зеленое выделение папки Java и всех папок и файлов в ней исчезнет.
- Если вы выберете выделенный зеленым файл MainActivity.kt и нажмете «Исключить» , MainActivity.kt больше не будет выделен зеленым, но все остальное в папке Java останется зеленым.
- Нажмите ОК . Пользовательская область отображается внизу списка.
Просмотр и редактирование профилей проверки
В Android Studio имеется набор профилей проверки и других профилей проверки, которые обновляются посредством обновлений Android. Вы можете использовать эти профили в том виде, в каком они есть, или редактировать их имена, описания, уровни серьезности и области действия. Вы также можете активировать и деактивировать целые группы профилей или отдельные профили внутри группы.
Чтобы получить доступ к настройкам проверок :
- Выберите «Файл» > «Настройки». (в Windows) или Android Studio > Настройки (в macOS или Linux).
- Выберите «Редактор» > «Проверки» .
На панели «Проверки» отображается список поддерживаемых проверок и их описания.
Выберите список профилей , чтобы переключаться между проверками по умолчанию (Android Studio) и проверками по умолчанию (активный проект).
Для получения дополнительной информации см. страницу управления профилями IntelliJ.
В списке «Проверки» на левой панели выберите категорию профиля верхнего уровня или разверните группу и выберите конкретный профиль.
Выбрав категорию профиля, вы можете редактировать все проверки в этой категории как одну проверку.
- Выберите действия «Показать схему». список для копирования, переименования, добавления описаний, экспорта и импорта проверок.
- Когда вы закончите, нажмите ОК .