Lint: основи, статичний аналізатор для Android проєктів

Автор: IT Sectr Опубліковано: 2026-02-13 Час читання: 10 хв

Android Lint — вбудований статичний аналізатор коду в Android Studio та Gradle, який перевіряє вихідні файли на відповідність рекомендаціям Google. Lint знаходить потенційні помилки до компіляції: невикористовувані ресурси, проблеми продуктивності, витоки пам'яті та несумісність API. Інструмент аналізує XML, Java та Kotlin файли. Детальніше — на Android Lint Guide.

Головне

  • Android Lint — статичний аналізатор, вбудований в Android Studio та Gradle для перевірки коду
  • Lint перевірка — аналіз XML, Java та Kotlin на помилки до етапу компіляції додатку
  • lint.xml — конфігураційний файл для налаштування правил Lint в Android проєкті
  • Lint baseline — механізм фіксації існуючих попереджень для поступового впровадження
  • CI інтеграція — запуск Lint на сервері збірки для автоматичного контролю якості коду

Що таке Lint — статичний аналізатор коду?

Android Lint — інструмент статичного аналізу, що входить до складу Android SDK та Android Studio. Lint сканує вихідний код додатку без його виконання та знаходить проблеми, які компілятор пропускає: невикористовувані ресурси, некоректну локалізацію, потенційні витоки пам'яті, несумісність API з minSdkVersion та порушення рекомендацій Google щодо продуктивності.

Статичний аналіз — метод перевірки програмного забезпечення без фактичного виконання коду. На відміну від компілятора, який перевіряє лише синтаксис та типи, статичний аналізатор шукає логічні помилки, антипатерни та відхилення від кращих практик. Lint виконує понад 200 вбудованих перевірок за категоріями: correctness, performance, security, accessibility, usability та I18N.

Lint працює на кількох рівнях: XML аналіз перевіряє макети (layout), ресурси (strings, colors, dimens), маніфест та конфігураційні файли. Java/Kotlin аналіз — вихідний код на предмет виклику застарілих API, проблем з потоками та витоків контексту. Gradle аналіз — конфігурацію збірки на сумісність версій.

Як Lint перевіряє код Android проєктів

Lint перевірка запускається через Android Studio (Analyze > Inspect Code) або командою Gradle: ./gradlew lint. Результат — HTML-звіт у папці build/reports/lint-results.html та XML-звіт для CI систем. Lint аналізує кожен файл незалежно, застосовуючи набір правил (Issue), кожне з яких має унікальний ID, опис, категорію та рівень серйозності.

Рівні серйозності Lint: Error (помилка — блокує збірку), Warning (попередження — впливає на якість), Informational (інформація — для відома), Ignore (ігнорується за замовчуванням). Рівні налаштовуються в lint.xml. Помилки Lint можна налаштувати так, щоб Gradle збірка падала при їх наявності через lintOptions.abortOnError true.

groovy
android {
    lintOptions {
        abortOnError true
        checkAllWarnings true
        baselineFile file("lint-baseline.xml")
        htmlReport true
        xmlReport true
        lintConfig file("lint.xml")
    }
}

Lint baseline — файл, що фіксує поточні попередження як допустимі. Створюється командою lint --baseline baseline.xml. Після додавання baseline в проєкт Lint повідомляє лише про нові проблеми. Це зручно для впровадження Lint в старий проєкт із сотнями попереджень — команда виправляє помилки поступово.

Налаштування правил Lint в конфігураційних файлах

lint.xml — конфігураційний файл в корені проєкту для налаштування правил Lint. У ньому вказуються ігноровані правила, рівні серйозності та винятки для конкретних файлів або директорій. Файл створюється вручну і застосовується глобально до всіх модулів проєкту. Без lint.xml всі правила працюють з налаштуваннями за замовчуванням.

xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Вимкнути перевірку невикористовуваних ресурсів -->
    <issue id="UnusedResources" severity="ignore" />

    <!-- Підвищити серйозність витоку контексту -->
    <issue id="StaticFieldLeak" severity="error" />

    <!-- Ігнорувати в згенерованих файлах -->
    <issue id="MissingTranslation" severity="ignore">
        <ignore path="build/generated" />
    </issue>
</lint>

@SuppressLint — анотація для відключення Lint на рівні методу або класу в Java/Kotlin. Приклад: @SuppressLint("SetTextI18n") для методу, де текст динамічно встановлюється в TextView. Анотація @RequiresApi вказує мінімальний API Level для методу — Lint не буде видавати попередження, якщо minSdk вище вказаного значення.

Запуск Lint перевірки в CI/CD пайплайні

CI інтеграція Lint — стандартна практика в Android розробці. Команда ./gradlew lint запускає аналіз всіх модулів та генерує звіти. В CI/CD конфігурації (Jenkins, GitLab CI, GitHub Actions) Lint запускається на кожен pull request. При наявності помилок збірка падає, і розробник отримує сповіщення з HTML-звітом Lint.

yaml
lint-check:
  script:
    - ./gradlew lint
  artifacts:
    paths:
      - app/build/reports/lint-results.html
    when: always

