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")। পুরো ডিরেক্টরির জন্য, 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।