Skip to content

Most visited

Recently visited

navigation

Lint로 코드 개선

Android 애플리케이션이 기능 요구사항을 준수하는지 테스트해야 할 뿐만 아니라 코드에 구조적 문제가 없는지 확인하는 것이 중요합니다. 구조가 나쁜 코드는 Android 앱의 신뢰성과 효율에 영향을 미칠 수 있으며 코드 관리가 어려워질 수 있습니다. 예를 들어 XML 소스 파일에 사용하지 않는 네임스페이스가 있다면 공간을 차지하고 불필요한 처리가 발생합니다. 대상 API 버전에서 지원하지 않는 지원 중단된 요소 또는 API 호출을 사용하는 등과 같은 구조적 문제로 인해 코드가 올바르게 실행되지 않을 수 있습니다.

개요

Android Studio에 있는 Lint라는 코드 스캔 도구를 사용하면 앱을 실행하거나 테스트 사례를 작성하지 않고도 코드의 구조적 문제를 식별하고 수정할 수 있습니다. 도구에서 탐지된 각각의 문제는 설명 메시지 및 심각도 수준과 함께 보고되므로 개선이 시급한 순서대로 신속히 우선순위를 결정할 수 있습니다. 또한 프로젝트와 관련이 없는 문제를 무시해서 문제의 심각도 수준을 낮추거나 특정 문제를 강조하여 심각도 수준을 높일 수 있습니다.

Lint 도구는 잠재적 버그를 찾아내고 정확성, 보안, 성능, 가용성, 접근성 및 국제성을 높이기 위해 Android 프로젝트 소스 파일을 검사합니다. Android Studio를 사용할 경우 앱을 빌드할 때마다 구성된 Lint와 IDE 검사를 실행합니다. 그러나 검사를 수동으로 실행하거나 명령줄에서 Lint를 실행할 수 있습니다.

참고: Android Studio에서 코드를 컴파일할 때는 추가 IntelliJ 코드 검사를 실행하여 코드 검토를 간소화합니다.

그림 1은 Lint 도구가 애플리케이션 소스 파일을 처리하는 모습을 보여줍니다.

그림 1. Linto 도구를 사용한 코드 스캔 워크플로

애플리케이션 소스 파일
소스 파일은 자바 및 XML 파일, 아이콘, ProGuard 구성 파일을 포함하여 Android 프로젝트를 구성하는 파일로 이루어져 있습니다.
lint.xml 파일
배제하고 싶은 Lint 검사를 지정하고 문제 심각도 수준을 사용자 지정하는 데 사용하는 구성 파일.
Lint 도구
명령줄 또는 Android Studio를 사용하여 Android 프로젝트에서 실행할 수 있는 정적 코드 스캔 도구(수동으로 검사 실행 참조). Lint 도구는 Android 애플리케이션의 품질과 성능에 영향을 미칠 수 있는 구조적 코드 문제를 검사합니다. 애플리케이션을 게시하기 전에 Lint가 탐지한 오류를 수정하는 것이 좋습니다.
Lint 검사 결과
Android Studio 콘솔 또는 Inspection Results 창에서 결과를 확인할 수 있습니다. 수동으로 검사 실행을 참조하세요.

명령줄에서 Lint 실행

프로젝트 디렉토리에서 파일 목록에 대해 Lint를 실행하려면 다음 명령을 사용합니다.

lint [flags] <project directory>

예를 들어 다음 명령으로 myproject 디렉토리 및 하위 디렉토리의 파일을 스캔할 수 있습니다. 발급 ID MissingPrefix는 Android 네임스페이스 접두사가 없는 XML 특성만 스캔하도록 Lint에 지시합니다.

lint --check MissingPrefix myproject 

도구에서 지원하는 플래그 및 명령줄 인수 목록 전체를 확인하려면 다음 명령을 사용하세요.

lint --help

Lint 출력 예시

다음 예시는 Earthquake라는 프로젝트에서 Lint 명령을 실행할 때 콘솔 출력을 보여줍니다.

$ 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개가 포함되어 있고 오류는 없습니다. 경고 3개(ManifestOrder, UsesMinSdkAttributesUnusedResources)는 프로젝트의 AndroidManifest.xml 파일에서 발생하였고 경고 1개(IconMissingDensityFolder)는 Preferences.xml 레이아웃 파일에서 발생했습니다.

Gradle로 Lint 실행

프로젝트에 빌드 변형이 포함된다면 프로젝트 루트 디렉토리에 다음 명령을 입력하여 Gradle 래퍼로 모든 변형을 대상으로 하는 lint 작업을 호출할 수 있습니다.

