开始做这样一个东西是为了帮助开发减少代码方面的问题,提高代码质量,减小以后上线的风险。前面看了 360 的那个静态代码扫描感觉很强大,但目前没这实力去做成这样,希望早日开源,多多学习。所以就先用开源的也能解决下问题。

怎么来的

开始做是想直接使用 sonar 自带的 android 静态代码扫描,但后面发现不是很好用,而且 sonar 对于移动端的扫描能力好像也不是很强。

后面在逛 github 时发现一个项目,就是关于 android 的代码扫描的,觉得思路不错,而且扩展性也不错,就参考了这个项目,传送门

怎么做的

我们项目是用 gradle 进行编译,我用的方法比较 low,每次 jenkins 拉下代码后,直接用自己的 gradle 文件替换项目的文件,然后将配置文件夹 config 直接拷进项目。

说下 gradle 文件吧,主要是先引用 config/quality.gradle 这个 gradle 文件,主要是添加apply from: '../config/quality.gradle',

quality.gradle这个文件定义了包括 checkstyle,findbugs,pmd,lint 这些扫描工具的任务,因为现在我们项目的 android 代码没有定义规范,所以 checkstyle 就没用,文件内容如下:

```

apply plugin: 'findbugs'

apply plugin: 'pmd'

/*

Copyright 2015 Vincent Brison.

*

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

*

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

*/

// Add checkstyle, findbugs, pmd and lint to the check task.

check.dependsOn 'findbugs', 'pmd', 'lint'

task findbugs(type: FindBugs, dependsOn: assembleDebug) {

ignoreFailures = true # 注意这里需要设置为 true,否则有失败就会停止,后面的任务就不会跑了

effort = "max"

reportLevel = "low"

excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")

classes = files("${project.rootDir}/app/build/intermediates/classes")

source 'src'

include '/*.java'

exclude '/gen/**'

reports {

xml.enabled = true # 因为需要在 jenkins 中集成,所以需要开启 xml

html.enabled = false # 而且 xml 和 html 只能开启一个,注意关掉 html 哦

xml {

destination "$project.buildDir/reports/findbugs/findbugs.xml"

}

html {

destination "$project.buildDir/reports/findbugs/findbugs.html"

}

}

classpath = files()

}

task pmd(type: Pmd) {

ignoreFailures = true # 注意这里需要设置为 true,否则有失败就会停止,后面的任务就不会跑了

ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")

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"

}

}

}

android {

lintOptions {

abortOnError true

xmlReport false

htmlReport true

lintConfig file("${project.rootDir}/config/quality/lint/lint.xml")

htmlOutput file("$project.buildDir/reports/lint/lint-result.html")

xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")

}

}

### 怎么集成的

1. 下载`gradle`编译的插件,并且在系统管理中配置gradle的路径

2. 下载`findbugs`,`pmd`以及`lint`相应的插件

3. 插件都弄完后,在jenkins中创建任务,指定拉去代码仓库,跑下shell脚本替换指定文件,并且加入config目录

4. 指定gradle的task`clean findbugs pmd lint`

5. 如有需要指定需要什么什么跑

6. 然后再配置各个插件收集结果的xml文件,注意需要设置`Run always`,根据自己的需求进行配置

7. 设置邮件模版,将结果发给指定的开发基本就完成了

![](/photo/2016/ad1da298153d8d8d1a395a71a7d30b7d.png)

### 后续

目前还处在试验阶段,开发对这东西也还不怎么习惯,毕竟以前有些人以前都不会怎么关注代码的一些质量问题,并且相关的问题信息都是英文的...不过基本还是正向的,毕竟以后代码质量优化这块肯定要做的,而且确实代码一些潜在问题可能现在看不出,但这都是隐患。另外有些规则确实也没什么卵用,所以现在需要开发在磨合过程中,逐渐完善扫描规则,让扫描不是一个摆设。

android静态代码扫描,android 静态代码扫描相关推荐

  1. 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研

    想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...

  2. OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...

  3. java 静态扫描_静态代码扫描工具 – (八)- 扫描Java项目

    静态代码扫描工具 – (八)- 扫描Java项目 1.准备好Java项目代码 只要是java语言实现的项目均可. 比如,自动化测试的代码,测试平台等均可以. 本次案例,使用java语言实现的测试平台来 ...

  4. android 代码打开nfc,android-NFC标签扫描仅触发我的应用程序启动

    我有一个可扫描NFC标签,从标签收集数据并将该数据发送到服务器的应用程序.标签上的数据采用以下格式: 1,3,30012,somebodys name 这些标签放置在客户的房屋中,以供护理人员扫描.每 ...

  5. 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

    文章目录 I . 创建 NDK 项目 II . NDK 项目 相关配置 III . NDK 中获取 Android 版本号 IV . 使用 __system_property_get 可获取的参数 I ...

  6. Android系统性能优化(59)----代码、图片和布局优化

    Android优化系列--代码.图片和布局优化 这篇文章分为三个部分代码优化.图片优化.布局优化,尽量每个方法都写了小的Demo! 代码优化:不要做多余的工作,尽量避免次数过多的内存的分配,(需要对a ...

  7. android 代码浅黄色,Android工程中让人很不爽的“黄色警告”

    一些黄色警告 在XML中: 警告信息:[I18N] Hardcoded string "Button" , should use @string resource 意思大概是: 按 ...

  8. 代码扫描 | 把控代码质量的利器

    本文作者:潘金赤 -- CODING 产品总监 腾讯云研发平台负责人,十年研发能效建设经验 CODING 代码扫描产品负责人 有位小伙子在办公大楼门口抽烟,一位路人经过他的身边对他说:"你知 ...

  9. 好东西(Android开发人员不得不收集的代码)

    各种帮助类汇总:https://github.com/Blankj/AndroidUtilCode 常用的 ios 风格 dialog 和 meterial design 风格的 dialog:htt ...

最新文章

  1. pandas使用query函数基于判断条件获得dataframe中满足条件的数据行(row)的索引列表(index of rows matching conditions in dataframe)
  2. github搜索不能用
  3. 2.10 词嵌入除偏-深度学习第五课《序列模型》-Stanford吴恩达教授
  4. java 反射应用_java反射(二)--反射应用案例
  5. CSS文本超出2行就隐藏并且显示省略号
  6. python基础学习教程:Python基础语法
  7. java wordcount程序_[java]wordcount程序
  8. 【HDU - 4348】To the moon(主席树,区间更新)
  9. json为全局变量 vue_Vue-cli开发笔记二----------接口调用、配置全局变量
  10. 默 of 2018:年终总结
  11. 几何布朗 matlab,几何布朗运动
  12. 计算机认知矫正治疗游戏,CCRT认知矫正系统_计算机认知矫正系统_认知行为矫正治疗系统-3618医疗器械网...
  13. printf二进制数据
  14. 收获与努力同行——2015年总结
  15. 三角形问题 -软件测试
  16. 山科计算机科学与技术学院,山东科技大学-计算机科学与工程学院
  17. LSI阵列卡查看SSD寿命
  18. 1.3 计算机网络的功能
  19. 《现代软件工程-构建之法》读书笔记(1)
  20. 制度罚则--上线结果通知模板

热门文章

  1. leetcode 438. Find All Anagrams in a String | 438. 找到字符串中所有字母异位词(Java)
  2. 【Spring】Spring第一天 - 环境搭建、IoC 详解、DI 详解等
  3. 网易2019实习生招聘题目 被3整除
  4. 懂集合吗?对,是dart中的集合
  5. ECMAScript 2019(ES10)新特性简介
  6. java安全编码指南之:输入注入injection
  7. Spring Cloud sleuth with zipkin over RabbitMQ教程
  8. c++堆栈溢出怎么解决_c语言进阶:堆栈原理揭秘
  9. kotlin学习之密封类(五)
  10. Effective Java之避免使用终结方法(七)