java lint_Android静态代码检查-Lint

参考文章:

Improving Your Code with lint

lint

使用 lint 增强你的代码

Android Lint简介

gradle lint

gradle中有lint任务,可以直接履行lint静态代码检查,但是条件是你的build.gradle设置了lintOptions选项:

android {

compileSdkVersion 23 buildToolsVersion "21.1.2" lintOptions {

abortOnError false }

然后我们在项目的根目录下履行gradle lint:

localhost:Sunshine-Version⑵ wuxian$ gradle lint :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72102Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42102Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl UP-TO-DATE :app:compileDebugRenderscript UP-TO-DATE :app:generateDebugBuildConfig UP-TO-DATE :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets UP-TO-DATE :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources UP-TO-DATE :app:mergeDebugResources UP-TO-DATE :app:processDebugManifest UP-TO-DATE :app:processDebugResources UP-TO-DATE :app:generateDebugSources UP-TO-DATE :app:processDebugJavaRes UP-TO-DATE :app:compileDebugJavaWithJavac UP-TO-DATE :app:compileLint :app:checkReleaseManifest :app:prepareReleaseDependencies :app:compileReleaseAidl UP-TO-DATE :app:compileReleaseRenderscript UP-TO-DATE :app:generateReleaseBuildConfig UP-TO-DATE :app:generateReleaseAssets UP-TO-DATE :app:mergeReleaseAssets UP-TO-DATE :app:generateReleaseResValues UP-TO-DATE :app:generateReleaseResources UP-TO-DATE :app:mergeReleaseResources UP-TO-DATE :app:processReleaseManifest UP-TO-DATE :app:processReleaseResources UP-TO-DATE :app:generateReleaseSources UP-TO-DATE :app:processReleaseJavaRes UP-TO-DATE :app:compileReleaseJavaWithJavac UP-TO-DATE :app:lint Ran lint on variant release: 58 issues found

Ran lint on variant debug: 58 issues found

Wrote HTML report to file:/Users/wuxian/Documents/sourcecode/self/Sunshine-Version⑵/app/build/outputs/lint-results.html

Wrote XML report to /Users/wuxian/Documents/sourcecode/self/Sunshine-Version⑵/app/build/outputs/lint-results.xml

BUILD SUCCESSFUL

Total time: 17.941 secs

This build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html

在build/outputs/目录下会生成1个lint-result.html文件,打开1看以下:

1f9175f8ee048d663633bbc5b4eee470.png

报告做的太次了

更多参数

lintOptions {

// set to true to turn off analysis progress reporting by lint

quiet true // if true, stop the gradle build if errors are found abortOnError false // if true, only report errors

ignoreWarnings true // if true, emit full/absolute paths to files with errors (true by default)

//absolutePaths true // if true, check all issues, including those that are off by default checkAllWarnings true // if true, treat all warnings as errors

warningsAsErrors true // turn off checking the given issue ids

disableTypographyFractions,TypographyQuotes// turn on the given issue ids

enable RtlHardcoded,RtlCompat, RtlEnabled // check *only* the given issue ids

checkNewApi,InlinedApi// if true, dont include source code lines in the error output noLines true // if true, show all locations for an error, do not truncate lists, etc.

showAll true // Fallback lint configuration (default severities, etc.)

lintConfig file("default-lint.xml")

// if true, generate a text report of issues (false by default)

textReport true // location to write the output; can be a file or stdout

textOutput stdout

// if true, generate an XML report for use by for example Jenkins

xmlReport false

// file to write report to (if not specified, defaults to lint-results.xml)

xmlOutput file("lint-report.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("lint-report.html")

// set to true to have all release builds run lint on issues with severity=fatal

// and abort the build (controlled by abortOnError above) if fatal issues are found checkReleaseBuilds true // Set the severity of the given issues to fatal (which means they will be

// checked during release builds (even if the lint target is not included)

fatal NewApi, InlineApi // Set the severity of the given issues to error

error Wakelock, TextViewEdits // Set the severity of the given issues to warning

warning ResourceAsColor // Set the severity of the given issues to ignore (same as disabling the check)

ignore TypographyQuotes }

总结

这类方式合适自动化CI系统中收集结果。

手动分析

4842c55b4cc305c5d6cc617dcd8bdc2c.png

选在分析代码后,弹出对话框,你可以选择分析全部项目/单个模块/文件bulabula:

a0403603dca425c4f4f9c0e001256642.png

点击OK后,等待1段时间后分析终了,会自动弹出结果窗口

0e2343af963dfd90f5789409d01fe588.png

e4fde3402cb21ced803912233df2cf22.png

会根据检查类型不同分不同菜单,点击相应菜单进入不同的问题点:

1229b4a5ba81073d38ad5ef64e802209.png

点击问题点后右侧会出现该问题的详细信息,文件名,文件位置,出现问题的点在文件中的位置和问题描写,还会告知你疏忽这个问题的解决方法,有可能还会显示解决方法。

总结

这个方法合适开发自查!

lint命令行

lint工具位于sdk目录下的tools下,如果在命令行履行lint找不到该命令,那末需要将lint的根目录配置到环境变量中,配置成功后,履行lint命令输出以下:

58deMacBook-Pro-5:tools wuxian$ lint

Usage: lint [flags]Flags: --help This message. --helpHelp on the given topic, such as "suppress". --list List the available issue ids and exit. --version Output version information and exit. --exitcode Set the exit code to 1 if errors are found. --show List available issues along with full explanations. --showShow full explanations for the given list of issue ids.

Enabled Checks: --disableDisable the list of categories or specific issue ids. The list should be a comma-separated list of issue ids or categories. --enableEnable the specific list of issues. This checks all the default issues plus the specifically enabled

issues. The list should be a comma-separated list of issue ids or categories. --checkOnly check the specific list of issues. This will disable everything and re-enable the given list of issues. The list should be a comma-separated list of issue ids or categories.

-w, --nowarn Only check for errors (ignore warnings) -Wall Check all warnings, including those off by default -Werror Treat all warnings as errors --configUse the given configuration file to determine whether issues are enabled or disabled. If a project contains

a lint.xml file, then this config file will be used

as a fallback.

Output Options: --quiet Dont show progress. --fullpath Use full paths in the error output. --showall Do not truncate long messages, lists of alternate locations, etc. --nolines Do not include the source file lines with errors in the output. By default, the error output includes

snippets of source code on the line containing the

error, but this flag turns it off. --htmlCreate an HTML report instead. If the filename is a directory (or a new filename without an extension),

lint will create a separate report for each scanned

project. --url filepath=url Add links to HTML report, replacing local path prefixes with url prefix. The mapping can be a

comma-separated list of path prefixes to corresponding URL prefixes, such as

C:empProj1=http://buildserver/sources/temp/Proj1. To turn off linking to files, use --url none --simplehtmlCreate a simple HTML report --xmlCreate an XML report instead. Project Options: --resourcesAdd the given folder (or path) as a resource directory for the project. Only valid when running

lint on a single project. --sourcesAdd the given folder (or path) as a source directory for the project. Only valid when running lint on a

single project. --classpathAdd the given folder (or jar file, or path) as a class directory for the project. Only valid when running lint on a single project. --librariesAdd the given folder (or jar file, or path) as a class library for the project. Only valid when running lint on a single project. Exit Status: 0 Success. 1 Lint errors detected. 2 Lint usage. 3 Cannot clobber existing file. 4 Lint help. 5 Invalid command-line argument.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值