Cải thiện mã bằng quá trình kiểm tra tìm lỗi mã nguồn

Ngoài việc xây dựng các quy trình kiểm thử để đảm bảo ứng dụng của bạn đáp ứng các yêu cầu về chức năng, bạn cũng phải chạy mã thông qua công cụ tìm lỗi mã nguồn để đảm bảo rằng mã của bạn không gặp vấn đề về cấu trúc. Công cụ tìm lỗi mã nguồn sẽ giúp tìm những đoạn mã có cấu trúc kém, có thể ảnh hưởng đến độ tin cậy và tính hiệu quả của ứng dụng Android cũng như làm cho việc bảo trì mã trở nên khó khăn hơn. Bạn nên khắc phục triệt để các lỗi được công cụ tìm lỗi mã nguồn phát hiện trước khi xuất bản ứng dụng.

Ví dụ: nếu các tệp tài nguyên XML chứa các không gian tên không còn dùng đến, việc này sẽ gây lãng phí dung lượng và đòi hỏi những công đoạn xử lý không cần thiết. Các vấn đề về cấu trúc khác, chẳng hạn như sử dụng các thành phần không dùng nữa hoặc các lệnh gọi API không được các phiên bản API mục tiêu hỗ trợ nữa, có thể làm mã nguồn chạy không chính xác. Công cụ tìm lỗi mã nguồn có thể giúp bạn giải quyết những vấn đề này.

Để cải thiện hiệu suất tìm lỗi mã nguồn, bạn cũng có thể thêm chú thích vào đoạn mã của mình.

Tổng quan

Android Studio cung cấp một công cụ trình quét mã có tên là lint (tìm lỗi mã nguồn), giúp bạn nhận diện và khắc phục các vấn đề liên quan đến chất lượng cấu trúc của mã mà không cần phải thực thi ứng dụng hoặc viết các trường hợp kiểm thử. Mỗi khi phát hiện một vấn đề nào đó, công cụ này sẽ gửi một báo cáo gồm các thông báo mô tả nội dung và mức độ nghiêm trọng của vấn đề, giúp bạn nhanh xác định mức độ ưu tiên để tiến hành những bước cải tiến quan trọng. Bạn cũng có thể giảm mức độ nghiêm trọng của một vấn đề để bỏ qua các vấn đề không liên quan đến dự án, hoặc tăng mức độ nghiêm trọng để làm nổi bật các vấn đề cụ thể.

Công cụ tìm lỗi mã nguồn (lint tool) kiểm tra các tệp nguồn dự án Android để tìm ra các lỗi có thể xảy ra và cải thiện khả năng tối ưu hoá, nhằm đảm bảo tính chính xác, tính bảo mật, hiệu suất, khả năng hữu dụng, khả năng hỗ trợ tiếp cận và khả năng quốc tế hoá. Khi sử dụng Android Studio, công cụ tìm lỗi mã nguồn và các yêu cầu kiểm tra IDE sẽ được định cấu hình để chạy khi bạn tạo bản dựng ứng dụng. Tuy nhiên, bạn có thể chạy các yêu cầu kiểm tra theo cách thủ công hoặc chạy công cụ tìm lỗi mã nguồn bằng dòng lệnh, như mô tả trên trang này.

Công cụ tìm lỗi mã nguồn tích hợp sẵn sẽ kiểm tra mã trong quá trình bạn sử dụng Android Studio. Bạn có thể xem cảnh báo và lỗi theo hai cách:

  • Dưới dạng văn bản bật lên trong cửa sổ trình chỉnh sửa. Khi tìm thấy một vấn đề nào đó, công cụ tìm lỗi mã nguồn sẽ làm nổi bật đoạn mã có vấn đề đó bằng màu vàng. Đối với các vấn đề nghiêm trọng hơn, công cụ này sẽ gạch chân đoạn mã đó bằng màu đỏ.
  • Trong cửa sổ Inspection Results (Kết quả kiểm tra) của công cụ tìm lỗi mã nguồn sau khi bạn nhấp vào Code > Inspect Code (Mã > Kiểm tra mã).

Lưu ý: Khi biên dịch mã, Android Studio sẽ chạy các bước kiểm tra mã IntelliJ bổ sung sẽ để tinh giản hoá quá trình xem xét mã.

