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 जाँचता है कि RecyclerView एडॉप्टर में 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")। पूरी निर्देशिका के लिए, lint.xml को issue नोड और severity="ignore" के साथ कॉन्फ़िगर करें। पूरे प्रोजेक्ट के लिए, मॉड्यूल रूट में 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।