특정 빌드 변형을 대상으로만 lint 작업을 실행하고 싶다면 변형 이름을 대문자로 바꾸고 lint로 접두사를 붙여야 합니다.

gradlew lintDebug

Lint 도구가 검사를 완료하면 Lint 보고서가 Lint 보고서의 XML 및 HTML 버전으로 연결된 경로 2개를 제공합니다. 명령줄에서 Gradle 작업을 실행하는 방법에 대한 자세한 내용은 명령줄에서 앱 빌드를 참조하세요.

Lint 구성

기본적으로 Lint 스캔을 실행하면 도구는 Lint에서 지원하는 모든 문제를 검사합니다. 또한 Lint가 검사할 문제를 제한하고 해당 문제에 심각도를 할당할 수 있습니다. 예를 들어 프로젝트와 관련이 없는 특정 문제에 대해서는 Lint 검사를 비활성화하고 심각도가 낮고 중요하지 않은 문제를 보고하도록 Lint를 구성할 수 있습니다.

다양한 수준으로 Lint 검사를 구성할 수 있습니다.

Android Studio에서 Lint 구성

Android Studio를 사용하는 동안 내장된 Lint 도구가 코드를 검사합니다. 경고와 오류를 확인할 수 있는 2가지 방법이 있습니다.

Lint 파일 구성

lint.xml 파일에서 Lint 검사 기본 설정을 지정할 수 있습니다. 파일을 수동으로 생성할 경우 Android 프로젝트의 루트 디렉토리에 파일을 넣습니다.

lint.xml 파일은 하나 이상의 하위 <issue> 요소가 포함된 인클로징 <lint> 상위 태그로 구성됩니다. Lint는 각 <issue>에 고유한 id 특성 값을 정의합니다.

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

<issue> 태그에서 심각도 특성을 설정하여 문제의 심각도 수준을 변경하거나 해당 문제의 Lint 검사를 비활성화할 수 있습니다.

팁: Lint 지원 문제 및 해당 발급 ID의 전체 목록을 확인하려면 lint --list 명령을 실행하세요.

lint.xml 파일 샘플

다음은 lint.xml 파일의 콘텐츠를 보여주는 예시입니다.

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Disable the given 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>

자바 및 XML 소스 파일을 위한 Lint 검사 구성

자바 및 XML 소스 파일 검사에서 Lint를 비활성화할 수 있습니다.

팁: 기본 설정 대화상자에서 자바 또는 XML 소스 파일에 대한 Lint 검사를 관리할 수 있습니다. File > Other Settings > Default Settings를 선택하고 Default Preferences 대화상자의 왼쪽 창에서 Editor > Inspections를 선택합니다.

자바에서 Lint 검사 구성

Android 프로젝트에서 자바 클래스 또는 메서드에 대해서만 Lint 검사를 비활성화하려면 자바 코드에 @SuppressLint 주석을 추가합니다.

다음 예시는 onCreate 메서드에서 NewApi 문제에 대한 Lint 검사를 비활성화하는 방법을 보여줍니다. Lint 도구는 이 클래스의 다른 메서드에서는 NewApi 문제를 계속 검사합니다.

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

다음 예시는 FeedProvider 클래스에서 ParserError 문제에 대한 Lint 검사를 비활성화하는 방법을 보여줍니다.

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

자바 파일에서 모든 Lint 문제에 대한 검사를 금지하려면 다음과 같이 all 키워드를 사용하세요.

@SuppressLint("all")

XML에서 Lint 검사 구성

tools:ignore 특성을 사용하여 XML 파일의 특정 섹션에 대한 Lint 검사를 비활성화할 수 있습니다. lint.xml 파일에 다음 네임스페이스 값을 입력하여 Lint 도구가 특성을 인식하게 합니다.

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

다음 예시는 XML 레이아웃 파일의 <LinearLayout> 요소에서 UnusedResources 문제에 대한 Lint 검사를 비활성화하는 방법을 보여줍니다. 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>

하나 이상의 문제를 비활성화하려면 쉼표로 구분된 문자열로 비활성화할 문제 목록을 작성하세요. 예:

tools:ignore="NewApi,StringFormatInvalid"

XML 요소에서 모든 Lint 문제에 대한 검사를 금지하려면 다음과 같이 all 키워드를 사용하세요.

tools:ignore="all"

Gradle로 Lint 옵션 구성

Gradle용 Android 플러그인을 사용하면 모듈 수준의 build.gradle 파일에서 lintOptions {} 블록을 사용하여 검사 실행 또는 무시 등과 같은 특정 Lint 옵션을 구성할 수 있습니다. 다음 코드 스니펫은 구성 가능한 속성 몇 가지를 보여줍니다.

android {
  ...
  lintOptions {
    // 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.
    check '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 true, only report errors.
    ignoreWarnings true
  }
}
...

수동 검사 실행

Inspect Code > Analyze를 선택하여 구성된 Lint와 다른 IDE 검사를 수동으로 실행할 수 있습니다. 검사 결과는 Inspection Results 창에 나타납니다.

검사 범위 및 프로필 설정

분석하고 싶은 파일(검사 범위)과 실행할 검사(검사 프로필)를 다음과 같이 선택합니다.

  1. Android 뷰에서 프로젝트를 열고 분석할 프로젝트, 폴더 또는 파일을 선택합니다.
  2. 메뉴 모음에서 Analyze > Inspect Code를 선택합니다.
  3. Specify Inspection Scope 대화상자에서 설정을 검토합니다. 검사 범위 지정

    그림 2. 검사 범위 설정 검토

    Specify Inspection Scope 대화상자에 나타나는 옵션 조합은 프로젝트, 폴더 또는 파일 중 어느 것을 선택했는지에 따라 달라집니다. 다른 라디오 버튼 중 하나를 선택하여 검사 대상을 변경할 수 있습니다. Specify Inspection Scope 대화상자의 모든 가능한 필드에 대한 설명은 Specify Inspection Scope를 참조하세요.

    • 한 프로젝트, 파일 또는 디렉토리를 선택하면 Specify Inspection Scope 대화상자에 선택한 Project, File 또는 Directory의 경로가 표시됩니다.
    • 프로젝트, 파일 또는 디렉토리를 하나 이상 선택하면 Specify Inspection Scope 대화상자에 선택한 파일에 대해 선택된 라디오 버튼이 표시됩니다.
  4. Inspection profile에서 기본 프로필(Project Default)을 유지합니다.
  5. OK를 클릭하여 검사를 실행합니다. 그림 3은 Inspect Code 실행 시 Lint 및 다른 IDE 검사 결과를 보여줍니다.

    그림 3. 문제를 선택하여 해결책 확인

  6. 왼쪽 창의 트리 뷰에서 오류 카테고리, 유형, 문제를 펼쳐서 선택하면 검사 결과를 확인할 수 있습니다.

    오른쪽 창은 선택한 오류 카테고리, 유형 또는 문제의 검사 보고서를 표시하고 오류의 이름과 위치를 제공합니다. 경우에 따라, 검사 보고서는 문제 개요 등과 같이 문제를 수정하는 데 도움이 되는 다른 정보를 표시합니다.

  7. 왼쪽 창 트리 뷰에서 카테고리, 유형 또는 문제를 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 표시합니다.

    상황에 따라 소스로 점프, 선택 항목 제외/포함, 문제 숨기기, 설정 편집, 검사 알림 관리, 검사 반환을 모두 실행하거나 그중 일부만 실행할 수 있습니다.

왼쪽 툴바 버튼, 컨텍스트 메뉴 항목, 검사 보고서 필드에 대한 설명은 Inspection 도구 창을 참조하세요.

사용자설정 범위 사용

다음과 같이 Android Studio에서 제공되는 사용자설정 범위 중 하나를 사용할 수 있습니다.

  1. Specify Inspection Scope 대화상자에서 Custom scope를 클릭합니다.
  2. Custom scope 드롭다운 목록을 클릭하여 옵션을 표시합니다.

    검사 범위 선택

    그림 4. 사용하고자 하는 사용자설정 범위 선택

    • 프로젝트 파일: 현재 프로젝트의 모든 파일입니다.
    • 프로젝트 프로덕션 파일: 현재 프로젝트의 프로덕션 파일만 해당합니다.
    • 프로젝트 테스트 파일: 현재 프로젝트의 테스트 파일만 해당합니다. 테스트 유형 및 위치를 참조하세요.
    • 열린 파일: 현재 프로젝트에서 열린 파일만 해당합니다.
    • <your-module> 모듈: 현재 프로젝트에서 해당 모듈 폴더에 있는 파일만 해당합니다.
    • 현재 파일: 현재 프로젝트에 있는 현재 파일만 해당합니다. 파일 또는 폴더를 선택했을 때 나타납니다.
    • 클래스 계층: 이 항목을 선택하고 OK를 클릭하면 현재 프로젝트의 모든 클래스와 함께 대화상자가 나타납니다. 대화상자의 Search by Name 필드를 사용하여 검사할 클래스를 필터링하고 선택합니다. 클래스 목록을 필터링하지 않으면 코드 검사에서 모든 클래스를 검사합니다.
  3. OK를 클릭합니다.

사용자설정 범위 생성

현재 이용 가능한 사용자설정 범위에 포함되지 않는 파일과 디렉토리를 검사하기 위해 사용자설정 범위를 생성할 수 있습니다.

  1. Specify Inspection Scope 대화상자에서 Custom scope를 선택합니다.
  2. Custom Scope 드롭다운 목록 뒤에 나오는 세 개의 점을 클릭합니다.

    그림 5. 검사 범위 대화상자 지정

    Scopes 대화상자가 나타납니다.

    그림 6. 사용자설정 범위 생성

  3. Add를 클릭하여 새 범위를 정의합니다.
  4. 그 후에 나오는 Add Scope 드롭다운 목록에서 Local을 선택합니다.

    로컬 및 공유 범위는 모두 프로젝트 내에서 코드 검사 기능에 사용됩니다. 공유 범위는 범위 필드가 있는 다른 프로젝트 기능에서도 사용할 수 있습니다. 예를 들어 Edit Settings를 클릭하면 Find Usages의 설정을 변경할 수 있습니다. 이후에 나타나는 대화상자의 Scope 필드에서 공유 범위를 선택할 수 있습니다.

    그림 7. Find Usages 대화상자에서 공유 범위 선택

  5. 범위에 이름을 지정하고 OK를 클릭합니다.

    Scopes 대화상자의 오른쪽 창에는 사용자설정 범위를 정의할 수 있는 옵션이 있습니다.

  6. 드롭다운 목록에서 Project를 선택합니다.

    이용 가능한 프로젝트 목록이 나타납니다.

    참고: 프로젝트 또는 패키지의 사용자설정 범위를 생성할 수 있습니다. 절차는 어느 쪽이든 동일합니다.

  7. 프로젝트 폴더를 펼치고 사용자설정 범위에 추가할 항목을 선택한 다음, 오른쪽에 있는 버튼 중 하나를 클릭합니다.

    그림 8. 사용자설정 범위 정의

    • Include: 이 폴더와 그 안의 파일을 포함하지만, 하위 폴더는 포함하지 않습니다.
    • Include Recursively: 이 폴더와 그 안의 모든 파일, 하위 폴더 및 그 안의 파일까지 포함합니다.
    • Exclude: 이 폴더와 그 안의 파일을 제외하지만 하위 폴더는 제외하지 않습니다.
    • Exclude Recursively: 이 폴더와 그 안의 모든 파일, 하위 폴더 및 그 안의 파일까지 제외합니다.

    그림 9는 main 폴더가 포함되어 있고 자바 폴더는 재귀적으로 포함된 상태를 보여줍니다. 파란색은 부분적으로 포함된 폴더를 나타내고 녹색은 재귀적으로 포함된 폴더와 파일을 나타냅니다.

    그림 9. 사용자설정 범위 패턴 예시

    • java 폴더를 선택하고 Exclude Recursively를 클릭하면 java 폴더와 그 안의 모든 파일을 강조표시하는 녹색이 사라집니다.
    • 녹색으로 강조표시된 MainActivity.java 파일을 선택하고 Exclude를 클릭하면 MainActivity.java에서 녹색이 사라지지만 java 폴더에 있는 그 외의 다른 모든 파일은 녹색으로 강조표시됩니다.
  8. OK를 클릭합니다. 사용자설정 범위는 드롭다운 목록의 하단에 나타납니다.

검사 프로필 검토 및 편집

Android Studio에는 Android 업데이트를 통해 업데이트된 Lint 및 다른 검사 파일들이 있습니다. 이 프로필을 그대로 사용하거나 이름, 설명, 심각도, 범위를 편집할 수 있습니다. 또한 프로필 그룹 전체 또는 그룹 내 개별 프로필을 활성화/비활성화할 수도 있습니다.

Inspections 대화상자 액세스:

  1. Analyze > Inspect Code를 선택합니다.
  2. Inspection ProfileSpecify Scope에서 More을 클릭합니다.

    Inspections 대화상자가 지원되는 검사 및 설명 목록과 함께 나타납니다.

    그림 10. 지원되는 검사 및 설명

  3. Profile 드롭다운 목록을 선택하여 Default(Android Studio)와 Project Default(활성 프로젝트) 검사 간에 전환합니다. 자세한 내용은 IntelliJ 검사 범위 대화상자 지정 페이지를 참조하세요.
  4. 왼쪽 창의 Inspections 대화상자에서 최상위 프로필 카테고리를 선택하거나 그룹을 펼쳐서 특정 프로필을 선택합니다. 프로필 카테고리를 선택하면 해당 카테고리에 있는 모든 검사를 단일 검사로 수정할 수 있습니다.
  5. Manage 드롭다운 목록을 선택하여 검사 이름 변경, 설명 추가, 내보내기, 가져오기를 수행할 수 있습니다.
  6. 완료되면 OK를 클릭합니다.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.