Lint: พื้นฐาน ตัววิเคราะห์แบบสแตติกสำหรับโปรเจกต์ Android

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-02-13 เวลาอ่าน: 10 นาที

Android Lint — ตัววิเคราะห์โค้ดแบบสแตติกในตัวใน Android Studio และ Gradle ที่ตรวจสอบไฟล์ต้นฉบับตามคำแนะนำของ Google Lint ค้นหาข้อผิดพลาดที่อาจเกิดขึ้นก่อนการคอมไพล์: ทรัพยากรที่ไม่ได้ใช้ ปัญหาด้านประสิทธิภาพ หน่วยความจำรั่วไหล และความไม่เข้ากันของ API เครื่องมือนี้วิเคราะห์ไฟล์ XML, Java และ Kotlin เรียนรู้เพิ่มเติมที่ Android Lint Guide

ประเด็นสำคัญ

  • Android Lint — ตัววิเคราะห์แบบสแตติกในตัวใน Android Studio และ Gradle สำหรับตรวจสอบโค้ด
  • การตรวจสอบ Lint — การวิเคราะห์ XML, Java และ Kotlin เพื่อหาข้อผิดพลาดก่อนขั้นตอนการคอมไพล์แอป
  • lint.xml — ไฟล์กำหนดค่าสำหรับปรับแต่งกฎ Lint ในโปรเจกต์ Android
  • Lint baseline — กลไกการล็อกคำเตือนที่มีอยู่เพื่อการนำไปใช้แบบค่อยเป็นค่อยไป
  • การรวม CI — การเรียกใช้ Lint บนเซิร์ฟเวอร์บิลด์เพื่อควบคุมคุณภาพโค้ดอัตโนมัติ

Lint คืออะไร — ตัววิเคราะห์โค้ดแบบสแตติก?

Android Lint เป็นเครื่องมือวิเคราะห์แบบสแตติกที่รวมอยู่ใน Android SDK และ Android Studio Lint สแกนโค้ดต้นฉบับของแอปพลิเคชันโดยไม่ต้องเรียกใช้งานและค้นหาปัญหาที่คอมไพเลอร์มองข้าม: ทรัพยากรที่ไม่ได้ใช้ การแปลภาษาที่ไม่ถูกต้อง หน่วยความจำรั่วไหลที่อาจเกิดขึ้น ความไม่เข้ากันของ API กับ minSdkVersion และการละเมิดคำแนะนำด้านประสิทธิภาพของ Google

การวิเคราะห์แบบสแตติก เป็นวิธีการตรวจสอบซอฟต์แวร์ที่ไม่ต้องการการเรียกใช้โค้ดจริง แตกต่างจากคอมไพเลอร์ที่ตรวจสอบเฉพาะไวยากรณ์และประเภท ตัววิเคราะห์แบบสแตติกค้นหาข้อผิดพลาดเชิงตรรกะ รูปแบบต้าน และการเบี่ยงเบนจากแนวทางปฏิบัติที่ดีที่สุด Lint ดำเนินการตรวจสอบในตัวมากกว่า 200 รายการตามหมวดหมู่: ความถูกต้อง ประสิทธิภาพ ความปลอดภัย การเข้าถึง ความสามารถในการใช้งาน และ I18N

Lint ทำงานในหลายระดับ: การวิเคราะห์ XML ตรวจสอบเลย์เอาท์ ทรัพยากร (strings, colors, dimens) ไฟล์แถลงการณ์และไฟล์กำหนดค่า การวิเคราะห์ Java/Kotlin ตรวจสอบโค้ดต้นฉบับเพื่อหาการเรียก API ที่เลิกใช้ ปัญหาเธรด และการรั่วไหลของบริบท การวิเคราะห์ Gradle ตรวจสอบการกำหนดค่าบิลด์เพื่อความเข้ากันได้ของเวอร์ชัน

Lint ตรวจสอบโค้ดของโปรเจกต์ Android อย่างไร

การตรวจสอบ Lint เริ่มต้นผ่าน Android Studio (Analyze > Inspect Code) หรือคำสั่ง Gradle: ./gradlew lint ผลลัพธ์คือรายงาน HTML ในโฟลเดอร์ build/reports/lint-results.html และรายงาน XML สำหรับระบบ CI Lint วิเคราะห์แต่ละไฟล์อย่างอิสระ โดยใช้ชุดกฎ (Issues) ซึ่งแต่ละกฎมี ID เฉพาะ คำอธิบาย หมวดหมู่ และระดับความรุนแรง

ระดับความรุนแรงของ Lint: Error (ข้อผิดพลาด — ปิดกั้นบิลด์), Warning (คำเตือน — ส่งผลต่อคุณภาพ), Informational (ข้อมูล — สำหรับอ้างอิง), Ignore (ละเว้นโดยค่าเริ่มต้น) ระดับถูกกำหนดค่าใน lint.xml ข้อผิดพลาด Lint สามารถกำหนดค่าให้ทำให้บิลด์ Gradle ล้มเหลวเมื่อมีอยู่ผ่าน lintOptions.abortOnError true

groovy
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 ในไฟล์กำหนดค่า

lint.xml — ไฟล์กำหนดค่าในรูทโปรเจกต์สำหรับปรับแต่งกฎ Lint ระบุกฎที่ละเว้น ระดับความรุนแรง และข้อยกเว้นสำหรับไฟล์หรือไดเรกทอรีเฉพาะ ไฟล์ถูกสร้างด้วยตนเองและนำไปใช้ทั่วโลกกับทุกโมดูลของโปรเจกต์ หากไม่มี lint.xml กฎทั้งหมดจะทำงานด้วยการตั้งค่าเริ่มต้น

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 เกินค่าที่ระบุ

การเรียกใช้การตรวจสอบ Lint ในไปป์ไลน์ CI/CD

การรวม CI ของ Lint เป็นแนวปฏิบัติมาตรฐานในการพัฒนา Android คำสั่ง ./gradlew lint เรียกใช้การวิเคราะห์ในทุกโมดูลและสร้างรายงาน ในการกำหนดค่า CI/CD (Jenkins, GitLab CI, GitHub Actions) Lint จะทำงานในทุก pull request หากพบข้อผิดพลาด บิลด์จะล้มเหลวและนักพัฒนาจะได้รับการแจ้งเตือนพร้อมรายงาน HTML ของ Lint

yaml
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 จะส่งคืนสถานะล้มเหลว และการรวมจะถูกบล็อก ป้องกันไม่ให้โค้ดที่มีปัญหาเข้าสู่สาขาหลักและรักษาคุณภาพของฐานโค้ด

หมวดหมู่หลักของกฎ Lint ใน Android

หมวดหมู่ 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 ตรวจสอบว่ารูปแบบ ViewHolder ถูกใช้ในอะแดปเตอร์ RecyclerView หรือไม่ DrawAllocation เตือนเกี่ยวกับการสร้างออบเจ็กต์ในเมธอด onDraw การแก้ไขปัญหาเหล่านี้ช่วยลดขนาด APK และเพิ่มความเร็วของแอปพลิเคชัน

กฎความปลอดภัย จำเป็นสำหรับแอปพลิเคชันที่เผยแพร่ ExportedContentProvider ตรวจสอบว่า ContentProvider ถูกส่งออกโดยไม่มีการป้องกันหรือไม่ WorldReadableFiles เตือนเกี่ยวกับการสร้างไฟล์ที่แอปพลิเคชันทั้งหมดเข้าถึงได้ AllowBackup ตรวจสอบแฟล็ก allowBackup ในไฟล์แถลงการณ์ — แนะนำให้ปิดการใช้งานเพื่อความปลอดภัยของข้อมูล

คำถามที่พบบ่อย

ความแตกต่างระหว่าง Lint และคอมไพเลอร์คืออะไร?

คอมไพเลอร์ ตรวจสอบไวยากรณ์และประเภท แปลงโค้ดเป็นไบต์โค้ดสำหรับการทำงาน Lint วิเคราะห์โค้ดโดยไม่ต้องคอมไพล์และค้นหาปัญหาเชิงตรรกะที่คอมไพเลอร์มองข้าม: ตัวแปรที่ไม่ได้ใช้ ทรัพยากรรั่วไหล ปัญหาการแปลภาษา การละเมิดประสิทธิภาพ และความไม่เข้ากันของ API กับ minSdkVersion Lint เสริมคอมไพเลอร์แต่ไม่ได้แทนที่

จะปิดการใช้งานคำเตือน Lint เฉพาะในโค้ดได้อย่างไร?

ในไฟล์ XML ใช้แอตทริบิวต์ tools:ignore พร้อม ID กฎ: tools:ignore="UnusedResources" ใน Java/Kotlin เพิ่มคำอธิบายประกอบ @SuppressLint ไปยังเมธอดหรือคลาส: @SuppressLint("SetTextI18n") สำหรับทั้งไดเรกทอรี กำหนดค่า lint.xml ด้วยโหนด issue และ severity="ignore" สำหรับทั้งโปรเจกต์ กำหนดค่า lint.xml ในรูทของโมดูล

Lint baseline คืออะไรและใช้งานอย่างไร?

Lint baseline คือไฟล์ XML ที่ทำเครื่องหมายคำเตือน Lint ปัจจุบันว่ายอมรับได้ สร้างด้วยคำสั่ง ./gradlew lint -Pbaseline หรือผ่าน lintOptions.baselineFile ใน build.gradle หลังจากเพิ่ม baseline แล้ว Lint จะรายงานเฉพาะปัญหาใหม่ สะดวกสำหรับการนำ Lint ไปใช้ในโปรเจกต์ที่มีโค้ดดั้งเดิม — ทีมแก้ไขข้อผิดพลาดแบบวนซ้ำ

จะสร้างกฎ Lint ที่กำหนดเองได้อย่างไร?

สร้างโมดูล Java/Kotlin ใหม่พร้อมการพึ่งพา lint-api และ lint-checks จากไลบรารี com.android.tools.lint นำคลาส Detector ไปใช้เพื่อค้นหาปัญหาและคลาส Issue เพื่ออธิบายปัญหา สร้างโมดูลเป็น JAR วางในโฟลเดอร์ lintLibs ของโปรเจกต์ Android ของคุณ Android Studio จะตรวจจับกฎที่กำหนดเองโดยอัตโนมัติ

ทำไมการตรวจสอบ Lint ถึงจำเป็นในโปรเจกต์ Android?

Lint ค้นหาปัญหาที่คอมไพเลอร์ไม่เห็น: การรั่วไหลของบริบท (Activity, Fragment), ความไม่เข้ากันของ API กับ minSdkVersion, ปัญหาการกำหนดค่า Gradle, ไอคอน PNG ที่ใหญ่เกินไป, การขาดทรัพยากรทางเลือกสำหรับภาษาและการกำหนดค่าหน้าจอที่แตกต่างกัน Google Play แนะนำ Lint ก่อนเผยแพร่ หากไม่มี Lint แอปอาจขัดข้องบนอุปกรณ์รุ่นเก่า

สรุป

  • Android Lint — ตัววิเคราะห์โค้ดแบบสแตติกในตัวใน Android SDK และ Android Studio
  • การตรวจสอบ Lint — การวิเคราะห์ XML, Java และ Kotlin เพื่อหาข้อผิดพลาดที่อาจเกิดขึ้นก่อนการคอมไพล์แอป
  • lint.xml — ไฟล์กำหนดค่าสำหรับปรับแต่งกฎ Lint ในโปรเจกต์ Android
  • Lint baseline — กลไกการล็อกคำเตือนที่มีอยู่เพื่อการนำไปใช้แบบค่อยเป็นค่อยไป
  • การรวม CI — การเรียกใช้ Lint บนเซิร์ฟเวอร์บิลด์บล็อก PR ที่มีข้อผิดพลาดร้ายแรง
  • หมวดหมู่ Lint — Correctness, Performance, Security, Accessibility และ I18N
  • @SuppressLint — คำอธิบายประกอบสำหรับปิดการใช้งาน Lint ในระดับเมธอดหรือคลาส

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม