>  기사  >  Java  >  안드로이드 코드 품질을 향상시키는 4가지 도구

안드로이드 코드 품질을 향상시키는 4가지 도구

伊谢尔伦
伊谢尔伦원래의
2016-11-30 10:31:06980검색

이 글에서는 CheckStyle, FindBugs, PMD, Android Lint와 같은 다양한 자동화 도구를 통해 Android 코드의 품질을 향상시키는 방법을 소개하겠습니다. 자동화된 방식으로 코드를 검사하는 것은 특히 팀으로 작업할 때 코드의 엄격한 구문을 유지하고 많은 나쁜 습관과 실수를 피하기 위해 매우 유용합니다. 여유 시간에 Gradle 빌드 스크립트를 통해 이러한 도구를 직접 사용하는 방법과 구성 방법을 살펴보겠습니다.

안드로이드 코드 품질을 향상시키는 4가지 도구

예제를 포크하세요

제가 소개할 사례는 모두 이 프로젝트에서 나온 것이지만 이 프로젝트를 복사하는 것이 좋습니다. 그동안 이러한 도구에 대한 지식을 테스트할 수 있습니다.

Gradle 작업에 대하여

Gradle 작업의 개념(Gradle에서의 의미)은 이 글을 이해하고(그리고 Gradle 스크립트를 일반적인 방식으로 작성하는 방법) 기초가 됩니다. Gradle 작업에 관한 이 두 문서(this 및 this)를 읽어 보시기를 강력히 권장합니다. 이 문서에는 많은 예제가 포함되어 있으므로 시작하기가 매우 쉽습니다. 이제 귀하가 내 저장소를 복사하고 프로젝트를 Android Studio로 가져왔으며 Gradle 작업에 익숙하다고 가정합니다. 그렇지 않더라도 걱정하지 마십시오. 설명을 더 의미있게 만들기 위해 최선을 다하겠습니다.

샘플 프로젝트의 계층 구조 정보

gradle 스크립트 파일을 여러 파일로 분할할 수 있습니다. 현재 이미 3개의 gradle 파일이 있습니다.

루트 폴더에 파일이 있습니다. 이러한 파일은 이 프로젝트의 구성(Maven Repos가 사용되는지, 어떤 Gradle 버전이 사용되는지)에 관한 것입니다.

App 하위 폴더에 있는 파일은 Android 애플리케이션을 만드는 데 사용되는 일반적인 gradle 파일입니다.

config 하위 폴더에 있는 파일입니다. 여기 있는 파일은 프로젝트의 모든 도구를 저장하고 구성하는 데 사용되기 때문에 우리 관계의 핵심입니다.

 Checkstyle

 소개

 "Checkstyle은 프로그래머가 코드 사양에 맞는 Java 코드를 작성할 수 있도록 도와주는 개발 도구입니다. 게으른 사람들을 위해 Java 코드를 자동으로 검사할 수 있습니다. 이 지루한 (그러나 중요한) 작업입니다. "

Checkstyle 개발자가 말했듯이 이 도구는 프로젝트에서 매우 정확하고 유연한 코드 사양 형식을 정의하고 유지하는 데 도움이 될 수 있습니다. CheckStyle을 시작하면 제공된 구성 파일을 기반으로 Java 코드를 분석하고 발견된 오류를 알려줍니다.

Gradle 형식

다음 코드는 프로젝트(예: Gradle 작업)에서 Checkstyle을 사용하는 가장 기본적인 구성을 보여줍니다.

task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/config/quality/checkstyle/checkstyle.xml") // Where my checkstyle config is...
configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath 
// Where is my suppressions file for checkstyle is...
source 'src'
include '**/*.java'
exclude '**/gen/**'
classpath = files()
}

그래서 기본적으로 이 작업은 checkstyle.xml 및 억제.xml을 기반으로 코드를 분석합니다. Android Studio를 통해 실행하려면 CheckStyle 도구 패널에서 실행하면 됩니다.

CheckStyle을 시작한 후 프로젝트에서 발견된 모든 오류를 보여주는 보고서를 받게 됩니다. 이것은 매우 직접적인 방법입니다.

체크스타일에 대한 추가 구성을 원하시면 이 문서를 참고하세요.

체크스타일 활용팁

  Checkstyle会发现大量的问题,特别是在你运用了大量的规则配置,如同你设置了一个非常精确的语法。尽管我通过Gradle使用 checkstyle,例如在我进行推送之前,我仍然推荐你为IntellJ/Android Studio使用checkstyle插件(你可以通过Android Studio的工作面板文件/设置/插件直接安装插件)。这种方式下,你可以根据那些为Gradle配置的相同文件在你的工程中使用 checkstyle,但是远不止这些,你可以直接在Android Studio中获取带有超链接结果,这些结果通过超链接在你的代码中对应,这是非常有用的(Gradle的这种方式仍然很重要的,因为你可以使用它自动构建系统,如Jenkins)。

 Findbugs

  简介

  Findbugs是否需要一个简介呢?我想它的名称已经让人顾名思义了。“FindBugs使用静态分析方法为出现bug模式检查Java字节码”。FindBugs基本上只需要一个程序来做分析的字节码,所以这是非常容易使用。它能检测到常见的错误,如错误的布尔运算符。FindBugs也能够检测到由于误解语言特点的错误,如Java参数调整(这不是真的有可能因为它的参数是传值)。

 Gradle的形式

  下面的代码向你展示了在你的项目中使用Findbugs的最基本的配置(以Gradle任务为例):

task findbugs(type: FindBugs) {
ignoreFailures = false
effort = "max"
reportLevel = "high"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")
classes = files("${project.rootDir}/app/build/classes")
 
source 'src'
include '**/*.java'
exclude '**/gen/**'
 
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/findbugs/findbugs.xml"
}
html {
destination "$project.buildDir/reports/findbugs/findbugs.html"
}
}
 
classpath = files()
}

它是如此的像一个Checkstyle任务。尽管Findbugs支持HTML和XML两种报告形式,我选择HTML形式,因为这种形式更具有可读性。而且,你只需要把报告的位置设置为书签就可以快速访问它的位置。这个任务也会失败如果发现Findbgus错误失败(同样生成报告)。执行 FindBugs任务,就像执行CheckStyle任务(除了任务的名称是“FindBugs”)。

  Findbugs的使用技巧

  由于Android项目是从Java项目略有不同,我强烈推荐使用FindBugs过滤器(规则配置)。你可以在这一个例子(例如项目之一)。它基本上忽略了R文件和你的Manifest文件。顺便说一句,由于(使用)FindBugs分析你的代码,你至少需要编译一次你的代码才能够测试它。

 PMD

  简介

  这个工具有个有趣的事实:PMD不存在一个准确的名称。(所以)在官网上你可以发现很有有趣的名称,例如:

Pretty Much Done

Project Meets Deadline

  事实上,PMD是一个工作有点类似Findbugs的强大工具,但是(PMD)直接检查源代码而不是检查字节码(顺便说句,PMD适用很多语言)。 (PMD和Findbugs)的核心目标是相同的,通过静态分析方法找出哪些模式引起的bug。因此为什么同时使用Findbugs和PMD呢?好吧!尽管Findbugs和PMD拥有相同的目标,(但是)他们的检查方法是不同的。所以PMD有时检查出的bug但是Findbugs却检查不出来,反之亦然。

Gradle的形式

  下面的代码向你展示了在你的项目中使用PMD的最基本的配置(以Gradle任务为例):

task pmd(type: Pmd) {
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ignoreFailures = false
ruleSets = []
 
source 'src'
include '**/*.java'
exclude '**/gen/**'
 
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/pmd/pmd.xml"
}
html {
destination "$project.buildDir/reports/pmd/pmd.html"
}
}
}

 就PMD来说,它几乎与Findbugs相同。PMD支持HTML和XML两种报告形式,所以我再次选择HTML形式。我强烈建议你使用自己的通用配置集文件,正如同我在这个例子(check this file)中一样。所以,你当然应该去看下这些通用配置集文件。我建议你,因为PMD可比FindBugs更有争议的很多,例如:如果你不声明”if statement”或”if statement”为空,它基本上会给你警告信息。如果这些规则是正确的,或这对于您的项目(来说是正确的),我真的认可你和你队友的工作。我不希望程序因为”if statement”崩溃,我认为这样程序的可读性很差。执行PMD任务,就像是(执行)CheckStyle任务(除了任务的名称是“PMD”)。

  PMD的使用技巧

  我建议你不要使用默认的规则配置集,你需要添加这行代码(已经加上):

ruleSets = []


否则,因为默认值是这些基本的规则配置集,基本的规则配置集会和你定义的规则集一起执行。所以,如果你的自定义规则集不在那些基本配置集中,他们仍然会执行。

 Android Lint

  简介

  “Android lint工具是一个静态代码分析工具,它能检查安卓项目源文件的潜在缺陷和优化改进的正确性,安全性,性能,可用性,可访问性和国际化。”

 正如官方网站所说,Android Lint是另一种静态分析工具,专门为Android服务。它是非常强大的,能给你大量的建议以提高你的代码质量。

  Gradle的形式

android {
lintOptions {
abortOnError true
 
lintConfig file("${project.rootDir}/config/quality/lint/lint.xml")
 
// if true, generate an HTML report (with issue explanations, sourcecode, etc)
htmlReport true
// optional path to report (default will be lint-results.html in the builddir)
htmlOutput file("$project.buildDir/reports/lint/lint.html")
}

 我建议你使用一个单独的文件来定义哪些配置需要使用和不使用。这个网站根据最新的ADT版本定义了全部的配置。我的演示项目中的lint文件包含所有这些规则(ADT 21),包含等级为”ignore”的”severity”:

IconDensities:这个规则配置确保你定义每个图像资源中的(分辨率)密度(除了ldpi)。

IconDipSize:这个规则配置确保你为每个dip定义合适的资源(换句话来说,如果你没有为每个density设置相同的图片资源,则不需要重新设置图片大小)。

  所以你可以重用这个lint文件并激活你想要的所有规则。执行Android Lint任务,就像执行CheckStyle任务(除了任务的名称是”lint”)。

  Android Lint的使用技巧

  对于Android Lint没有什么特别的技巧,只需要牢记Android Lint会测试所有配置规则,除了那些等级为“ignore”的“severity”的配置。因此如果发布了新版本ADT下的新配置规则,他们将被检查,而不是忽视。 

实例演示

  现在,你有所有的方法为您的项目使用这四个工具。显然,如果我们能同时使用这四个工具会更好。你可以添加你的gradle任务之间的依赖,比如当你执行一个任务,其他任务则是第一个完成后执行。通常在Gradle中,通过让工具具有“check”任务来达到工具之间的相互关系:

 check.dependentOn 'checkstyle', 'findbugs', 'pmd', 'lint' 이제 "check" 작업을 실행하면 Checkstyle, Findbugs, PMD, Android Lint가 동시에 실행됩니다. 병합 요청/커밋/푸시/요청을 수행하기 전에 QA를 수행하는 좋은 방법입니다.

이 Gradle 파일에서 모든 작업의 ​​전체 예를 찾을 수 있습니다. 표시되는 데모 인스턴스에서 모든 품질 구성 파일과 Gradle 파일을 분리하여 "config/quality" 폴더에 함께 넣을 수 있습니다.

요약

이번 글에서는 Gradle을 이용하여 안드로이드용 코드 품질 검사 도구를 아주 쉽게 사용하는 방법을 설명합니다. 품질 도구를 사용하여 자신의 컴퓨터에서 프로젝트를 로컬로 확인하는 대신 이러한 도구를 사용하여 Jenkins/Hudson과 같은 플랫폼용 빌드를 자동화할 수 있으므로 빌드 프로세스를 자동화하는 동시에 품질 확인도 자동화할 수 있습니다. Jenkins/Hudson에서 실행되는 것처럼 CLI에서 노출한 모든 테스트를 실행하려면 다음을 실행하면 됩니다.

gradle check 이 게시물에 자유롭게 댓글을 달거나 Android 관련 질문을 해주세요.

원본 링크: Android 코드의 품질과 구문을 개선하는 방법


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.