Android Lint — Android Studio اور Gradle میں شامل ایک جامد کوڈ تجزیہ کار جو Google کی سفارشات کے مطابق سورس فائلوں کی جانچ کرتا ہے۔ Lint تالیف سے پہلے ممکنہ غلطیاں ڈھونڈتا ہے: غیر استعمال شدہ وسائل، کارکردگی کے مسائل، میموری لیک اور API عدم مطابقت۔ یہ آلہ XML، Java اور Kotlin فائلوں کا تجزیہ کرتا ہے۔ مزید جانیں Android Lint Guide پر۔
اہم نکات
Android Lint ایک جامد تجزیہ کا آلہ ہے جو Android SDK اور Android Studio میں شامل ہے۔ Lint ایپلی کیشن کے سورس کوڈ کو بغیر چلائے اسکین کرتا ہے اور ان مسائل کو ڈھونڈتا ہے جنہیں مرتب نظر انداز کر دیتا ہے: غیر استعمال شدہ وسائل، غلط مقامی کاری، ممکنہ میموری لیک، minSdkVersion کے ساتھ API عدم مطابقت اور Google کی کارکردگی کی سفارشات کی خلاف ورزی۔
جامد تجزیہ ایک سافٹ ویئر تصدیق کا طریقہ ہے جس میں حقیقی کوڈ پر عمل درآمد کی ضرورت نہیں ہوتی۔ مرتب کے برعکس، جو صرف نحو اور اقسام کی جانچ کرتا ہے، ایک جامد تجزیہ کار منطقی غلطیاں، اینٹی پیٹرن اور بہترین طریقوں سے انحراف ڈھونڈتا ہے۔ Lint زمروں میں 200 سے زیادہ بلٹ ان جانچیں کرتا ہے: correctness, performance, security, accessibility, usability اور I18N۔
Lint متعدد سطحوں پر کام کرتا ہے: XML تجزیہ لے آؤٹ، وسائل (strings, colors, dimens)، مینی فیسٹ اور ترتیباتی فائلوں کی جانچ کرتا ہے۔ Java/Kotlin تجزیہ سورس کوڈ کو متروک API کالز، تھریڈنگ مسائل اور سیاق و سباق کے لیک کے لیے جانچتا ہے۔ Gradle تجزیہ ورژن مطابقت کے لیے تعمیراتی ترتیب کی جانچ کرتا ہے۔
Lint جانچ Android Studio (Analyze > Inspect Code) یا Gradle کمانڈ کے ذریعے شروع کی جاتی ہے: ./gradlew lint۔ نتیجہ build/reports/lint-results.html فولڈر میں HTML رپورٹ اور CI سسٹمز کے لیے XML رپورٹ ہے۔ Lint ہر فائل کا آزادانہ طور پر تجزیہ کرتا ہے، قواعد (Issues) کا ایک سیٹ لاگو کرتا ہے، ہر ایک کا منفرد ID، تفصیل، زمرہ اور سنگینی کی سطح ہوتی ہے۔
Lint سنگینی کی سطحیں: Error (غلطی — تعمیر کو روکتی ہے)، Warning (انتباہ — معیار کو متاثر کرتی ہے)، Informational (معلومات — حوالے کے لیے)، Ignore (بطور ڈیفالٹ نظر انداز کردہ)۔ سطحیں lint.xml میں ترتیب دی جاتی ہیں۔ Lint غلطیوں کو lintOptions.abortOnError true کے ذریعے Gradle تعمیر کو ناکام بنانے کے لیے ترتیب دیا جا سکتا ہے۔
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 — Java/Kotlin میں طریقہ یا کلاس کی سطح پر Lint کو غیر فعال کرنے کے لیے ایک تشریح۔ مثال: @SuppressLint("SetTextI18n") اس طریقہ کے لیے جہاں TextView میں متن متحرک طور پر سیٹ کیا جاتا ہے۔ @RequiresApi تشریح کسی طریقہ کے لیے کم از کم API سطح متعین کرتی ہے — Lint انتباہ جاری نہیں کرے گا اگر minSdk متعین کردہ قدر سے زیادہ ہو۔
Lint کا CI انضمام Android ڈیولپمنٹ میں ایک معیاری عمل ہے۔ کمانڈ ./gradlew lint تمام ماڈیولز پر تجزیہ چلاتی ہے اور رپورٹیں تیار کرتی ہے۔ CI/CD ترتیبات (Jenkins, GitLab CI, GitHub Actions) میں، Lint ہر pull request پر چلتا ہے۔ اگر غلطیاں پائی جاتی ہیں تو تعمیر ناکام ہو جاتی ہے اور ڈیویلپر کو Lint HTML رپورٹ کے ساتھ اطلاع ملتی ہے۔
lint-check:
script:
- ./gradlew lint
artifacts:
paths:
- app/build/reports/lint-results.html
when: always
Lint HTML رپورٹ میں زمرہ، قاعدہ ID، فائل، سطر اور تفصیل کے ساتھ تمام پائے گئے مسائل کا ایک جدول ہوتا ہے۔ رپورٹ CI سرور پر دستیاب ہوتی ہے یا تعمیراتی پیداوار کے طور پر شائع کی جاتی ہے۔ XML رپورٹ (lint-results.xml) کوڈ تجزیہ نظام (SonarQube, CodeClimate) کے ساتھ انضمام اور ٹریکرز (Jira, YouTrack) میں خودکار کام کی تخلیق کے لیے استعمال ہوتی ہے۔
Pull request میں Lint — GitHub Actions یا GitLab CI کو ترتیب دیں تاکہ MR/PR بننے پر Lint خودکار طور پر چلے۔ اگر Lint کو غلطیاں ملتی ہیں تو CI ناکامی کی کیفیت لوٹاتا ہے اور انضمام روک دیا جاتا ہے۔ یہ مسئلہ والے کوڈ کو مرکزی شاخ میں داخل ہونے سے روکتا ہے اور کوڈبیس کے معیار کو برقرار رکھتا ہے۔
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 |
کارکردگی کے قواعد عملی طور پر سب سے زیادہ مفید ہیں۔ UnusedResources XML میں اعلان کردہ لیکن کوڈ میں استعمال نہ ہونے والے وسائل کو ڈھونڈتا ہے۔ ViewHolder جانچتا ہے کہ RecyclAdapter میں ViewHolder پیٹرن استعمال ہوا ہے۔ DrawAllocation onDraw طریقہ میں آبجیکٹ بنانے کے بارے میں انتباہ کرتا ہے۔ ان مسائل کو درست کرنے سے APK کا سائز کم ہوتا ہے اور ایپلی کیشن تیز ہوتی ہے۔
حفاظتی قواعد شائع شدہ ایپلی کیشنز کے لیے لازمی ہیں۔ ExportedContentProvider جانچتا ہے کہ ContentProvider بغیر تحفظ کے برآمد تو نہیں کیا گیا۔ WorldReadableFiles تمام ایپلی کیشنز کے لیے قابل رسائل فائلیں بنانے کے بارے میں انتباہ کرتا ہے۔ AllowBackup مینی فیسٹ میں allowBackup پرچم کی جانچ کرتا ہے — ڈیٹا کی حفاظت کے لیے اسے غیر فعال کرنے کی سفارش کی جاتی ہے۔
اکثر پوچھے گئے سوالات
مرتب نحو اور اقسام کی جانچ کرتا ہے، کوڈ کو عملدرآمد کے لیے بائٹ کوڈ میں ترجمہ کرتا ہے۔ Lint تالیف کے بغیر کوڈ کا تجزیہ کرتا ہے اور منطقی مسائل ڈھونڈتا ہے جنہیں مرتب نظر انداز کر دیتا ہے: غیر استعمال شدہ متغیرات، وسائل کا لیک، مقامی کاری کے مسائل، کارکردگی کی خلاف ورزیاں اور minSdkVersion کے ساتھ API عدم مطابقت۔ Lint مرتب کی تکمیل کرتا ہے لیکن اسے تبدیل نہیں کرتا۔
XML فائلوں میں، قاعدہ ID کے ساتھ tools:ignore وصف استعمال کریں: tools:ignore="UnusedResources"۔ Java/Kotlin میں، کسی طریقہ یا کلاس پر @SuppressLint تشریح شامل کریں: @SuppressLint("SetTextI18n")۔ پوری ڈائریکٹری کے لیے، issue نوڈ اور severity="ignore" کے ساتھ lint.xml ترتیب دیں۔ پورے منصوبے کے لیے، ماڈیول کی جڑ میں lint.xml ترتیب دیں۔
Lint baseline ایک XML فائل ہے جو موجودہ Lint انتباہات کو قابل قبول قرار دیتی ہے۔ یہ کمانڈ ./gradlew lint -Pbaseline یا build.gradle میں lintOptions.baselineFile کے ذریعے بنائی جاتی ہے۔ baseline شامل کرنے کے بعد، Lint صرف نئے مسائل کی رپورٹ کرتا ہے۔ یہ پرانے کوڈ والے منصوبوں میں Lint متعارف کرانے کے لیے آسان ہے — ٹیم بار بار غلطیوں کو درست کرتی ہے۔
com.android.tools.lint لائبریری سے lint-api اور lint-checks پر انحصار کے ساتھ ایک نیا Java/Kotlin ماڈیول بنائیں۔ مسائل ڈھونڈنے کے لیے Detector کلاس اور ان کی وضاحت کے لیے Issue کلاس لاگو کریں۔ ماڈیول کو JAR میں بنائیں، اسے اپنے Android منصوبے کے lintLibs فولڈر میں رکھیں۔ Android Studio خود بخود کسٹم قواعد کو اٹھا لے گا۔
Lint وہ مسائل ڈھونڈتا ہے جو مرتب نہیں دیکھتا: سیاق و سباق کا لیک (Activity, Fragment)، minSdkVersion کے ساتھ API عدم مطابقت، Gradle ترتیبات کے مسائل، بہت بڑے PNG آئیکنز، مختلف زبانوں اور اسکرین ترتیبات کے لیے متبادل وسائل کی کمی۔ Google Play اشاعت سے پہلے Lint کی سفارش کرتا ہے۔ Lint کے بغیر، ایپ پرانے آلات پر کریش ہو سکتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