首页 > 其他分享 >Android代码规范利器: Checkstyle

Android代码规范利器: Checkstyle

时间:2022-11-10 21:01:26浏览次数:65  
标签:pre git Checkstyle SCRIPT -- 利器 commit Android checkstyle


程序代码向来都不仅仅是用来运行的,写的一手好代码,易读,可维护应该是每个程序员所追求的。

每个团队都(应该)有一套优良统一的代码规范,而规范的检查依赖于人工检测就不太现实,好在我们有一些分析工具可以辅助我们做这件事。

checkstyle是一个帮助我们检查java代码规范的工具。checkstyle具有很强的配置性。本文将简单介绍一些实用的checkstyle知识。

配置checkstyle

如下修改Project的build.gradle文件



allprojects {
repositories {
jcenter()
}
apply plugin: 'checkstyle'
task checkstyle(type: Checkstyle) {
source 'src'
include '**/*.java'
exclude '**/gen/**'
exclude '**/R.java'
exclude '**/BuildConfig.java'
configFile new File(rootDir, "checkstyle.xml")
// empty classpath
classpath = files()
}
}

设置checkstyle配置文件

  • 每一个checkstyle配置文件必须包含Checker作为根module
  • TreeWalker module用来遍历java文件,并定义一些属性。
  • ThreeWalker module包含了多个子module,用来进行检查规范。

注:checkstyle的配置文件,这里名称为checkstyle.xml 位置为项目根目录即可。

一个简单的checkstyle配置文件如下,包含了检测import,whitespace,blocks等module.



<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">


<module name="TreeWalker">

<!-- Checks for imports -->
<!-- See http://checkstyle.sf.net/config_import.html -->

<module name="IllegalImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports">
<property name="processJavadoc" value="true"/>
</module>

<module name="FallThrough"/>

<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->

<module name="GenericWhitespace"/>
<module name="EmptyForIteratorPad"/>
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad"/>
<module name="WhitespaceAfter"/>
<module name="WhitespaceAround"/>

<!-- Checks for blocks. You know, those {}'s -->
<!-- See http://checkstyle.sf.net/config_blocks.html -->
<module name="AvoidNestedBlocks"/>
<module name="LeftCurly"/>
<module name="RightCurly"/>
<module name="NeedBraces">
<property name="tokens" value="LITERAL_DO, LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE"/>
</module>

</module>
</module>

一些关于checkstyle配置的链接

使用

在终端使用checkstyle很简单,操作如下。



10:31:36-androidyue~/coding/CheckstyleSample$ ./gradlew checkstyle
:checkstyle UP-TO-DATE
:app:checkstyle

BUILD SUCCESSFUL

Total time: 10.819 secs

Android Studio Run之前执行checkstyle

1.选择菜单​​Run--Edit Configurations​​​ 2.选择​​Android Application--app​​,然后点击​​Before Launch​​区域的绿色加号

Android代码规范利器: Checkstyle_java


3.点击下拉菜单​​Gradle-aware Make​​,出现如下输入对话框

Android代码规范利器: Checkstyle_java_02


4.输入checkstyle,然后从联想列表中选择对应的checkstyle,保存。

5.再次运行就可以从Gradle Console中看到有checkstyle任务先执行了。

注意:如果上面的checkstyle失败,则不进行后续的run操作。

每次git commit执行checkstyle

除此之外,我们还可易利用git的hooks,进行一些很cool的事情。比如在每次commit之前自动执行checkstyle检测代码规范。

思路就是,利用git的pre-commit hook,执行checkstyle,如果没有违背规范的地方,就继续执行commit,否则不执行。

关键代码如下:


SCRIPT_DIR=$(dirname "$0")
SCRIPT_ABS_PATH=`cd "$SCRIPT_DIR"; pwd`
$SCRIPT_ABS_PATH/../../gradlew checkstyle
if [ $? -eq 0 ]; then
echo "checkstyle OK"
else
exit 1
fi

hook文件路径为​​.git/hooks/pre-commit​​。

完整的pre-commit脚本


#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

