「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」html
随着技术团队的扩大与开发人员的增加,软件开发必然要实现工程化,所以用静态扫描实现的代码规范管理以及与Gitlab分支管理结合的实践流程就出现了。前端
多人协做的项目中,基于代码稳定性以及代码安全(不安全的API使用和逻辑编写)的考虑,必然要出现团队内的代码风格规范,而为了解决“代码编写听从风格规范全凭开发人员自觉、缺少提示、检查和卡点机制”这一问题,静态代码扫描检查在团队协做的软件工程项目是必不可缺的一环。android
日志打印 必须使用统一封装的打印方法,禁止使用System.out.print\android.util.Log,方便release版本禁止在 logcat 输出信息出现数据泄露的状况。git
错误示范github
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ......
Log.d("writelog", "start activity")
// ......
}
}
复制代码
setHostnameVerifier 方法调用 禁止调用 setHostnameVerifier 方法设置 ALLOW_ALL_HOSTNAME_VERIFIER 属性,以免中间人攻击劫持,应用使用 STRICT_HOSTNAME_VERIFIER 属性。后端
错误示范安全
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ......
val schemeregistry = SchemeRegistry()
val sslsocketfactory = SSLSocketFactory.getSocketFactory()
// set STRICT_HOSTNAME_VERIFIER
sslsocketfactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)
// ......
}
}
复制代码
还有诸如必须给继承Activity、Fragment的文件添加注释方便理解;Activity必须继承Activity基础类;Fragment必须继承Fragment基础类等团队开发规范问题。markdown
因为咱们团队开发已实现全Kotlin化,Kotlin经常使用的静态代码扫描方案有Detekt以及ktlint。app
对好比下: socket
因为我这边并不须要分析潜在性能与bug问题的功能,以及基于轻量化的目的,采用的是Kotlin官方推荐的ktlint工具。
咱们采起了项目中使用Gradle集成ktlint的方式来集成ktlint规则,可参考ktlint主页。
...
configurations {
ktlint
}
...
dependencies {
...
ktlint("com.pinterest:ktlint:0.41.0") {
attributes {
attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
}
}
...
}
...
task ktlint(type: JavaExec, group: "verification") {
description = "Check Kotlin code style."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-a", "src/**/*.kt", "--reporter=html,output=${buildDir}/ktlint.html"
}
check.dependsOn ktlint
task ktlintFormat(type: JavaExec, group: "formatting") {
description = "Fix Kotlin code style deviations."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-F", "src/**/*.kt"
}
复制代码
静态检查代码是否符合规范
Mac或者Lunix系统执行:./gradlew ktlint;
window系统执行:gradlew ktlint;
会执行代码检查任务,而后会在./app/build/文件夹生成ktlint.html报告。
自动修改代码符合规范
Mac或者Lunix系统执行:./gradlew ktlintFormat;
window系统执行:gradlew ktlintFormat;
会执行自动修改代码符合规范任务。
经过上文,咱们理解了为什么要进行静态代码扫描以及使用ktlint对项目代码进行扫描检查是否符合Kotlin官方代码风格规范,固然在实际实践中要如何限制团队成员遵照规范,毕竟不可能强行要求团队成员每次都使用gradle命令检查代码,这部份内容是咱们下一步要讲解的内容。 若是个人文章对你有帮助或启发,辛苦大佬们点个赞👍🏻,支持我一下。 若是有错漏,欢迎大佬们指正,也欢迎你们一块儿讨论,感谢。