HTML-звіт Lint містить таблицю всіх знайдених проблем з категорією, ID правила, файлом, рядком та описом. Звіт доступний на CI сервері або публікується як артефакт збірки. XML-звіт (lint-results.xml) використовується для інтеграції з системами аналізу коду (SonarQube, CodeClimate) та автоматичного створення завдань в трекерах (Jira, YouTrack).

Lint в pull request — налаштуйте GitHub Actions або GitLab CI так, щоб Lint запускався автоматично при створенні MR/PR. Якщо Lint знаходить помилки, CI повертає статус failure, і злиття блокується. Це запобігає потраплянню проблемного коду в основну гілку та підтримує якість кодової бази.

Основні категорії правил Lint в Android

Lint категорії охоплюють всі аспекти Android розробки. Google розділяє правила на 12 категорій, кожна відповідає за певний тип проблем. Найважливіші категорії — Correctness, Performance, Security та Accessibility. Розробнику достатньо знати ключові перевірки кожної категорії для ефективної роботи з Lint.

КатегоріяОписПриклад правила
CorrectnessПомилки, що впливають на роботу додаткуMissingPermission, WrongConstant
PerformanceПроблеми продуктивності та пам'ятіUnusedResources, ViewHolder, DrawAllocation
SecurityВразливості та порушення безпекиExportedContentProvider, WorldReadableFiles
AccessibilityПроблеми доступності для користувачівContentDescription, TouchTargetSize
UsabilityЮзабіліті та користувацький досвідNotSibling, BackButton, HardcodedText
I18NІнтернаціоналізація та локалізаціяMissingTranslation, ExtraTranslation

Performance правила — найкорисніші на практиці. UnusedResources знаходить ресурси, оголошені в XML, але не використовувані в коді. ViewHolder перевіряє, що в адаптерах RecyclerView використовується патерн ViewHolder. DrawAllocation попереджає про створення об'єктів в методі onDraw. Усунення цих проблем знижує розмір APK та прискорює роботу додатку.

Security правила обов'язкові для публікованих додатків. ExportedContentProvider перевіряє, чи не експортовано ContentProvider без захисту. WorldReadableFiles попереджає про створення файлів, доступних всім додаткам. AllowBackup перевіряє прапорець allowBackup в маніфесті — його рекомендується вимикати для забезпечення безпеки даних.

Часті запитання

В чому різниця між Lint та компілятором?

Компілятор перевіряє синтаксис та типи, транслюючи код в байт-код для виконання. Lint аналізує код без компіляції та знаходить логічні проблеми, які компілятор пропускає: невикористовувані змінні, витоки ресурсів, проблеми локалізації, порушення продуктивності та несумісність API з minSdkVersion. Lint доповнює компілятор, але не замінює його.

Як відключити конкретне Lint попередження в коді?

В XML файлах використовуйте атрибут tools:ignore з ID правила: tools:ignore="UnusedResources". В Java/Kotlin додайте анотацію @SuppressLint на метод або клас: @SuppressLint("SetTextI18n"). Для всієї директорії налаштуйте lint.xml з вузлом issue та severity="ignore". Для всього проєкту налаштуйте lint.xml в корені модуля.

Що таке Lint baseline та як його використовувати?

Lint baseline — XML-файл, що фіксує поточні Lint попередження як допустимі. Створюється командою ./gradlew lint -Pbaseline або через lintOptions.baselineFile в build.gradle. Після додавання baseline Lint повідомляє лише про нові проблеми. Це зручно для впровадження Lint в проєкти з успадкованим кодом — команда виправляє помилки ітераційно.

Як створити власне Lint правило?

Створіть новий Java/Kotlin модуль із залежностями від lint-api та lint-checks з бібліотеки com.android.tools.lint. Реалізуйте клас Detector для пошуку проблем та клас Issue для їх опису. Зберіть модуль в JAR, розмістіть в папці lintLibs вашого Android проєкту. Android Studio автоматично підхопить кастомні правила.

Чому Lint перевірка обов'язкова в Android проєктах?

Lint знаходить проблеми, які компілятор не бачить: витоки контексту (Activity, Fragment), несумісність API з minSdkVersion, проблеми конфігурації Gradle, занадто великі PNG іконки, відсутність альтернативних ресурсів для різних мов та конфігурацій екрану. Google Play рекомендує Lint перед публікацією. Без Lint додаток може вилітати на старих пристроях.

Підсумки

  • Android Lint — статичний аналізатор коду, вбудований в Android SDK та Android Studio
  • Lint перевірка — аналіз XML, Java та Kotlin на потенційні помилки до компіляції додатку
  • lint.xml — конфігураційний файл для налаштування правил Lint в Android проєкті
  • Lint baseline — механізм фіксації існуючих попереджень для поступового впровадження
  • CI інтеграція — запуск Lint на сервері збірки блокує PR з критичними помилками
  • Категорії Lint — Correctness, Performance, Security, Accessibility та I18N
  • @SuppressLint — анотація для відключення Lint на рівні методу або класу

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також