Hình 1 cho thấy cách công cụ tìm lỗi mã nguồn xử lý tệp nguồn của ứng dụng.

Quy trình quét mã bằng công cụ tìm lỗi mã nguồn.
Hình 1. Quy trình quét mã bằng công cụ tìm lỗi mã nguồn.
Tệp nguồn của ứng dụng
Các tệp nguồn này gồm có các tệp tạo nên dự án Android, bao gồm cả tệp Kotlin, Java, XML, biểu tượng và tệp cấu hình ProGuard.
Tệp lint.xml
Tệp cấu hình dùng để chỉ định các mục kiểm tra lỗi mã nguồn bạn muốn loại trừ và để tuỳ chỉnh các mức độ nghiêm trọng của vấn đề.
Công cụ tìm lỗi mã nguồn
Bạn có thể chạy công cụ quét mã tĩnh trên dự án Android bằng dòng lệnh hoặc trong Android Studio. Công cụ tìm lỗi mã nguồn sẽ kiểm tra các vấn đề về mã cấu trúc có thể ảnh hưởng đến chất lượng và hiệu suất của ứng dụng Android.
Kết quả kiểm tra lỗi mã nguồn
Bạn có thể xem kết quả kiểm tra lỗi mã nguồn trong bảng điều khiển hoặc trong cửa sổ Inspection Results (Kết quả kiểm tra) trong Android Studio. Nếu bạn chạy lint qua dòng lệnh, kết quả sẽ được ghi vào thư mục build/. Để biết thêm thông tin, hãy xem phần chạy yêu cầu kiểm tra theo cách thủ công.

Chạy công cụ tìm lỗi mã nguồn bằng dòng lệnh

Nếu đang sử dụng Android Studio hoặc Gradle, hãy sử dụng trình bao bọc Gradle để gọi tác vụ lint cho dự án bằng cách nhập một trong những lệnh sau trong thư mục gốc của dự án:

  • Trên Windows:
    gradlew lint
    
  • Trên Linux hoặc macOS:
    ./gradlew lint
    

Bạn sẽ thấy kết quả tương tự như dưới đây:

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

Khi hoàn thành các bước kiểm tra, công cụ tìm lỗi mã nguồn sẽ cung cấp đường dẫn đến các báo cáo tìm lỗi dưới các phiên bản XML và HTML. Sau đó, bạn có thể chuyển đến báo cáo HTML và mở báo cáo đó trong trình duyệt của mình, như minh hoạ trong hình 2.

Báo cáo lỗi mã nguồn mẫu dưới dạng HTML
Hình 2. Mẫu báo cáo lỗi mã nguồn dưới dạng HTML.

Nếu dự án có nhiều biến thể bản dựng thì công cụ tìm lỗi mã nguồn sẽ chỉ kiểm tra biến thể mặc định. Nếu muốn chạy công cụ tìm lỗi mã nguồn trên một biến thể khác, bạn phải viết hoa tên biến thể và thêm tiền tố lint.

./gradlew lintRelease

Để tìm hiểu thêm về cách chạy các tác vụ Gradle bằng dòng lệnh, hãy tham khảo nội dung Tạo bản dựng ứng dụng bằng dòng lệnh.

Chạy công cụ tìm lỗi mã nguồn bằng công cụ độc lập

Nếu không dùng Android Studio hoặc Gradle, hãy cài đặt công cụ dòng lệnh SDK Android để sử dụng công cụ tìm lỗi mã nguồn độc lập. Công cụ tìm lỗi mã nguồn đó nằm tại android_sdk/cmdline-tools/version/bin/lint.

Lưu ý: Nếu bạn chạy công cụ độc lập này trên dự án Gradle, một thông báo lỗi sẽ xuất hiện. Bạn nên sử dụng gradle lint (trên Windows) hoặc ./gradlew lint (trên macOS hoặc Linux) để chạy công cụ tìm lỗi mã nguồn trên dự án Gradle.

Để chạy công cụ tìm lỗi mã nguồn cho một danh sách tệp trong thư mục dự án, hãy sử dụng lệnh sau:

lint [flags] <project directory>

Ví dụ: bạn có thể tạo lệnh sau đây để quét các tệp trong thư mục myproject và các thư mục con của thư mục này. Mã vấn đề MissingPrefix sẽ yêu cầu công cụ tìm lỗi chỉ quét những thuộc tính XML đang bị thiếu tiền tố không gian tên Android.

lint --check MissingPrefix myproject 

Để xem danh sách đầy đủ các cờ và đối số dòng lệnh được công cụ này hỗ trợ, hãy sử dụng lệnh sau:

lint --help

Ví dụ sau đây cho thấy kết quả trên bảng điều khiển khi chạy lệnh tìm lỗi mã nguồn trên dự án 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

Sẽ có 4 cảnh báo và không có lỗi nào trong kết quả của ví dụ này.

2 cảnh báo liên quan đến tệp AndroidManifest.xml của dự án:

  • ManifestOrder
  • UsesMinSdkAttributes
1 cảnh báo liên quan đến tệp bố cục Preferences.xml: UnusedResources.

1 cảnh báo liên quan đến thư mục res: IconMissingDensityFolder.

Định cấu hình công cụ tìm lỗi mã nguồn để loại bỏ cảnh báo

Theo mặc định, khi quét lỗi mã nguồn, công cụ này sẽ kiểm tra tất cả vấn đề mà công cụ tìm lỗi mã nguồn hỗ trợ. Bạn cũng có thể giới hạn các vấn đề để công cụ tìm lỗi mã nguồn kiểm tra và chỉ định mức độ nghiêm trọng cho các vấn đề đó. Ví dụ: bạn có thể loại bỏ yêu cầu kiểm tra lỗi mã nguồn đối với các vấn đề không liên quan đến dự án, đồng thời có thể định cấu hình cho công cụ tìm lỗi mã nguồn để báo cáo các vấn đề không nghiêm trọng ở mức độ nghiêm trọng thấp hơn.

Có các mức độ nghiêm trọng sau:

  • enable
  • disable hoặc ignore
  • informational
  • warning
  • error
  • fatal

Bạn có thể định cấu hình cho yêu cầu kiểm tra lỗi mã nguồn ở nhiều cấp độ:

  • Toàn cục (toàn bộ dự án)
  • Mô-đun dự án
  • Mô-đun sản xuất
  • Mô-đun kiểm thử
  • Tệp đã mở
  • Hệ phân cấp lớp
  • Phạm vi Hệ thống quản lý phiên bản (VCS)

Định cấu hình tệp tìm lỗi mã nguồn

Bạn có thể chỉ định các tuỳ chọn kiểm tra lỗi mã nguồn trong tệp lint.xml. Nếu bạn đang tạo tệp này theo cách thủ công, hãy đặt tệp này vào thư mục gốc của dự án Android.

Tệp lint.xml bao gồm một thẻ mẹ <lint> chứa một hoặc nhiều phần tử con <issue>. Công cụ tìm lỗi mã nguồn sẽ định nghĩa một giá trị thuộc tính id duy nhất cho mỗi <issue>:

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

Để thay đổi mức độ nghiêm trọng của một vấn đề hoặc tắt yêu cầu kiểm tra lỗi mã nguồn đối với vấn đề đó, hãy thiết lập thuộc tính mức độ nghiêm trọng này trong thẻ <issue>.

Mẹo: Để xem danh sách đầy đủ các vấn đề được công cụ tìm lỗi mã nguồn hỗ trợ và mã vấn đề tương ứng, hãy chạy lệnh lint --list.

Tệp lint.xml mẫu

Ví dụ sau đây trình bày nội dung của tệp 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>

Ví dụ này cho thấy cách báo cáo nhiều loại vấn đề. Yêu cầu kiểm tra IconMissingDensityFolder bị tắt hoàn toàn, đồng thời yêu cầu kiểm tra ObsoleteLayoutParam chỉ bị tắt trong các tệp được chỉ định trong nội dung khai báo <ignore ... /> đi kèm.

Định cấu hình tính năng kiểm tra lỗi mã nguồn cho các tệp nguồn Kotlin, Java và XML

Bạn có thể tắt tính năng kiểm tra lỗi mã nguồn cho các tệp nguồn Kotlin, Java và XML trong hộp thoại Lựa chọn ưu tiên:

  1. Hãy chọn File > Settings (Tệp > Cài đặt) trên Windows hoặc Android Studio > Preferences (Android Studio > Lựa chọn ưu tiên) trên macOS hoặc Linux.
  2. Chọn Editor > Inspections (Trình chỉnh sửa > Yêu cầu kiểm tra).
  3. Để tắt, hãy bỏ chọn tệp nguồn tương ứng.

Bạn có thể thiết lập những chế độ cài đặt này cho IDE hoặc cho từng dự án bằng cách chọn cấu hình phù hợp.

Định cấu hình cho yêu cầu kiểm tra lỗi mã nguồn trong Java hoặc Kotlin

Để tắt yêu cầu kiểm tra lỗi mã nguồn cụ thể cho một lớp hoặc phương thức trong dự án Android, hãy thêm chú thích @SuppressLint vào mã đó.

Ví dụ sau cho bạn biết cách để tắt yêu cầu kiểm tra lỗi mã nguồn đối với vấn đề NewApi trong phương thức onCreate. Công cụ tìm lỗi mã nguồn này sẽ tiếp tục kiểm tra vấn đề NewApi trong các phương thức khác của lớp này.

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);

Bạn cũng có thể thực hiện tương tự trên bất kỳ Thành phần kết hợp nào. Đoạn mã sau đây cho bạn biết cách tắt các lượt kiểm tra NewApi trên bất kỳ Thành phần kết hợp nào.

Kotlin

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

Ví dụ sau đây trình bày cách tắt yêu cầu kiểm tra lỗi mã nguồn cho vấn đề ParserError trong lớp FeedProvider:

Kotlin

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

Java

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

Để loại bỏ yêu cầu kiểm tra tất cả vấn đề về lỗi mã nguồn trong tệp, hãy sử dụng từ khoá all, như sau:

Kotlin

@SuppressLint("all")

Java

@SuppressLint("all")

Bạn có thể sử dụng cùng một chú giải để loại bỏ các yêu cầu kiểm tra tìm lỗi mã nguồn trên mọi hàm có khả năng kết hợp.

Định cấu hình tính năng kiểm tra lỗi mã nguồn trong tệp XML

Dùng thuộc tính tools:ignore để tắt yêu cầu kiểm tra lỗi mã nguồn cho các phần cụ thể trong tệp XML. Đặt giá trị không gian tên sau đây vào tệp lint.xml để công cụ tìm lỗi mã nguồn nhận ra thuộc tính này:

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

Ví dụ sau cho bạn thấy cách tắt yêu cầu kiểm tra lỗi mã nguồn cho vấn đề UnusedResources trong phần tử <LinearLayout> của tệp bố cục XML. Thuộc tính ignore được các phần tử con kế thừa từ các phần tử mẹ nơi thuộc tính này được khai báo trong đó. Trong ví dụ này, tính năng kiểm tra lỗi mã nguồn cũng sẽ bị vô hiệu hoá đối với phần tử con <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>

Để tắt tính năng kiểm tra này cho nhiều vấn đề, hãy liệt kê các vấn đề cần vô hiệu hoá trong một chuỗi và phân tách nhau bằng dấu phẩy. Ví dụ:

tools:ignore="NewApi,StringFormatInvalid"

Để loại bỏ yêu cầu kiểm tra tất cả vấn đề về lỗi mã nguồn trong phần tử XML, hãy sử dụng từ khoá all:

tools:ignore="all"

Định cấu hình các lựa chọn tìm lỗi mã nguồn với Gradle

Trình bổ trợ Android cho Gradle cho phép bạn định cấu hình một số lựa chọn tìm lỗi mã nguồn, chẳng hạn như cần chạy hoặc bỏ qua những yêu cầu kiểm tra nào, bằng cách sử dụng khối lint{} trong cấp tệp build.gradle cấp mô đun.

Đoạn mã sau đây cho bạn thấy một số thuộc tính có thể định cấu hình:

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
    }
}
...

Tất cả phương thức tìm lỗi mã nguồn dùng để ghi đè mức độ nghiêm trọng có sẵn của một vấn đề đều tuân theo thứ tự cấu hình. Ví dụ: việc thiết lập một vấn đề là nghiêm trọng trong finalizeDsl() sẽ ghi đè thao tác vô hiệu hoá vấn đề này trong DSL chính.

Tạo đường cơ sở cho các cảnh báo

Bạn có thể tạo bản tổng quan nhanh cho bộ cảnh báo hiện tại của dự án, rồi sử dụng bản tổng quan nhanh này làm đường cơ sở (baseline) cho các lượt chạy yêu cầu kiểm tra trong tương lai, nhờ đó chỉ cần báo cáo các vấn đề mới xuất hiện. Bản tổng quan nhanh đường cơ sở cho phép bạn bắt đầu sử dụng công cụ tìm lỗi mã nguồn để xác định bản dựng không đạt yêu cầu mà không cần phải quay lại và giải quyết tất cả vấn đề hiện tại trước.

Để tạo bản tổng quan nhanh đường cơ sở, hãy chỉnh sửa tệp build.gradle của dự án như sau:

Kotlin

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

Groovy

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

Trong lần đầu bạn thêm dòng này, tệp lint-baseline.xml sẽ được tạo để thiết lập đường cơ sở. Từ đó về sau, các công cụ chỉ đọc tệp này để xác định đường cơ sở. Nếu bạn muốn tạo đường cơ sở mới, hãy xoá tệp này theo cách thủ công và chạy lại công cụ tìm lỗi mã nguồn để tạo lại tệp này.

Sau đó, chạy công cụ tìm lỗi mã nguồn trong IDE bằng cách chọn Analyze > Inspect Code (Phân tích > Kiểm tra mã) hoặc chạy bằng dòng lệnh như sau. Kết quả đầu ra sẽ in vị trí của tệp lint-baseline.xml. Vị trí tệp theo cách thiết lập của bạn có thể khác với thông tin trình bày ở đây:

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

Thao tác chạy lint sẽ ghi lại tất cả vấn đề hiện tại trong tệp lint-baseline.xml. Tập hợp các vấn đề hiện tại được gọi là đường cơ sở (baseline). Bạn có thể kiểm tra tệp lint-baseline.xml trong phần kiểm soát phiên bản nếu muốn chia sẻ tệp này với người khác.

Tuỳ chỉnh đường cơ sở

Nếu bạn chỉ muốn thêm một số loại vấn đề nhất định vào đường cơ sở, hãy chỉ định các vấn đề cần thêm bằng cách chỉnh sửa tệp build.gradle của dự án như sau:

Kotlin

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

Groovy

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

Nếu bạn thêm bất cứ cảnh báo mới nào vào cơ sở mã thì công cụ tìm lỗi mã nguồn sẽ chỉ liệt kê các lỗi mới phát sinh.

Cảnh báo theo đường cơ sở

Khi đường cơ sở có hiệu lực, bạn sẽ nhận được cảnh báo cho biết rằng một hoặc nhiều vấn đề được lọc ra vì đã được liệt kê trong đường cơ sở. Cảnh báo này giúp bạn nhớ lại rằng bạn đã định cấu hình một đường cơ sở và bạn nên khắc phục tất cả vấn đề này vào một thời điểm nào đó.

Cảnh báo này cũng theo dõi các sự cố không được báo cáo Thông tin này cho biết liệu bạn đã thực sự khắc phục vấn đề hay chưa. Vì vậy, bạn có thể tuỳ ý tạo lại đường cơ sở để ngăn ngừa tình huống lỗi tiếp tục xảy ra nhưng không phát hiện được.

Lưu ý: Đường cơ sở sẽ được bật khi bạn chạy các yêu cầu kiểm tra ở chế độ hàng loạt trong IDE. Tuy nhiên, các đường cơ sở này sẽ bị bỏ qua đối với các bước kiểm tra trong trình chỉnh sửa chạy trong nền khi bạn chỉnh sửa tệp. Lý do là đường cơ sở chỉ dành cho trường hợp cơ sở mã có rất nhiều cảnh báo, nhưng bạn muốn khắc phục các sự cố cục bộ ngay khi xử lý mã.

Chạy yêu cầu kiểm tra theo cách thủ công

To hạy yêu cầu kiểm tra lỗi mã nguồn cũng như các yêu cầu IDE khác theo cách thủ công, hãy chọn Code > Inspect Code (Mã > Kiểm tra mã). Kết quả kiểm tra sẽ xuất hiện trong cửa sổ Inspection Results (Kết quả kiểm tra).

Thiết lập phạm vi và hồ sơ kiểm tra

