ホームページ Java &#&チュートリアル Android コードの品質を向上させる 4 つのツール

Android コードの品質を向上させる 4 つのツール

Nov 30, 2016 am 10:31 AM
android コードの品質 道具

この記事では、CheckStyle、FindBugs、PMD、Android Lint などのさまざまな自動化ツールを通じて Android コードの品質を向上させる (方法) を紹介します。自動化された方法でコードをチェックすることは、コード内の厳密な構文を維持し、多くの悪い習慣や間違いを避けるために、特にチームで作業する場合に非常に役立ちます。好きなときに Gradle ビルド スクリプトを通じてこれらのツールを直接使用する方法と、その構成方法について説明します。

Android コードの品質を向上させる 4 つのツール

Fork this example

これから紹介する事例はすべてこのプロジェクトからのものですが、このプロジェクトをコピーすることを強くお勧めします。同時に、これらのツールに関する知識をテストすることもできます。

Gradle タスクについて

Gradle タスクの概念 (Gradle における意味) は、この記事 (および一般的な方法での Gradle スクリプトの書き方) を理解するための基礎となります。 Gradle タスクに関するこれら 2 つのドキュメント (これとこのドキュメント) を読むことを強くお勧めします。このドキュメントには多くの例が含まれているため、非常に簡単に始めることができます。さて、私のリポジトリをコピーし、プロジェクトを 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 でさらに設定を行いたい場合は、このドキュメントを参照してください。

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.dependsOn ‘checkstyle’, ‘findbugs’, ‘pmd’, ‘lint’ これで、「check」タスクを実行すると、Checkstyle、Findbugs、PMD、Android Lintが同時に実行されるようになります。 /commit / Push / ask マージ リクエストを実行する前に QA を行うのに最適な方法です。

すべてのタスクの完全な例は、この Gradle ファイルにあります。表示されるデモ インスタンスからすべての品質設定ファイルと Gradle ファイルを分離し、それらを「config/quality」フォルダーにまとめることができます。

まとめ

この記事では、Gradleを使ったAndroid用コード品質検査ツールの使い方がとても簡単です。品質ツールを使用して自分のコンピューター上でプロジェクトをローカルにチェックするのではなく、これらのツールを使用して Jenkins/Hudson などのプラットフォームのビルドを自動化することができ、ビルド プロセスを自動化しながら品質チェックも自動化できます。 CLI から公開したすべてのテストを、あたかも Jenkins/Hudson で実行されているかのように実行するには、次のコマンドを実行するだけです:

gradle check この投稿にコメントしたり、Android 関連の質問があればお気軽にどうぞ。

元のリンク: Android コードの品質と構文を改善する方法


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? ランプアーキテクチャの下でnode.jsまたはPythonサービスを効率的に統合する方法は? Apr 01, 2025 pm 02:48 PM

多くのウェブサイト開発者は、ランプアーキテクチャの下でnode.jsまたはPythonサービスを統合する問題に直面しています:既存のランプ(Linux Apache MySQL PHP)アーキテクチャWebサイトのニーズ...

APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? APSChedulerタイミングタスクをMACOSのサービスとして構成する方法は? Apr 01, 2025 pm 06:09 PM

nginと同様に、APSChedulerタイミングタスクをサービスとして構成する場合、APSChedulerタイミングタスクをMACOSプラットフォームでサービスとして構成します...

Pythonパラメーター注釈は文字列を使用できますか? Pythonパラメーター注釈は文字列を使用できますか? Apr 01, 2025 pm 08:39 PM

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Langchainでは、Ageentexecutorを使用して、無効なinitialize_agent関数を置き換えるにはどうすればよいですか? Langchainでは、Ageentexecutorを使用して、無効なinitialize_agent関数を置き換えるにはどうすればよいですか? Apr 01, 2025 pm 04:18 PM

Langchainの無効なinitialize_agent関数を置き換える方法は? Langchainライブラリで、initialize_agent ...

Windowsの下のpython .whlファイルをどこからダウンロードしますか? Windowsの下のpython .whlファイルをどこからダウンロードしますか? Apr 01, 2025 pm 08:18 PM

Pythonバイナリライブラリ(.whl)のダウンロードメソッドは、Windowsシステムに特定のライブラリをインストールする際に多くのPython開発者が遭遇する困難を調査します。一般的な解決策...

ChatGpt時代には、技術的なQ&Aコミュニティは課題にどのように対応できますか? ChatGpt時代には、技術的なQ&Aコミュニティは課題にどのように対応できますか? Apr 01, 2025 pm 11:51 PM

ChatGpt時代のテクニカルQ&Aコミュニティ:SegmentFaultの対応戦略StackOverFlow ...

DebianでMongodbの高可用性を確保する方法 DebianでMongodbの高可用性を確保する方法 Apr 02, 2025 am 07:21 AM

この記事では、Debianシステムで非常に利用可能なMongoDBデータベースを構築する方法について説明します。データのセキュリティとサービスが引き続き動作し続けるようにするための複数の方法を探ります。キー戦略:レプリカセット:レプリカセット:レプリカセットを使用して、データの冗長性と自動フェールオーバーを実現します。マスターノードが失敗すると、レプリカセットが自動的に新しいマスターノードを選択して、サービスの継続的な可用性を確保します。データのバックアップと回復:MongoDumpコマンドを定期的に使用してデータベースをバックアップし、データ損失のリスクに対処するために効果的な回復戦略を策定します。監視とアラーム:監視ツール(プロメテウス、グラファナなど)を展開して、MongoDBの実行ステータスをリアルタイムで監視し、

See all articles