본문 바로가기
Android 개발/Debug, ADB, CrashLytics, LogCat

ktlint 린트툴 적용하는 방법 정리 # Android Lint

by Developer88 2023. 3. 15.
반응형

오늘은 KTLint 라는 라이브러리에 대해서 정리해 보도록 하겠습니다.

KTLint 에 대해 알아보기전에,

lint 툴에 대해서 간단히 알아보고 가겠습니다.

 

1. lint 

린트나 린터라고도 불리는 데요.

이것은 코드에서 버그나 익셉션이 발생할 만한 곳을 표시해주는 툴을 가르킵니다.

다양한 라이브러리가 이러한 툴로 사용되는데요.

추가적으로 Typo(타이핑에러)나 코드 스타일까지도 일관되도록 체크를 해 줍니다.

 

Android Studio에서는 사실 이미 이러한 lint를 제공해주고 있습니다.

코드 작성시에 안드로이드에서 Typo나 발생할 수 있는 문제들을 알려주고 있는 것은,

lint 툴들이 동작하고 있기 때문입니다.

 

특정 파일을 정해서 체크할수도 있는데요.

네비게이션에서 체크를 할 파일을 선택하고,

오른쪽 마우스로 컨텍스트 메뉴를 열어서, 'Analyze > Inspect Code'를 해주면 해당 파일에 대해서 lint를 실행할 수 있습니다.

 

 

 

결과 값을 보면, typo라거나 코드에러등을 잡아주는 것을 볼 수 있습니다.

 

 

2. KTLint

KTLint 라이브러리는 pinterest 에서 만든 라이브러리인데요.

코틀린과 안드로이드 스타일 가이드를 따라서 만들어진 툴이므로,

가장 공식적인 코딩 컨벤션을 지켜주도록 하는 lint 툴이라고 할 수 있습니다.

 

 

참고로 코틀린언어의 코딩컨벤션은 아래링크에서 볼 수 있습니다.

>> https://kotlinlang.org/docs/coding-conventions.html

 

안드로이드에서의 코틀린 스타일 가이드는 다음에서 볼 수 있구요.

https://developer.android.com/kotlin/style-guide

 

KTLint 는 Kotlin과 Android 에서 제공하는 가이드들을 지킬 수 있도록,

lint 툴로 구현한 라이브러리 입니다.

 

3. Dependency 선언

3-1. ktlint 선언

ktlint 를 사용하기 위해서는 Dependency 를 선언해주어야 하는데요.

과정이 조금 복잡한 편입니다.

app레벨의 build.gradle 파일에 아래와 같이 구현을 추가해 주어야 하는데요.

configurations블록과, dependencies에 추가하는 부분,

마지막으로 task 부분의 코드들을 추가해 주어야 합니다.

 

 

 

configurations {
    ktlint
}

dependencies {
    ktlint("com.pinterest:ktlint:0.48.2") {
        attributes {
            attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
        }
    }

    ...
}

task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    classpath = configurations.ktlint
    mainClass.set("com.pinterest.ktlint.Main")
    args "src/**/*.kt"
    // see https://pinterest.github.io/ktlint/install/cli/#command-line-usage for more information
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "formatting") {
    description = "Fix Kotlin code style deviations."
    classpath = configurations.ktlint
    mainClass.set("com.pinterest.ktlint.Main")
    args "-F", "src/**/*.kt"
    // see https://pinterest.github.io/ktlint/install/cli/#command-line-usage for more information
}

 

버전이 바뀌면 이 부분도 업데이트 될 수 있으므로,

공식 가이드페이지인 아래 링크를 참조해 주시면 됩니다.

>> https://pinterest.github.io/ktlint/install/integrations/

 

참고로, gradle 에서 task에 대한 부분이 조금 생소할 수 있는데요.

이 키워드는 단순하게 애기해서 gradle에서 실행할 수 있는 script를 작성하는 곳 입니다.

실행은 위와 같이 IDE에서 할수도 있고, 커맨드라인에서 할수도 있습니다.

 

예를 들어서, gradle에 아래와 같은 코드 를 작성해 보겠습니다.

 

 

아래와 같이 실행되는 것을 볼 수 있습니다.

 

 

4. KTLint 실행

4-1. IDE에서 실행

실행방법은 위의 gradle의 설정화면에서,

task ktlint 부분의 좌측을 보면 play아이콘이 아래와 같이 나와있는 것을 볼 수 있는데요.

이 아이콘을 클릭하면 Run 메뉴가 보이고 이것을 선택해주면,

lint툴이 실행되어서, 컨벤션에 맞게 코딩이 잘 되었는지 체크해 줍니다.

 

 

실행해보면, 아래와 같이 문제점들을 짚어주는 것을 볼 수 있습니다.

 

 

한가지 주의할 점은 run실행아이콘은 최신 명령어를 기억하도록 되어있어서,

run을 할 때마다 ktlint가 실행되게 됩니다.

실행할 때, 이부분을 변경하는 방법은 아래 5번글을 참조해주세요.

 

 

task ktlintFormat부분에도 옆의 녹색 실행아이콘을 클릭한 후 , run을 선택해 줄 수 있습니다.

ktlintFormat은 코드를 분석해서,

코딩컨벤션이나 스타일가이드에 맞도록 자동으로 고칠 수 있는 것은 수정해주고,

아래와 같이 자동으로 수정해줄 수 없는 부분들은 결과를 표시 해 줍니다.

 

 

4-3. 터미널에서 실행하는 방법

터미널에서도 ktlint와 ktlintFormat을 실행할 수 있습니다.

프로젝트디렉토리의 루트디렉토리에서는 gradlew를 실행시킬 수 있는데요.

이것을 이용해 주면 됩니다.

ktlint는 아래 명령어로 실행하면 되구요.

 

./gradlew ktlintCheck

 

 

ktlintFormat은 아래 명령어로 실행해 주면 됩니다.

 

./gradlew ktlintFormat

 

터미널에서 이 방법으로 실행해주면 아래 5번에서 다루는 이슈가 발생하지 않는 것이 장점입니다.

 

5. RunFailure

만약 ktlint가 현재의 프로젝트 진행과 맞지 않아서 build.gradle 을 제거하거나, ktlint 없이 빌드를 해야할 경우가 있는데요.

ktlint부분을 제거해도, 안드로이드스튜디오에서 run아이콘으로 앱을 실행시키면 아래와 같은 failure가 발생하는 경우가 있습니다.

 

이것은 failure라기보다는, 안드로이드스튜디오를 사용하는 사람이 무심코 run아이콘을 실행하는 습관때문에 생긴것인데요.

run명령어가 가장 최신의 명령어를 기억하고 있고, 이전에 ktlint로 실행되었기 때문에 그것으로 run을 하는데,

해당 코드는 사라졌기 때문에 fail이 된 것입니다.

 

 

run 메뉴를 확인해 보시면 이것을 볼 수 있습니다.

ktlintFormat이 같이 run명령어에 포함되어 있는 것을 볼 수 있습니다.

이것 없이 app을 실행시키도록 해 주기만 하면 됩니다.

 

 

 

문제를 해결하기 위해서는, run 메뉴에서 "Run..."을 실행해주구요.

 

 

나오는 메뉴에서 app을 선택해주면 정상적으로 이전과 같이 동작하는 것을 볼 수 있습니다.

 

이 후에는 계속 app이 선택되어 기존과 같이 실행시킬 수 있습니다.

 

728x90

댓글