Chọn tệp bạn muốn phân tích (phạm vi kiểm tra) và các yêu cầu kiểm tra mà bạn muốn chạy (hồ sơ kiểm tra) như sau:

  1. Trong chế độ xem Android, mở dự án rồi chọn dự án, thư mục hoặc tệp bạn muốn phân tích.
  2. Trên thanh trình đơn, chọn Analyze > Inspect Code (Phân tích > Kiểm tra mã).
  3. Trong hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra), hãy xem xét các chế độ cài đặt.

    Chỉ định phạm vi kiểm tra
    Hình 3. Xem lại các chế độ cài đặt phạm vi kiểm tra.

    Các lựa chọn xuất hiện trong hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra) còn tuỳ thuộc vào việc bạn chọn dự án, thư mục hay tệp.

    • Khi bạn chọn một dự án, tệp hoặc thư mục, hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra) sẽ cho thấy đường dẫn đến dự án, tệp hoặc thư mục bạn đã chọn.
    • Khi chọn nhiều dự án, tệp hoặc thư mục, hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra) sẽ hiển thị nút chọn với trạng thái đã chọn cho Các tệp đã chọn.

    Để thay đổi đối tượng sẽ kiểm tra, hãy chọn một trong số các nút chọn. Hãy xem hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra) để biết nội dung mô tả về tất cả trường có thể xuất hiện trên hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra).

  4. Trong phần Inspection profile (Hồ sơ kiểm tra), hãy chọn hồ sơ mà bạn muốn sử dụng.
  5. Nhấp vào OK để chạy yêu cầu kiểm tra.

    Hình 4 cho thấy kết quả kiểm tra lỗi mã nguồn và các yêu cầu kiểm tra IDE khác trong lần chạy Inspect Code (Kiểm tra mã):

    Chọn một vấn đề nào đó để xem cách xử lý.
    Hình 4. Kết quả của yêu cầu kiểm tra. Hãy chọn một vấn đề để xem cách xử lý.
  6. Trong ngăn Inspection Results (Kết quả kiểm tra), bạn có thể xem kết quả kiểm tra bằng cách mở rộng và chọn các danh mục lỗi, loại và vấn đề.

    Ngăn Inspection Report (Kết quả kiểm tra) sẽ cho thấy báo cáo kiểm tra cho danh mục lỗi, loại hoặc vấn đề đã chọn trong ngăn Inspection Report (Kết quả kiểm tra), đồng thời cho thấy tên và vị trí xảy ra lỗi. Nếu có thể, báo cáo kiểm tra sẽ cho thấy các thông tin khác như bản tóm tắt vấn đề, nhằm hỗ trợ bạn khắc phục vấn đề đó.

  7. Trong chế độ xem dạng cây của ngăn Inspection Results (Kết quả kiểm tra), bạn có thể nhấp chuột phải vào một danh mục, loại hoặc sự cố để hiện trình đơn theo bối cảnh.

    Tuỳ vào bối cảnh, bạn có thể:

    • Chuyển đến nguồn.
    • Loại trừ và thêm các mục đã chọn.
    • Loại bỏ vấn đề.
    • Chỉnh sửa các chế độ cài đặt
    • Quản lý cảnh báo về yêu cầu kiểm tra.
    • Chạy lại một yêu cầu kiểm tra.

Để biết nội dung mô tả về các nút trên thanh công cụ, các mục trong trình đơn theo bối cảnh và các trường báo cáo, hãy xem cửa sổ công cụ Inspection Results (Kết quả kiểm tra).

Sử dụng phạm vi tuỳ chỉnh

Bạn có thể sử dụng một trong các phạm vi tuỳ chỉnh mà Android Studio cung cấp như sau:

  1. Trong hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra), hãy chọn Custom scope (Phạm vi tuỳ chỉnh).
  2. Nhấp vào danh sách Custom scope (Phạm vi tuỳ chỉnh) để hiện các lựa chọn:

    Chọn phạm vi kiểm tra
    Hình 5. Chọn phạm vi tuỳ chỉnh mà bạn muốn sử dụng.
    • All Places (Tất cả vị trí): Tất cả tệp.
    • Project Files (Tệp dự án): Tất cả tệp trong dự án hiện tại.
    • Project Source Files (Tệp nguồn dự án): Chỉ những tệp nguồn trong dự án hiện tại.
    • Project Production Files (Tệp phát hành chính thức của dự án): Chỉ những tệp phát hành chính thức trong dự án hiện tại.
    • Project Test Files (Các tệp kiểm thử của dự án): Chỉ những tệp kiểm thử trong dự án hiện tại.
    • Scratches and Consoles (Tệp Scratch và bảng điều khiển): Chỉ những tệp Scratch và bảng điều khiển mà bạn đã mở trong dự án hiện tại.
    • Recently Viewed Files (Tệp mới xem gần đây): Chỉ những tệp mới xem gần đây trong dự án hiện tại.
    • Current File (Tệp hiện tại): Chỉ những tệp hiện tại trong dự án hiện tại. Xuất hiện khi bạn chọn một tệp hoặc thư mục.
    • Selected Directory (Thư mục đã chọn): Chỉ có thư mục hiện tại trong dự án hiện tại. Xuất hiện khi bạn chọn một thư mục.
    • Class Hierarchy (Hệ phân cấp lớp): Khi bạn chọn lựa chọn này rồi nhấp vào OK, một hộp thoại sẽ xuất hiện cho thấy tất cả lớp trong dự án hiện tại. Trong hộp thoại này, bạn có thể dùng trường Search by Name (Tìm kiếm theo tên) để lọc và chọn các lớp cần kiểm tra. Nếu không lọc danh sách lớp thì yêu cầu kiểm tra mã sẽ kiểm tra mọi lớp.

    Nếu đã định cấu hình VCS cho dự án, bạn cũng có thể lựa chọn giới hạn phạm vi tìm kiếm chỉ ở các tệp đã được sửa đổi.

  3. Nhấp vào OK.

Tạo phạm vi tuỳ chỉnh

Nếu muốn kiểm tra một tệp và thư mục không thuộc phạm vi tuỳ chỉnh nào hiện có, bạn có thể tạo một phạm vi tuỳ chỉnh.

  1. Trong hộp thoại Specify Inspection Scope (Chỉ định phạm vi kiểm tra), hãy chọn Custom scope (Phạm vi tuỳ chỉnh).
  2. Nhấp vào biểu tượng ba dấu chấm sau danh sách Custom Scope (Phạm vi tuỳ chỉnh).

    Chỉ định hộp thoại Inspection Scope (Phạm vi kiểm tra)
    Hình 6. Chỉ định hộp thoại Inspection Scope (Phạm vi kiểm tra).

    Hộp thoại Scopes (Phạm vi) xuất hiện.

    Tạo phạm vi tuỳ chỉnh
    Hình 7. Tạo phạm vi tuỳ chỉnh.
  3. Nhấp vào nút ở góc trên cùng bên trái của hộp thoại để xác định một phạm vi.
  4. Trong danh sách Add Scope (Thêm phạm vi) vừa xuất hiện, hãy chọn Local (Cục bộ).

    Cả phạm vi cục bộ và phạm vi dùng chung đều được sử dụng trong dự án cho tính năng Inspect Code (Kiểm tra mã). Bạn cũng có thể dùng phạm vi Shared (Dùng chung) với các tính năng khác của dự án có chứa trường phạm vi. Ví dụ: khi nhấp vào Edit Settings (Chỉnh sửa chế độ cài đặt) để thay đổi chế độ cài đặt cho Find Usages (Tìm trường hợp sử dụng), hộp thoại nhận được sẽ có trường Scope (Phạm vi). Tại đây, bạn có thể chọn một phạm vi dùng chung.

    Chọn một phạm vi dùng chung trong hộp thoại Find Usages (Tìm trường hợp sử dụng).
    Hình 8. Chọn một phạm vi dùng chung trong hộp thoại Find Usages (Tìm trường hợp sử dụng).
  5. Đặt tên cho phạm vi rồi nhấp vào OK.

    Ngăn bên phải của hộp thoại Scopes (Phạm vi) sẽ điền sẵn các lựa chọn để bạn định nghĩa phạm vi tuỳ chỉnh.

  6. Trên danh sách, hãy chọn Project (Dự án).

    Bạn sẽ thấy xuất hiện danh sách dự án hiện có.

    Lưu ý: Bạn có thể tạo phạm vi tuỳ chỉnh cho dự án hoặc gói. Các bước thực hiện đều giống nhau.

  7. Mở rộng các thư mục dự án, chọn nội dung bạn muốn thêm vào phạm vi tuỳ chỉnh, rồi chọn đưa vào hoặc loại trừ nội dung đó.

    Định nghĩa phạm vi tuỳ chỉnh
    Hình 9. Định nghĩa phạm vi tuỳ chỉnh.
    • Include (Đưa vào): Đưa thư mục này và các tệp trong thư mục này vào nhưng không đưa các thư mục con vào.
    • Include Recursively (Đưa vào theo quy tắc đệ quy): Đưa thư mục này và tất cả tệp cũng như thư mục con và các tệp trong thư mục con đó vào.
    • Exclude (Loại trừ): Loại trừ thư mục này và các tệp trong thư mục này nhưng không loại trừ các thư mục con trong thư mục này.
    • Include Recursively (Đưa vào theo quy tắc đệ quy): Đưa thư mục này và tất cả tệp cũng như thư mục con và các tệp trong thư mục con đó vào.

    Hình 10 cho thấy rằng thư mục main được đưa vào, và thư mục javares được đưa vào theo quy tắc đệ quy. Màu xanh dương biểu thị thư mục được đưa vào một phần và màu xanh lục biểu thị các thư mục và tệp được đưa vào theo quy tắc đệ quy.

    Mẫu ví dụ cho phạm vi tuỳ chỉnh
    Hình 10. Mẫu ví dụ cho phạm vi tuỳ chỉnh.
    • Nếu bạn chọn thư mục java và nhấp vào Exclude Recursively (Loại trừ theo quy tắc đệ quy) thì phần đánh dấu màu xanh lục sẽ biến mất trên thư mục java cùng với tất cả thư mục và tệp trong thư mục đó.
    • Nếu bạn chọn tệp MainActivity.kt được đánh dấu màu xanh lục rồi nhấp vào Exclude (Loại trừ), thì tệp MainActivity.kt sẽ không còn được đánh dấu màu xanh lục, nhưng tất cả nội dung khác trong thư mục java vẫn sẽ có màu xanh lục.
  8. Nhấp vào OK. Phạm vi tuỳ chỉnh xuất hiện ở cuối danh sách.

Xem lại và chỉnh sửa hồ sơ kiểm tra

Android Studio cung cấp lựa chọn tìm lỗi mã nguồn và các hồ sơ kiểm tra khác được cập nhật qua các bản cập nhật Android. Bạn có thể sử dụng những hồ sơ này như hiện có hoặc chỉnh sửa một số thông tin như tên, nội dung mô tả, mức độ nghiêm trọng và phạm vi. Bạn cũng có thể kích hoạt và huỷ kích hoạt toàn bộ nhóm hồ sơ hoặc từng hồ sơ trong một nhóm.

Cách truy cập chế độ cài đặt Inspections (Yêu cầu kiểm tra):

  1. Chọn File > Settings (Tệp > Cài đặt). (trên Windows) hoặc Android Studio > Preferences (Android Studio > Lựa chọn ưu tiên) trên macOS hoặc Linux.
  2. Chọn Editor > Inspections (Trình chỉnh sửa > Yêu cầu kiểm tra).
  3. Ngăn Inspections (Yêu cầu kiểm tra) cho thấy danh sách yêu cầu kiểm tra được hỗ trợ kèm theo thông tin mô tả.

    Các yêu cầu kiểm tra được hỗ trợ và nội dung mô tả
    Hình 11. Các yêu cầu kiểm tra được hỗ trợ và nội dung mô tả.
  4. Chọn danh sách Profile (Hồ sơ) để chuyển đổi giữa các yêu cầu kiểm tra Default (Mặc định) của Android Studio và Project Default (Mặc định của dự án) cho dự án đang hoạt động.

    Để biết thêm thông tin, hãy xem trang Manage profile (Quản lý hồ sơ) của IntelliJ.

  5. Trong danh sách Inspections (Yêu cầu kiểm tra) ở ngăn bên trái, hãy chọn một danh mục hồ sơ cấp cao nhất hoặc mở rộng một nhóm rồi chọn một hồ sơ cụ thể.

    Khi chọn một danh mục hồ sơ, bạn có thể chỉnh sửa tất cả yêu cầu kiểm tra trong danh mục đó thành một yêu cầu kiểm tra duy nhất.

  6. Chọn danh sách Show Schema Actions (Hiện thao tác trên giản đồ) Hiện biểu tượng Schema Actions (Thao tác trên giản đồ) để sao chép, đổi tên, thêm nội dung mô tả, xuất và nhập các yêu cầu kiểm tra.
  7. Sau khi hoàn tất, hãy nhấp vào OK.