SCRIPT_DIR=$(dirname "$0")
SCRIPT_ABS_PATH=`cd "$SCRIPT_DIR"; pwd`
$SCRIPT_ABS_PATH/../../gradlew checkstyle
if [ $? -eq 0 ]; then
echo "checkstyle OK"
else
exit 1
fi


# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --bool hooks.allownonascii)

# Redirect output to stderr.
exec 1>&2

# Cross platform projects tend to avoid non-ASCII filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
# Note that the use of brackets around a tr range is ok here, (it's
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
test $(git diff --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOF
Error: Attempt to add a non-ASCII file name.

This can cause problems if you want to work with people on other platforms.

To be portable it is advisable to rename the file.

If you know what you are doing you can disable this check using:

git config hooks.allownonascii true
EOF
exit 1
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

完整下载地址为:​​pre-commit​

注意,放入本地后,需要确保该文件具有可执行权限。如​​chmod a+x pre-commit​

——————————————-华丽的风格线——————————————————–


标签:pre,git,Checkstyle,SCRIPT,--,利器,commit,Android,checkstyle
From: https://blog.51cto.com/u_3987305/5842094

相关文章

  • 技巧篇 - Android Studio Build Failure 错误直观展示
    LZ-Says:爱走了,心痛了,一切,又将如何?前言技术,以原点为中心,周围不断辐射,形成独特圈子。AndroidStudio作为谷歌Baba亲儿子,继承了其优秀的血统之外,还增加很多nice的小tips......
  • 解决Checkstyle File Name 异常的问题
    Checkstyle是一款很棒的工具,用来发现很多编码风格的问题。还不了解的同学可以移步这里​​Android代码规范利器:Checkstyle​​查看。但是在使用Checkstyle时,却出现了一些问......
  • 解决Android手机连接Charles Unknown问题
    最近很多同事反馈使用Charles抓包出现了很多unknown的问题,现象如下图查看右侧的原因,给出的结果是这样的这里将讲解如何解决这个问题,但是开始阅读之前,请确认符合如下的条件本......
  • Android中实现用户无感知处理后台崩溃
    正所谓,要想没有bug,就一行代码也不写。App到了用户的手里,肯定是崩溃越少越好。Android中的崩溃处理和iOS不太一样,iOS崩溃通常是闪退,而安卓会出现如下的蹩脚的对话框当你的用......
  • Android开发实用工具类之Log类
    哈喽,大家好!LZ是一名Android开发小鼠,个人开发过程中,不可避免的会遇到打Log查看日志的情况,大大滴方便省事,在此共享一个Log工具类,方便你我他~首先还是说一下为什么要使用Log......
  • Android开发实用工具类之数据校验类
    啦啦啦,今天为大家带来开发中会遇到的相关数据校验类,方便你我他~欢迎大家提供更好更棒的方式~代码一波来袭~packagecom.heliquan.test.util;importjava.text.SimpleDateFor......
  • Android Study之图解配置adb
    LZ-Says:话说中午看到苹果将要发布所谓的中国红,,,心里顿时有些小恶心,,,丫的,,,期待好久,,,就是这个结果,,,还是怀念乔帮主的时代啊~身为一名Android开发,ADB这个东西不可避免都会用到,当你如......
  • 说说关于Android使用Gson解析Json所需实体类的那些事~
    LZ-Says:技术,真的是日积月累,厚积薄发~前言目前解析json的方法有很多种,LZ个人认为使用Gson还是一种很不错的选择,因为使用Gson时,我们只需要考虑将json中参数和实体类属性一一对......
  • 涨姿势 之 Android Studio 3.5 设置类模版
    L-J_Q:遇到小赖皮怎么破?前言最近更新完AndroidStudio3.5后,突然发现之前设置的一些东西通通消失了,记得是覆盖呀。最无奈的一点就是每次新建类,都需要手动添加类注释,今天......
  • 涨姿势 之 Android Studio 解决 no module
    LZ-Says:总有一份关心,深入内心。前言终于多少明白鸡大说的沉浸,沉淀了。还好,最近的日子,充实,开森,爽~Today,不忍我的MBP桌面吃灰且也不想天天背着电脑挤地铁,最关键的还是我想......