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-2 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:lintRan lint on variant release: 58 issues foundRan lint on variant debug: 58 issues foundWrote HTML report to file:/Users/wuxian/Documents/sourcecode/self/Sunshine-Version-2/app/build/outputs/lint-results.htmlWrote XML report to /Users/wuxian/Documents/sourcecode/self/Sunshine-Version-2/app/build/outputs/lint-results.xmlBUILD SUCCESSFULTotal time: 17.941 secsThis build could be faster, please consider using the Gradle Daemon: http://gradle.org/docs/2.4/userguide/gradle_daemon.html
在build/outputs/目錄下會產生一個lint-result.html檔案,開啟一看如下:
報告做的太次了<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="總結">總結
這種方式適合自動化CI系統中採集結果。
手動分析
選在分析代碼後,彈出對話方塊,你可以選擇分析整個項目/單個模組/檔案bulabula:
點擊OK後,等待一段時間後分析完畢,會自動彈出結果視窗
會根據檢查類型不同分不同菜單,點擊相應菜單進入不同的問題點:
點擊問題點後右邊會出現該問題的詳細資料,檔案名稱,檔案位置,出現問題的點在檔案中的位置以及問題描述,還會告訴你忽略這個問題的解決方案,有可能還會顯示解決方案。
總結
這個方法適合看法自查!
lint命令列
lint工具位於sdk目錄下的tools下,如果在命令列執行lint找不到該命令,那麼需要將lint的根目錄配置到環境變數中,配置成功後,執行lint命令輸出如下:
58deMacBook-Pro-5:tools wuxian$ lintUsage: lint [flags] Flags:--help This message.--help Help on the given topic, such as suppress.--list List the available issue id's 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.--show Show full explanations for the given list of issue id's.Enabled Checks:--disable Disable the list of categories or specific issue id's. The list should be a comma-separated list of issue id's or categories.--enable Enable 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 id's or categories.--check Only 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 id's 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--config Use 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 Don't 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.--html Create 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--simplehtml Create a simple HTML report--xml Create an XML report instead.Project Options:--resources
Add 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.