Android Lint — محلل ثابت للكود مدمج في Android Studio و Gradle يتحقق من الملفات المصدرية وفقاً لتوصيات Google. يجد Lint الأخطاء المحتملة قبل الترجمة: الموارد غير المستخدمة، مشاكل الأداء، تسرب الذاكرة وعدم توافق API. تقوم الأداة بتحليل ملفات XML و Java و Kotlin. اعرف المزيد على Android Lint Guide.
الرئيسية
Android Lint هي أداة تحليل ثابت مضمنة في SDK أندرويد و Android Studio. يقوم Lint بمسح الكود المصدري للتطبيق دون تشغيله ويجد المشكلات التي يفوتها المترجم: الموارد غير المستخدمة، الترجمة غير الصحيحة، تسرب الذاكرة المحتمل، عدم توافق API مع minSdkVersion وانتهاكات توصيات أداء Google.
التحليل الثابت هو طريقة للتحقق من البرمجيات دون الحاجة إلى تنفيذ الكود فعلياً. على عكس المترجم الذي يتحقق فقط من بناء الجملة والأنواع، يبحث المحلل الثابت عن الأخطاء المنطقية والأنماط المضادة والانحرافات عن أفضل الممارسات. يقوم Lint بأكثر من 200 فحص مدمج عبر فئات: الصحة، الأداء، الأمان، إمكانية الوصول، سهولة الاستخدام و I18N.
يعمل Lint على مستويات متعددة: تحليل XML يتحقق من التخطيطات والموارد (strings, colors, dimens) والملف البياني وملفات الإعدادات. تحليل Java/Kotlin يفحص الكود المصدري بحثاً عن استدعاءات API القديمة ومشاكل الخيوط وتسرب السياق. تحليل Gradle يتحقق من إعدادات البناء لتوافق الإصدارات.
فحص Lint يتم تشغيله عبر Android Studio (Analyze > Inspect Code) أو بأمر Gradle: ./gradlew lint. النتيجة هي تقرير HTML في مجلد build/reports/lint-results.html وتقرير XML لأنظمة CI. يحلل Lint كل ملف بشكل مستقل، مطبقاً مجموعة من القواعد (Issues)، لكل منها معرف فريد ووصف وفئة ومستوى خطورة.
مستويات خطورة Lint: Error (خطأ — يمنع البناء)، Warning (تحذير — يؤثر على الجودة)، Informational (معلومات — للعلم)، Ignore (يتجاهل افتراضياً). يتم تكوين المستويات في lint.xml. يمكن تكوين أخطاء Lint لإفشال بناء Gradle عند وجودها عبر lintOptions.abortOnError true.
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.xml — ملف تكوين في جذر المشروع لتخصيص قواعد Lint. يحدد القواعد المتجاهلة ومستويات الخطورة والاستثناءات لملفات أو مجلدات محددة. يتم إنشاء الملف يدوياً ويطبق عالمياً على جميع وحدات المشروع. بدون lint.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 القيمة المحددة.
تكامل CI لـ Lint هو ممارسة قياسية في تطوير أندرويد. الأمر ./gradlew lint يشغل التحليل على جميع الوحدات ويولد التقارير. في تكوينات CI/CD (Jenkins, GitLab CI, GitHub Actions)، يتم تشغيل Lint على كل طلب سحب. في حالة وجود أخطاء، يفشل البناء ويتلقى المطور إشعاراً بتقرير HTML من Lint.
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
تقرير HTML لـ Lint يحتوي على جدول بجميع المشكلات التي تم العثور عليها مع الفئة ومعرف القاعدة والملف والسطر والوصف. يتوفر التقرير على خادم CI أو ينشر كمنتج بناء. تقرير XML (lint-results.xml) يستخدم للتكامل مع أنظمة تحليل الكود (SonarQube, CodeClimate) والإنشاء التلقائي للمهام في أنظمة التتبع (Jira, YouTrack).
Lint في طلبات السحب — قم بتكوين GitHub Actions أو GitLab CI بحيث يتم تشغيل Lint تلقائياً عند إنشاء MR/PR. إذا وجد Lint أخطاء، يعيد CI حالة فشل ويتم حظر الدمج. يمنع هذا وصول الكود المشكل إلى الفرع الرئيسي ويحافظ على جودة قاعدة الكود.
فئات Lint تغطي جميع جوانب تطوير أندرويد. تقسم 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 |
قواعد الأداء هي الأكثر فائدة عملياً. UnusedResources يجد الموارد المعلنة في XML ولكن غير المستخدمة في الكود. ViewHolder يتحقق من استخدام نمط ViewHolder في محولات RecyclerView. DrawAllocation يحذر من إنشاء كائنات في طريقة onDraw. إصلاح هذه المشكلات يقلل حجم APK ويسرع التطبيق.
قواعد الأمان إلزامية للتطبيقات المنشورة. ExportedContentProvider يتحقق مما إذا كان ContentProvider قد تم تصديره دون حماية. WorldReadableFiles يحذر من إنشاء ملفات يمكن لجميع التطبيقات الوصول إليها. AllowBackup يتحقق من علامة allowBackup في البيان — يوصى بتعطيلها لأمان البيانات.
الأسئلة الشائعة
المترجم يتحقق من بناء الجملة والأنواع، ويترجم الكود إلى bytecode للتنفيذ. Lint يحلل الكود دون ترجمة ويجد المشكلات المنطقية التي يفوتها المترجم: المتغيرات غير المستخدمة، تسرب الموارد، مشاكل الترجمة، انتهاكات الأداء وعدم توافق API مع minSdkVersion. Lint يكمل المترجم لكنه لا يحل محله.
في ملفات XML، استخدم الخاصية tools:ignore مع معرف القاعدة: tools:ignore="UnusedResources". في Java/Kotlin، أضف التعليق @SuppressLint إلى طريقة أو فئة: @SuppressLint("SetTextI18n"). لدليل كامل، قم بتكوين lint.xml مع عقدة issue و severity="ignore". للمشروع بأكمله، قم بتكوين lint.xml في جذر الوحدة.
Lint baseline هو ملف XML يحدد تحذيرات Lint الحالية كمقبولة. يتم إنشاؤه بالأمر ./gradlew lint -Pbaseline أو من خلال lintOptions.baselineFile في build.gradle. بعد إضافة baseline، يبلغ Lint فقط عن المشكلات الجديدة. هذا مناسب لإدخال Lint في مشاريع ذات كود قديم — حيث يقوم الفريق بإصلاح الأخطاء بشكل تكراري.
قم بإنشاء وحدة Java/Kotlin جديدة مع تبعيات lint-api و lint-checks من مكتبة com.android.tools.lint. قم بتنفيذ فئة Detector للعثور على المشكلات وفئة Issue لوصفها. قم ببناء الوحدة في JAR، وضعها في مجلد lintLibs لمشروع أندرويد الخاص بك. سيقوم Android Studio تلقائياً بالتقاط القواعد المخصصة.
Lint يجد مشكلات لا يراها المترجم: تسرب السياق (Activity, Fragment)، عدم توافق API مع minSdkVersion، مشاكل تكوين Gradle، أيقونات PNG كبيرة جداً، نقص الموارد البديلة للغات وتكوينات الشاشة المختلفة. يوصي Google Play باستخدام Lint قبل النشر. بدون Lint، قد يتعطل التطبيق على الأجهزة القديمة.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.