Android Lint — уграђени статички анализатор кода у Android Studio и Gradle-у, који проверава изворне датотеке у складу са Google препорукама. Lint проналази потенцијалне грешке пре компилације: неискоришћене ресурсе, проблеме перформанси, цурење меморије и некомпатибилност API-ја. Алат анализира XML, Java и Kotlin датотеке. Више на Android Lint Guide.
Главно
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 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.
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-а — стандардна пракса у Android развоју. Команда ./gradlew lint покреће анализу свих модула и генерише извештаје. У CI/CD конфигурацији (Jenkins, GitLab CI, GitHub Actions) Lint се покреће на сваки pull request. При постојању грешака изградња пада, а програмер добија обавештење са HTML извештајем Lint-а.
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 развоја. 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 анализира код без компајлирања и проналази логичке проблеме које компајлер прескаче: неискоришћене променљиве, цурење ресурса, проблеме локализације, кршење перформанси и некомпатибилност API-ја са minSdkVersion. Lint допуњава компајлер, али га не замењује.
У XML датотекама користите атрибут tools:ignore са ID правила: 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 пројекта. Android Studio ће аутоматски прихватити прилагођена правила.
Lint проналази проблеме које компајлер не види: цурење контекста (Activity, Fragment), некомпатибилност API-ја са minSdkVersion, проблеме конфигурације Gradle-а, превелике PNG иконе, недостатак алтернативних ресурса за различите језике и конфигурације екрана. Google Play препоручује Lint пре објављивања. Без Lint-а апликација може да се гаси на старим уређајима.
Завршни преглед
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође