ปรับปรุงโค้ดโดยใช้ Lint ตรวจสอบ

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

ตัวอย่างเช่น หากไฟล์ทรัพยากร XML มีเนมสเปซที่ไม่ได้ใช้ ไฟล์ดังกล่าวจะกินพื้นที่และต้องมีการประมวลผลที่ไม่จำเป็น ปัญหาด้านโครงสร้างอื่นๆ เช่น การใช้องค์ประกอบที่เลิกใช้งานหรือการเรียก API ที่เวอร์ชัน API เป้าหมายไม่รองรับ อาจทําให้โค้ดทํางานไม่ถูกต้อง Lint ช่วยแก้ปัญหาเหล่านี้ได้

นอกจากนี้ คุณยังเพิ่มคำอธิบายประกอบลงในโค้ดเพื่อปรับปรุงประสิทธิภาพการตรวจสอบโค้ดได้ด้วย

ภาพรวม

Android Studio มีเครื่องมือสแกนโโค้ดที่เรียกว่า lint ซึ่งช่วยคุณระบุและแก้ไขปัญหาเกี่ยวกับคุณภาพเชิงโครงสร้างของโค้ดได้โดยไม่ต้องเรียกใช้แอปหรือเขียนกรณีทดสอบ เครื่องมือจะรายงานปัญหาแต่ละรายการที่ตรวจพบพร้อมข้อความอธิบายและระดับความรุนแรง เพื่อให้คุณจัดลําดับความสําคัญของสิ่งที่ต้องปรับปรุง นอกจากนี้ คุณยังลดระดับความรุนแรงของปัญหาเพื่อละเว้นปัญหาที่ไม่เกี่ยวข้องกับโปรเจ็กต์ หรือเพิ่มระดับความรุนแรงเพื่อไฮไลต์ปัญหาที่เฉพาะเจาะจงได้ด้วย

เครื่องมือ Lint จะตรวจสอบไฟล์ต้นทางของโปรเจ็กต์ Android เพื่อหาข้อบกพร่องที่อาจเกิดขึ้นและปรับปรุงการเพิ่มประสิทธิภาพเพื่อเพิ่มความถูกต้อง ความปลอดภัย ประสิทธิภาพ ความสามารถในการใช้งาน การช่วยเหลือพิเศษ และการแปลเป็นภาษาต่างๆ เมื่อใช้ Android Studio ระบบจะเรียกใช้การตรวจสอบ Lint และ IDE ที่กําหนดค่าไว้เมื่อคุณสร้างแอป อย่างไรก็ตาม คุณสามารถเรียกใช้การตรวจสอบด้วยตนเองหรือเรียกใช้ Lint จากบรรทัดคําสั่งตามที่อธิบายไว้ในหน้านี้

เครื่องมือ Lint ในตัวจะตรวจสอบโค้ดขณะที่คุณใช้ Android Studio คุณดูคำเตือนและข้อผิดพลาดได้ 2 วิธีดังนี้

  • เป็นข้อความป๊อปอัปในหน้าต่างเครื่องมือแก้ไข เมื่อ Lint พบปัญหา ก็จะไฮไลต์โค้ดที่เป็นปัญหาเป็นสีเหลือง สำหรับปัญหาร้ายแรงกว่านั้น ระบบจะขีดเส้นใต้โค้ดด้วยสีแดง
  • ในหน้าต่างผลการตรวจสอบของ Lint เมื่อคุณคลิกโค้ด > ตรวจสอบโค้ด

หมายเหตุ: เมื่อคอมไพล์โค้ดใน Android Studio ระบบจะเรียกใช้การตรวจสอบโค้ด IntelliJ เพิ่มเติมเพื่อปรับปรุงการตรวจสอบโค้ด อัปเดต Android Studio เป็นเวอร์ชันล่าสุดอยู่เสมอเพื่อให้แน่ใจว่ามีกฎและการตรวจสอบ lint เวอร์ชันล่าสุด

รูปที่ 1 แสดงวิธีที่เครื่องมือ Lint ประมวลผลไฟล์ซอร์สโค้ดของแอป

เวิร์กโฟลว์การสแกนโค้ดด้วยเครื่องมือ Lint
รูปที่ 1 เวิร์กโฟลว์การสแกนโค้ดด้วยเครื่องมือ Lint
ไฟล์ต้นทางของแอป
ไฟล์ต้นฉบับประกอบด้วยไฟล์ต่างๆ ที่ประกอบกันเป็นโปรเจ็กต์ Android ซึ่งรวมถึงไฟล์ Kotlin, Java และ XML, ไอคอน และไฟล์การกำหนดค่า ProGuard
lint.xml ไฟล์
ไฟล์การกําหนดค่าที่คุณสามารถใช้เพื่อระบุการตรวจสอบ Lint ที่ต้องการยกเว้น และปรับแต่งระดับความรุนแรงของปัญหา
เครื่องมือ Lint
เครื่องมือสแกนโค้ดแบบคงที่ที่คุณเรียกใช้ได้ในโปรเจ็กต์ Android จากบรรทัดคำสั่งหรือใน Android Studio เครื่องมือ Lint จะตรวจหาปัญหาเกี่ยวกับโครงสร้างโค้ดที่อาจส่งผลต่อคุณภาพและประสิทธิภาพของแอป Android
ผลการตรวจสอบโค้ดที่ขัดข้อง
คุณสามารถดูผลลัพธ์จาก Lint ได้ในคอนโซลหรือหน้าต่างผลการตรวจสอบใน Android Studio หากคุณเรียกใช้ lint จากบรรทัดคำสั่ง ระบบจะเขียนผลลัพธ์ลงในโฟลเดอร์ build/ ดูรายละเอียดเพิ่มเติมได้ที่ส่วนการตรวจสอบด้วยตนเอง

เรียกใช้ Lint จากบรรทัดคำสั่ง

หากคุณใช้ Android Studio หรือ Gradle ให้ใช้ Gradle wrapper เพื่อเรียกใช้งาน lint สำหรับโปรเจ็กต์โดยป้อนคำสั่งใดคำสั่งหนึ่งต่อไปนี้จากไดเรกทอรีรูทของโปรเจ็กต์

หมายเหตุ: อัปเดตปลั๊กอิน Android Gradle เป็นเวอร์ชันล่าสุดอยู่เสมอเพื่อใช้กฎ Lint เวอร์ชันล่าสุด

  • ใน Windows ให้ทำดังนี้
    gradlew lint
    
  • ใน Linux หรือ macOS ให้ทำดังนี้
    ./gradlew lint
    

คุณควรเห็นเอาต์พุตที่คล้ายกับตัวอย่างต่อไปนี้

> Task :app:lintDebug
Wrote HTML report to file:<path-to-project>/app/build/reports/lint-results-debug.html

เมื่อเครื่องมือ Lint ตรวจสอบเสร็จแล้ว เครื่องมือจะแสดงเส้นทางไปยังรายงาน Lint เวอร์ชัน XML และ HTML จากนั้นไปที่รายงาน HTML และเปิดในเบราว์เซอร์ ดังที่แสดงในรูปที่ 2

ตัวอย่างรายงานการดูแลรักษาโค้ด HTML
รูปที่ 2 ตัวอย่างรายงานการดูแลรักษาโค้ด HTML

หากโปรเจ็กต์มีตัวแปรการสร้าง เครื่องมือตรวจสอบโค้ดจะตรวจสอบเฉพาะตัวแปรเริ่มต้น หากต้องการเรียกใช้ Lint กับตัวแปรอื่น คุณต้องใส่ชื่อตัวแปรเป็นตัวพิมพ์ใหญ่และใส่ lint ไว้หน้าชื่อ

./gradlew lintRelease

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

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้งาน Gradle จากบรรทัดคำสั่ง โปรดอ่านหัวข้อสร้างแอปจากบรรทัดคำสั่ง

เรียกใช้ Lint โดยใช้เครื่องมือแบบสแตนด์อโลน

หากคุณไม่ได้ใช้ Android Studio หรือ Gradle ให้ติดตั้งเครื่องมือบรรทัดคำสั่ง Android SDK เพื่อใช้เครื่องมือ Lint แบบสแตนด์อโลน ค้นหาเครื่องมือตรวจโค้ดรก ได้ที่ android_sdk/cmdline-tools/version/bin/lint

หมายเหตุ: หากพยายามเรียกใช้เครื่องมือแบบสแตนด์อโลนในโปรเจ็กต์ Gradle ระบบจะแสดงข้อผิดพลาด คุณควรใช้ gradle lint (ใน Windows) หรือ ./gradlew lint (ใน macOS หรือ Linux) เพื่อเรียกใช้ Lint ในโปรเจ็กต์ Gradle เสมอ

หากต้องการเรียกใช้ Lint กับรายการไฟล์ในไดเรกทอรีโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้

lint [flags] <project directory>

เช่น คุณสามารถออกคำสั่งต่อไปนี้เพื่อสแกนไฟล์ในไดเรกทอรี myproject และไดเรกทอรีย่อย รหัสปัญหา MissingPrefix บอกให้ Lint สแกนหาเฉพาะแอตทริบิวต์ XML ที่ไม่มีคำนำหน้าเนมสเปซ Android

lint --check MissingPrefix myproject 

หากต้องการดูรายการธงและอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดที่เครื่องมือรองรับ ให้ใช้คำสั่งต่อไปนี้

lint --help

ตัวอย่างต่อไปนี้แสดงเอาต์พุตคอนโซลเมื่อเรียกใช้คำสั่ง lint กับโปรเจ็กต์ชื่อ Earthquake

$ lint Earthquake

Scanning Earthquake: ...............................................................................................................................
Scanning Earthquake (Phase 2): .......
AndroidManifest.xml:23: Warning: <uses-sdk> tag appears after <application> tag [ManifestOrder]
  <uses-sdk android:minSdkVersion="7" />
  ^
AndroidManifest.xml:23: Warning: <uses-sdk> tag should specify a target API level (the highest verified version; when running on later versions, compatibility behaviors may be enabled) with android:targetSdkVersion="?" [UsesMinSdkAttributes]
  <uses-sdk android:minSdkVersion="7" />
  ^
res/layout/preferences.xml: Warning: The resource R.layout.preferences appears to be unused [UnusedResources]
res: Warning: Missing density variation folders in res: drawable-xhdpi [IconMissingDensityFolder]
0 errors, 4 warnings

เอาต์พุตตัวอย่างแสดงคําเตือน 4 รายการและไม่มีข้อผิดพลาด

คำเตือน 2 รายการที่เกี่ยวข้องกับไฟล์ AndroidManifest.xml ของโปรเจ็กต์

  • ManifestOrder
  • UsesMinSdkAttributes
คำเตือน 1 รายการเกี่ยวข้องกับไฟล์เลย์เอาต์ Preferences.xml: UnusedResources

คำเตือน 1 รายการเกี่ยวข้องกับไดเรกทอรี res ดังนี้ IconMissingDensityFolder

กำหนดค่า Lint เพื่อระงับคำเตือน

โดยค่าเริ่มต้น เมื่อคุณเรียกใช้การสแกน Lint เครื่องมือจะตรวจหาปัญหาทั้งหมดที่ Lint รองรับ นอกจากนี้ คุณยังจำกัดปัญหาที่จะให้ Lint ตรวจสอบและกำหนดระดับความรุนแรงของปัญหาได้ด้วย เช่น คุณสามารถระงับการตรวจสอบ Lint สำหรับปัญหาบางอย่างที่ไม่เกี่ยวข้องกับโปรเจ็กต์ และกำหนดค่า Lint ให้รายงานปัญหาที่ไม่ร้ายแรงในระดับความรุนแรงที่ต่ำลงได้

ระดับความรุนแรงมีดังนี้

  • enable
  • disable หรือ ignore
  • informational
  • warning
  • error
  • fatal

คุณกำหนดค่าการตรวจสอบโปรแกรมแก้ไขโค้ดระดับต่างๆ ได้ดังนี้

  • ทั่วโลก (ทั้งโปรเจ็กต์)
  • โมดูลโปรเจ็กต์
  • โมดูลเวอร์ชันที่ใช้งานจริง
  • โมดูลทดสอบ
  • เปิดไฟล์
  • ลําดับชั้นของคลาส
  • ขอบเขตระบบควบคุมเวอร์ชัน (VCS)

กำหนดค่าไฟล์ Lint

คุณระบุค่ากําหนดในการตรวจสอบ Lint ได้ในไฟล์ lint.xml หากคุณสร้างไฟล์นี้ด้วยตนเอง ให้วางไฟล์ไว้ในไดเรกทอรีรูทของโปรเจ็กต์ Android

ไฟล์ lint.xml ประกอบด้วยแท็กหลัก <lint> ที่ล้อมรอบซึ่งมีองค์ประกอบย่อย <issue> อย่างน้อย 1 รายการ Lint จะกําหนดค่าแอตทริบิวต์ id ที่ไม่ซ้ำกันสําหรับ <issue> แต่ละรายการ ดังนี้

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- list of issues to configure -->
</lint>

หากต้องการเปลี่ยนระดับความรุนแรงของปัญหาหรือปิดใช้การตรวจสอบ Lint สำหรับปัญหา ให้ตั้งค่าแอตทริบิวต์ความรุนแรงในแท็ก <issue>

เคล็ดลับ: หากต้องการดูรายการปัญหาทั้งหมดที่ Lint รองรับและรหัสปัญหาที่เกี่ยวข้อง ให้เรียกใช้คำสั่ง lint --list

ตัวอย่างไฟล์ lint.xml

ตัวอย่างต่อไปนี้แสดงเนื้อหาของไฟล์ lint.xml

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the IconMissingDensityFolder check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore" />

    <!-- Ignore the ObsoleteLayoutParam issue in the specified files -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml" />
        <ignore path="res/layout-xlarge/activation.xml" />
    </issue>

    <!-- Ignore the UselessLeaf issue in the specified file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>

    <!-- Change the severity of hardcoded strings to "error" -->
    <issue id="HardcodedText" severity="error" />
</lint>

ตัวอย่างนี้แสดงวิธีรายงานปัญหาประเภทต่างๆ ระบบจะปิดใช้การตรวจสอบ IconMissingDensityFolder ทั้งหมด และปิดใช้การตรวจสอบ ObsoleteLayoutParam ในไฟล์ที่ระบุไว้ในประกาศ <ignore ... /> ที่แนบมาเท่านั้น

กำหนดค่าการตรวจสอบ Lint สำหรับไฟล์ต้นฉบับ Kotlin, Java และ XML

คุณปิดการตรวจสอบ Lint สำหรับไฟล์ต้นฉบับ Kotlin, Java และ XML ได้ในการโต้ตอบค่ากำหนด ดังนี้

  1. เลือกไฟล์ > การตั้งค่า (ใน Windows) หรือ Android Studio > ค่ากําหนด (ใน macOS หรือ Linux)
  2. เลือกเครื่องมือแก้ไข > การตรวจสอบ
  3. หากต้องการปิดใช้ ให้ยกเลิกการเลือกไฟล์ต้นฉบับที่เหมาะสม

คุณตั้งค่าเหล่านี้สำหรับ IDE หรือสำหรับโปรเจ็กต์แต่ละรายการได้โดยการเลือกโปรไฟล์ที่เหมาะสม

กำหนดค่าการตรวจสอบ Lint ใน Java หรือ Kotlin

หากต้องการปิดใช้การตรวจสอบ Lint สำหรับคลาสหรือเมธอดในโปรเจ็กต์ Android โดยเฉพาะ ให้เพิ่มคำอธิบายประกอบ @SuppressLint ลงในโค้ดนั้น

ตัวอย่างต่อไปนี้แสดงวิธีปิดการตรวจสอบ Lint สําหรับNewApiปัญหาในเมธอด onCreate เครื่องมือ Lint จะยังคงตรวจสอบปัญหา NewApi ในเมธอดอื่นๆ ของคลาสนี้ต่อไป

Kotlin

@SuppressLint("NewApi")
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

Java

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

ซึ่งการดำเนินการเดียวกันนี้ทำได้ใน Composable ใดก็ได้ ข้อมูลโค้ดต่อไปนี้แสดงวิธีปิดการตรวจสอบ NewApi ใน Composable

Kotlin

  @SuppressLint("NewApi")
  @Composable
  fun MyComposable{
    ...
  }
  

ตัวอย่างต่อไปนี้แสดงวิธีปิดการตรวจสอบ Lint สําหรับParserError ปัญหาในคลาส FeedProvider

Kotlin

@SuppressLint("ParserError")
class FeedProvider : ContentProvider() {

Java

@SuppressLint("ParserError")
public class FeedProvider extends ContentProvider {

หากต้องการระงับการตรวจสอบปัญหาเกี่ยวกับ Lint ทั้งหมดในไฟล์ ให้ใช้คีย์เวิร์ด all ดังนี้

Kotlin

@SuppressLint("all")

Java

@SuppressLint("all")

คุณใช้คำอธิบายประกอบเดียวกันเพื่อระงับการตรวจสอบ Lint ในฟังก์ชัน Composable ใดก็ได้

กำหนดค่าการตรวจสอบโปรแกรมแก้ไขโค้ดใน XML

ใช้แอตทริบิวต์ tools:ignore เพื่อปิดการตรวจสอบ Lint สำหรับส่วนต่างๆ ของไฟล์ XML ใส่ค่าเนมสเปซต่อไปนี้ในไฟล์ lint.xml เพื่อให้เครื่องมือ Lint จดจำแอตทริบิวต์ได้

namespace xmlns:tools="http://schemas.android.com/tools"

ตัวอย่างต่อไปนี้แสดงวิธีปิดการตรวจสอบ Lint สำหรับปัญหา UnusedResources ในองค์ประกอบ <LinearLayout> ของไฟล์เลย์เอาต์ XML องค์ประกอบย่อยขององค์ประกอบหลักที่มีการประกาศแอตทริบิวต์ ignore จะรับค่าแอตทริบิวต์นั้น ในตัวอย่างนี้ ระบบจะปิดใช้การตรวจสอบ Lint สําหรับองค์ประกอบ <TextView> ย่อยด้วย

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="UnusedResources" >

    <TextView
        android:text="@string/auto_update_prompt" />
</LinearLayout>

หากต้องการปิดใช้ปัญหามากกว่า 1 รายการ ให้ระบุปัญหาที่ต้องการปิดใช้เป็นสตริงที่คั่นด้วยคอมมา เช่น

tools:ignore="NewApi,StringFormatInvalid"

หากต้องการระงับการตรวจสอบปัญหาเกี่ยวกับ Lint ทั้งหมดในองค์ประกอบ XML ให้ใช้คีย์เวิร์ด all ดังนี้

tools:ignore="all"

กำหนดค่าตัวเลือก Lint ด้วย Gradle

ปลั๊กอิน Android Gradle ช่วยให้คุณกำหนดค่าตัวเลือกบางอย่างของ Lint ได้ เช่น การตรวจสอบที่จะเรียกใช้หรือละเว้น โดยใช้บล็อก lint{} ในไฟล์ build.gradle ระดับโมดูล

ข้อมูลโค้ดต่อไปนี้แสดงพร็อพเพอร์ตี้บางส่วนที่คุณกําหนดค่าได้

Kotlin

android {
    ...
    lint {
        // Turns off checks for the issue IDs you specify.
        disable += "TypographyFractions" + "TypographyQuotes"
        // Turns on checks for the issue IDs you specify. These checks are in
        // addition to the default lint checks.
        enable += "RtlHardcoded" + "RtlCompat" + "RtlEnabled"
        // To enable checks for only a subset of issue IDs and ignore all others,
        // list the issue IDs with the 'check' property instead. This property overrides
        // any issue IDs you enable or disable using the properties above.
        checkOnly += "NewApi" + "InlinedApi"
        // If set to true, turns off analysis progress reporting by lint.
        quiet = true
        // If set to true (default), stops the build if errors are found.
        abortOnError = false
        // If set to true, lint only reports errors.
        ignoreWarnings = true
        // If set to true, lint also checks all dependencies as part of its analysis.
        // Recommended for projects consisting of an app with library dependencies.
        checkDependencies = true
    }
}
...

Groovy

android {
    ...
    lint {
        // Turns off checks for the issue IDs you specify.
        disable 'TypographyFractions','TypographyQuotes'
        // Turns on checks for the issue IDs you specify. These checks are in
        // addition to the default lint checks.
        enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
        // To enable checks for only a subset of issue IDs and ignore all others,
        // list the issue IDs with the 'check' property instead. This property overrides
        // any issue IDs you enable or disable using the properties above.
        checkOnly 'NewApi', 'InlinedApi'
        // If set to true, turns off analysis progress reporting by lint.
        quiet true
        // If set to true (default), stops the build if errors are found.
        abortOnError false
        // If set to true, lint only reports errors.
        ignoreWarnings true
        // If set to true, lint also checks all dependencies as part of its analysis.
        // Recommended for projects consisting of an app with library dependencies.
        checkDependencies true
    }
}
...

วิธีการ lint ทั้งหมดที่ลบล้างระดับความรุนแรงที่ระบุของปัญหาจะเป็นไปตามลําดับการกําหนดค่า เช่น การตั้งค่าปัญหาเป็นร้ายแรงใน finalizeDsl() จะลบล้างการปิดใช้ปัญหาใน DSL หลัก

สร้างเส้นฐานคําเตือน

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

หากต้องการสร้างภาพรวมพื้นฐาน ให้แก้ไขไฟล์ build.gradle ของโปรเจ็กต์ดังนี้

Kotlin

android {
    lint {
        baseline = file("lint-baseline.xml")
    }
}

Groovy

android {
    lintOptions {
        baseline file("lint-baseline.xml")
    }
}

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

จากนั้นเรียกใช้ Lint จาก IDE โดยเลือกโค้ด > ตรวจสอบโค้ด หรือจากบรรทัดคำสั่ง ดังนี้ เอาต์พุตจะแสดงตำแหน่งของไฟล์ lint-baseline.xml ตำแหน่งไฟล์สำหรับการตั้งค่าของคุณอาจแตกต่างจากที่แสดงที่นี่

$ ./gradlew lintDebug -Dlint.baselines.continue=true
...
Wrote XML report to file:///app/lint-baseline.xml
Created baseline file /app/lint-baseline.xml

การเรียกใช้ lint จะบันทึกปัญหาทั้งหมดที่เกิดขึ้นในปัจจุบันไว้ในไฟล์ lint-baseline.xml ชุดปัญหาปัจจุบันเรียกว่าเส้นฐาน คุณสามารถตรวจสอบไฟล์ lint-baseline.xml ในการควบคุมเวอร์ชันได้หากต้องการแชร์กับผู้อื่น

ปรับแต่งเส้นฐาน

หากต้องการเพิ่มเฉพาะปัญหาบางประเภทลงในเส้นฐาน ให้ระบุปัญหาที่จะเพิ่มโดยการแก้ไขไฟล์ build.gradle ของโปรเจ็กต์ ดังนี้

Kotlin

android {
    lint {
        checkOnly += "NewApi" + "HandlerLeak"
        baseline = file("lint-baseline.xml")
    }
}

Groovy

android {
    lintOptions {
        checkOnly 'NewApi', 'HandlerLeak'
        baseline file("lint-baseline.xml")
    }
}

หากคุณเพิ่มคำเตือนใหม่ลงในโค้ดเบสหลังจากสร้างบรรทัดฐานแล้ว Lint จะแสดงเฉพาะข้อบกพร่องที่พบใหม่

คำเตือนเกี่ยวกับพื้นฐาน

เมื่อใช้เส้นฐานอยู่ คุณจะได้รับคำเตือนที่ให้ข้อมูลซึ่งแจ้งว่าระบบกรองปัญหาอย่างน้อย 1 รายการออกแล้วเนื่องจากปัญหาดังกล่าวอยู่ในเส้นฐาน คำเตือนนี้ช่วยให้คุณทราบว่าคุณได้กําหนดค่าพื้นฐานแล้ว และจําเป็นต้องแก้ไขปัญหาทั้งหมดในบางจุด

คำเตือนที่ให้ข้อมูลนี้จะติดตามปัญหาที่ไม่มีการรายงานอีกต่อไปด้วย ข้อมูลนี้จะช่วยให้คุณทราบว่าได้แก้ไขปัญหาแล้วจริงๆ หรือไม่ คุณจึงสร้างเส้นฐานอีกครั้งเพื่อป้องกันไม่ให้เกิดข้อผิดพลาดขึ้นอีกได้

หมายเหตุ: ระบบจะเปิดใช้เส้นฐานเมื่อคุณเรียกใช้การตรวจสอบในโหมดแบทช์ใน IDE แต่จะไม่สนใจเส้นฐานสำหรับการตรวจสอบในเครื่องมือแก้ไขที่ทำงานอยู่เบื้องหลังเมื่อคุณแก้ไขไฟล์ เนื่องจากเบสไลน์มีไว้สำหรับกรณีที่โค้ดเบสมีคำเตือนจำนวนมากอยู่แล้ว แต่คุณต้องการแก้ไขปัญหาในเครื่องขณะแก้ไขโค้ด

เรียกใช้การตรวจสอบด้วยตนเอง

หากต้องการเรียกใช้ Lint ที่กําหนดค่าไว้และการตรวจสอบ IDE อื่นๆ ด้วยตนเอง ให้เลือกโค้ด > ตรวจสอบโค้ด ผลการตรวจสอบจะปรากฏในหน้าต่างผลการตรวจสอบ

ตั้งค่าขอบเขตและโปรไฟล์การตรวจสอบ

เลือกไฟล์ที่ต้องการวิเคราะห์ (ขอบเขตการตรวจสอบ) และการตรวจสอบที่ต้องการเรียกใช้ (โปรไฟล์การตรวจสอบ) ดังนี้

  1. ในมุมมอง Android ให้เปิดโปรเจ็กต์แล้วเลือกโปรเจ็กต์ โฟลเดอร์ หรือไฟล์ที่ต้องการวิเคราะห์
  2. จากแถบเมนู ให้เลือกโค้ด > ตรวจสอบโค้ด
  3. ตรวจสอบการตั้งค่าในกล่องโต้ตอบระบุขอบเขตการตรวจสอบ

    ตรวจสอบการตั้งค่าขอบเขตการตรวจสอบ
    รูปที่ 3 ตรวจสอบการตั้งค่าขอบเขตการตรวจสอบ

    ตัวเลือกที่ปรากฏในกล่องโต้ตอบระบุขอบเขตการตรวจสอบจะแตกต่างกันไปโดยขึ้นอยู่กับว่าคุณเลือกโปรเจ็กต์ โฟลเดอร์ หรือไฟล์

    • เมื่อคุณเลือกโปรเจ็กต์ ไฟล์ หรือไดเรกทอรีรายการเดียว กล่องโต้ตอบระบุขอบเขตการตรวจสอบจะแสดงเส้นทางไปยังโปรเจ็กต์ ไฟล์ หรือไดเรกทอรีที่คุณเลือก
    • เมื่อเลือกโปรเจ็กต์ ไฟล์ หรือไดเรกทอรีมากกว่า 1 รายการ กล่องโต้ตอบระบุขอบเขตการตรวจสอบจะแสดงปุ่มตัวเลือกที่เลือกสำหรับไฟล์ที่เลือก

    หากต้องการเปลี่ยนสิ่งที่ต้องตรวจสอบ ให้เลือกปุ่มตัวเลือกอื่น ดูคำอธิบายของช่องที่เป็นไปได้ทั้งหมดในกล่องโต้ตอบระบุขอบเขตการตรวจสอบได้ที่กล่องโต้ตอบระบุขอบเขตการตรวจสอบ

  4. ในส่วนโปรไฟล์การตรวจสอบ ให้เลือกโปรไฟล์ที่ต้องการใช้
  5. คลิกตกลงเพื่อเรียกใช้การตรวจสอบ

    รูปที่ 4 แสดงผลลัพธ์จากการตรวจสอบ Lint และ IDE อื่นๆ จากการเรียกใช้ตรวจสอบโค้ด

    เลือกปัญหาเพื่อดูวิธีแก้ปัญหา
    รูปที่ 4 ผลการตรวจสอบ เลือกปัญหาเพื่อดูวิธีแก้ปัญหา
  6. ในแผงผลการตรวจสอบ ให้ดูผลการตรวจสอบโดยการขยายและเลือกหมวดหมู่ ข้อผิดพลาด ประเภท หรือปัญหา

    แผงรายงานการตรวจสอบจะแสดงรายงานการตรวจสอบสำหรับหมวดหมู่ ข้อผิดพลาด ประเภท หรือปัญหาที่เลือกในแผงผลการตรวจสอบ และแสดงชื่อและตำแหน่งของข้อผิดพลาด รายงานการตรวจสอบจะแสดงข้อมูลอื่นๆ เช่น ข้อมูลสรุปปัญหา เพื่อช่วยคุณแก้ไขปัญหา (หากมี)

  7. ในมุมมองแผนภูมิต้นไม้ของแผงผลการตรวจสอบ ให้คลิกขวาที่หมวดหมู่ ประเภท หรือปัญหาเพื่อแสดงเมนูตามบริบท

    คุณทำสิ่งต่อไปนี้ได้ ทั้งนี้ขึ้นอยู่กับบริบท

    • ข้ามไปยังแหล่งที่มา
    • ยกเว้นและรวมรายการที่เลือก
    • ระงับปัญหา
    • แก้ไขการตั้งค่า
    • จัดการการแจ้งเตือนการตรวจสอบ
    • เรียกใช้การตรวจสอบอีกครั้ง

โปรดดูคำอธิบายของปุ่มในแถบเครื่องมือ รายการในเมนูตามบริบท และช่องในรายงานการตรวจสอบที่หัวข้อ หน้าต่างเครื่องมือผลการตรวจสอบ

ใช้ขอบเขตที่กำหนดเอง

ใช้ขอบเขตที่กำหนดเองรายการใดรายการหนึ่งที่มีให้ใน Android Studio ดังนี้

  1. ในกล่องโต้ตอบระบุขอบเขตการตรวจสอบ ให้เลือกขอบเขตที่กำหนดเอง
  2. คลิกรายการขอบเขตที่กําหนดเองเพื่อแสดงตัวเลือก

    เลือกขอบเขตการตรวจสอบที่ต้องการใช้
    รูปที่ 5 เลือกขอบเขตที่กำหนดเองที่ต้องการใช้
    • ทุกตำแหน่ง: ไฟล์ทั้งหมด
    • ไฟล์โปรเจ็กต์: ไฟล์ทั้งหมดในโปรเจ็กต์ปัจจุบัน
    • ไฟล์ต้นฉบับของโปรเจ็กต์: เฉพาะไฟล์ต้นฉบับในโปรเจ็กต์ปัจจุบัน
    • ไฟล์เวอร์ชันที่ใช้งานจริงของโปรเจ็กต์: เฉพาะไฟล์เวอร์ชันที่ใช้งานจริงในโปรเจ็กต์ปัจจุบัน
    • ไฟล์ทดสอบของโปรเจ็กต์: เฉพาะไฟล์ทดสอบในโปรเจ็กต์ปัจจุบัน
    • ไฟล์ทดสอบและคอนโซล: เฉพาะไฟล์ทดสอบและคอนโซลที่คุณเปิดอยู่ในโปรเจ็กต์ปัจจุบัน
    • ไฟล์ที่ดูล่าสุด: เฉพาะไฟล์ที่ดูล่าสุดในโปรเจ็กต์ปัจจุบัน
    • ไฟล์ปัจจุบัน: เฉพาะไฟล์ปัจจุบันในโปรเจ็กต์ปัจจุบัน ปรากฏขึ้นเมื่อคุณเลือกไฟล์หรือโฟลเดอร์
    • ไดเรกทอรีที่เลือก: โฟลเดอร์ปัจจุบันในโปรเจ็กต์ปัจจุบันเท่านั้น ปรากฏขึ้นเมื่อคุณเลือกโฟลเดอร์
    • ลําดับชั้นของคลาส: เมื่อเลือกตัวเลือกนี้และคลิกตกลง กล่องโต้ตอบจะปรากฏขึ้นพร้อมชั้นเรียนทั้งหมดในโปรเจ็กต์ปัจจุบัน ในกล่องโต้ตอบ ให้ใช้ช่องค้นหาตามชื่อเพื่อกรองและเลือกคลาสที่จะตรวจสอบ หากคุณไม่ได้กรองรายการชั้นเรียน การตรวจสอบโค้ดจะตรวจสอบชั้นเรียนทั้งหมด
  3. หากคุณกำหนดค่า VCS สำหรับโปรเจ็กต์ไว้ ก็จะมีตัวเลือกในการจำกัดการค้นหาให้แสดงเฉพาะไฟล์ที่มีการแก้ไข

  4. คลิกตกลง

สร้างขอบเขตที่กําหนดเอง

เมื่อต้องการตรวจสอบไฟล์และไดเรกทอรีที่เลือกซึ่งไม่อยู่ในขอบเขตที่กำหนดเองที่มีอยู่ คุณสามารถสร้างขอบเขตที่กำหนดเองได้โดยทำดังนี้

  1. ในกล่องโต้ตอบระบุขอบเขตการตรวจสอบ ให้เลือกขอบเขตที่กำหนดเอง
  2. คลิกจุด 3 จุดหลังรายการขอบเขตที่กำหนดเอง

    กล่องโต้ตอบระบุขอบเขตการตรวจสอบ
    รูปที่ 6 กล่องโต้ตอบระบุขอบเขตการตรวจสอบ

    กล่องโต้ตอบขอบเขตจะปรากฏขึ้น

    สร้างขอบเขตที่กําหนดเอง
    รูปที่ 7 สร้างขอบเขตที่กําหนดเอง
  3. คลิกปุ่ม ที่มุมบนซ้ายของกล่องโต้ตอบเพื่อกําหนดขอบเขตใหม่
  4. เลือกภายในองค์กรในรายการเพิ่มขอบเขตที่ปรากฏขึ้น

    ระบบจะใช้ทั้งขอบเขตภายในและขอบเขตที่แชร์ภายในโปรเจ็กต์สำหรับฟีเจอร์ตรวจสอบโค้ด นอกจากนี้ คุณยังใช้ขอบเขตที่แชร์กับฟีเจอร์อื่นๆ ของโปรเจ็กต์ที่มีช่องขอบเขตได้ด้วย ตัวอย่างเช่น เมื่อคลิกแก้ไขการตั้งค่า เพื่อเปลี่ยนการตั้งค่าค้นหาการใช้งาน กล่องโต้ตอบที่ปรากฏจะมีช่องขอบเขตที่คุณสามารถเลือกขอบเขตที่แชร์ได้

    เลือกขอบเขตที่แชร์จากกล่องโต้ตอบ &quot;ค้นหาการใช้งาน&quot;
    รูปที่ 8 เลือกขอบเขตที่แชร์จากกล่องโต้ตอบค้นหาการใช้งาน
  5. ตั้งชื่อขอบเขต แล้วคลิกตกลง

    แผงด้านขวาของกล่องโต้ตอบขอบเขตจะแสดงตัวเลือกที่ช่วยให้คุณกําหนดขอบเขตที่กําหนดเองได้

  6. เลือกโปรเจ็กต์จากรายการ

    รายการโปรเจ็กต์ที่ใช้ได้จะปรากฏขึ้น

    หมายเหตุ: คุณสร้างขอบเขตที่กำหนดเองสำหรับโปรเจ็กต์หรือแพ็กเกจได้ ขั้นตอนจะเหมือนกัน

  7. ขยายโฟลเดอร์โปรเจ็กต์ เลือกสิ่งที่ต้องการเพิ่มลงในขอบเขตที่กำหนดเอง แล้วเลือกว่าจะรวมหรือยกเว้นโฟลเดอร์นั้น

    กำหนดขอบเขตที่กำหนดเอง
    รูปที่ 9 กําหนดขอบเขตที่กําหนดเอง
    • รวม: รวมโฟลเดอร์นี้และไฟล์ในโฟลเดอร์ แต่จะไม่รวมโฟลเดอร์ย่อย
    • รวมแบบซ้ำ: รวมโฟลเดอร์นี้และไฟล์ในโฟลเดอร์ รวมถึงโฟลเดอร์ย่อยและไฟล์ในโฟลเดอร์ย่อย
    • ยกเว้น: ยกเว้นโฟลเดอร์นี้และไฟล์ในโฟลเดอร์ แต่ไม่ยกเว้นโฟลเดอร์ย่อย
    • ยกเว้นแบบตามลําดับชั้น: ยกเว้นโฟลเดอร์นี้และไฟล์ในโฟลเดอร์ รวมถึงโฟลเดอร์ย่อยและไฟล์ในโฟลเดอร์ย่อย

    รูปที่ 10 แสดงว่ารวมโฟลเดอร์ main แล้ว และรวมโฟลเดอร์ java และ res แบบซ้ำ สีน้ำเงินหมายถึงโฟลเดอร์ที่รวมอยู่บางส่วน และสีเขียวหมายถึงโฟลเดอร์และไฟล์ที่รวมอยู่แบบซ้ำ

    ตัวอย่างรูปแบบสําหรับขอบเขตที่กําหนดเอง
    รูปที่ 10 ตัวอย่างรูปแบบสําหรับขอบเขตที่กําหนดเอง
    • หากคุณเลือกโฟลเดอร์ java แล้วคลิกยกเว้นแบบตามลำดับ การไฮไลต์สีเขียวจะหายไปจากโฟลเดอร์ java รวมถึงโฟลเดอร์และไฟล์ทั้งหมดที่อยู่ภายใต้โฟลเดอร์ดังกล่าว
    • หากเลือกไฟล์ MainActivity.kt ที่ไฮไลต์สีเขียวแล้วคลิกยกเว้น ไฟล์ MainActivity.kt จะไม่ไฮไลต์เป็นสีเขียวอีกต่อไป แต่ไฟล์อื่นๆ ทั้งหมดในโฟลเดอร์ java จะยังคงไฮไลต์เป็นสีเขียว
  8. คลิกตกลง ขอบเขตที่กําหนดเองจะปรากฏที่ด้านล่างของรายการ

ตรวจสอบและแก้ไขโปรไฟล์การตรวจสอบ

Android Studio มีโปรไฟล์การตรวจสอบ Lint และโปรไฟล์การตรวจสอบอื่นๆ ที่อัปเดตผ่านการอัปเดต Android คุณสามารถใช้โปรไฟล์เหล่านี้ตามที่เป็นอยู่ หรือจะแก้ไขชื่อ คำอธิบาย ความรุนแรง และขอบเขตก็ได้ นอกจากนี้ คุณยังเปิดใช้งานและปิดใช้งานทั้งกลุ่มโปรไฟล์หรือโปรไฟล์แต่ละรายการภายในกลุ่มได้ด้วย

วิธีเข้าถึงการตั้งค่าการตรวจสอบ

  1. เลือกไฟล์ > การตั้งค่า (ใน Windows) หรือ Android Studio > ค่ากําหนด (ใน macOS หรือ Linux)
  2. เลือกเครื่องมือแก้ไข > การตรวจสอบ
  3. แผงการตรวจสอบจะแสดงรายการการตรวจสอบที่รองรับและคําอธิบาย

    การตรวจสอบที่รองรับและคําอธิบาย
    รูปที่ 11 การตรวจสอบที่รองรับและคำอธิบาย
  4. เลือกรายการโปรไฟล์เพื่อสลับระหว่างการตรวจสอบเริ่มต้น (Android Studio) กับเริ่มต้นของโปรเจ็กต์ (โปรเจ็กต์ที่ใช้งานอยู่)

    ดูข้อมูลเพิ่มเติมได้ที่หน้าจัดการโปรไฟล์ของ IntelliJ

  5. ในรายการการตรวจสอบในแผงด้านซ้าย ให้เลือกหมวดหมู่โปรไฟล์ระดับบนสุด หรือขยายกลุ่มและเลือกโปรไฟล์ที่ต้องการ

    เมื่อเลือกหมวดหมู่โปรไฟล์ คุณจะแก้ไขการตรวจสอบทั้งหมดในหมวดหมู่นั้นเป็นการสํารวจเดียวได้

  6. เลือกรายการแสดงการดำเนินการกับสคีมา แสดงไอคอนการดำเนินการของสคีมา เพื่อคัดลอก เปลี่ยนชื่อ เพิ่มรายละเอียด ส่งออก และนําเข้าการตรวจสอบ
  7. เมื่อเสร็จแล้ว ให้คลิกตกลง