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 را برای متد مشخص می‌کند — Lint هشدار نمی‌دهد اگر minSdk بالاتر از مقدار مشخص شده باشد.

اجرای بررسی Lint در خط لوله CI/CD

یکپارچه‌سازی CI Lint — یک روش استاندارد در توسعه Android. دستور ./gradlew lint تحلیل همه ماژول‌ها را اجرا کرده و گزارش‌هایی تولید می‌کند. در پیکربندی CI/CD (Jenkins، GitLab CI، GitHub Actions) Lint در هر درخواست کشش اجرا می‌شود. در صورت وجود خطاها، ساخت شکست می‌خورد و توسعه‌دهنده اعلانی با گزارش 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 از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید