在AndroidStudio中使用FindBugs

本篇文章讲解使用配置gradle task的方式集成findbugs插件,不用在AndroidStudio的插件系统中安装任何东西,同步下gradle就可以使用,方便团队内成员写完代码后用FindBugs进行检查。

基本配置

在 app/build.gradle 中最上面指明使用的plugin,如下

1
apply plugin: "findbugs"

再添加一个task,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	task findbugs(type: FindBugs, dependsOn: 'assembleDebug') {
// 过滤器
excludeFilter file("findbugs-filter.xml")
// 有警告错误的时候允许构建
ignoreFailures = true
effort = "default"
// 报告级别 low|medium|high
reportLevel = "medium"
println("$project.buildDir")
classes = files("$project.buildDir/intermediates/classes")
source = fileTree("src/main/java/")
classpath = files()
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/findbugs.xml"
}
html {
destination "$project.buildDir/findbugs.html"
}
}
}

其中各项参数含义为
excludeFilter
effort
reportLevel
classes
source
reports

我也试图在网上找一些关于使用 JitPack.io 的教程,但是搜出来的基本是这篇的复制品,根本没讲什么实质性的东西,所以一切只好自己来了。

本项目源码地址: GitHub/icodeu/HelloLibrary

如何写 library

在本节,我们一起来新建个 library,打开 Android Studio,New Project,在此工程名为 Hellolibrary,此后一直点击 next 直至 finish 即可。此时应该是只有一个 module 名为 app,一会我们会把它当做依赖 library 的示例模块来使用,暂时先不管,我们先来创建一个 library,File->New->Module,选择 Android library,之后起个名字,在此叫做 library,finish 即可,此时工程目录如下所示,其中 app 用来依赖使用 library。

img
img
img
img

怎么指定一个 module 到底是普通的 application 还是 library 呢?打开 module 对应的 build.gradle 文件,看第一行 apply plugin: xxx,如果是 application 的话,plugin 就是 ‘com.android.application’,library 的话就是 ‘com.android.library’,就这么简单,如下图:

img
img

接下来在 library 中 New->Java Class,在此就是演示,所以我们就尽可能把不重要的东西简单化,名字就叫做 CustomUtil,只有一个静态方法,如下图所示:

img

其实到此最简单的 library 就写好了,下面就在 app 中来依赖刚才的这个 library 看看效果。打开 app 的 build.gradle,在最后的 dependencies 节点添加一行,compile project(':library'),再 Sync 一下 Gradle即可,这样 app 就完成了对 library 的依赖。另外还有一种方法去依赖 library,右键 app 这个 module,选择 Open Module Settings,切换到最后一个Tab:Dependencies,点击左下角的加号->Module dependency->选择 library,这样也能完成 app 对 library 的依赖。

img

那怎么能在代码上看出来 app 确实成功依赖了 library 呢?我们打开 app 中的 MainActivity,输入 CustomUtil 试一下,如果发现像下图那样给你智能提示了,那就OK了,从下图还能看到 CustomUtil 类所在的包是 com.icodeyou.library。我们调用一下它吧,如下图也很简单,不解释了。

img
img

到此为止我们就自己写了一个最简单的 library 并完成了自己本地的依赖调用,这都是自己玩玩,那怎么能让别人也用上咱们刚才那个高大上的 library 呢,继续往下看。

如何在 JitPack.io Publish Android Library

首先来概览一下我们要完成的最终效果是什么,我之前有一个开源库,地址在 https://github.com/icodeu/CommonAdapter,打开 JitPack.io 的网站,将我的开源库地址粘贴进去,Look up->Get it,即可看到熟悉的 compile 了,按照下面那个提示复制到相应的 build.gradle 文件中就可以完成 library 的依赖了,不信你试试啊。

img

下面就来具体讲解一下如何将刚才本地的 library 与 JitPack.io 结合起来,JitPack 的官方文档在这里 Publish Android library

打开 Project 的 root build.gradle,在 dependencies 节点添加一个 classpath:classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3',再打开 library 的 build.gradle,在文件起始添加如下两行 apply plugin: 'com.github.dcendents.android-maven' group='com.github.icodeu'(注意这是你GitHub的用户名),两个文件的示意图如下:

img
img

下面检查你的Project目录是否存在 gradle/wrapper/gradle-wrapper.jar、gradle-wrapper.properties 这两个文件,如果存在可跳过下面这步,如果不存在,请按下面的进行操作。打开当前项目的 Terminal,先后执行 gradle wrapper./gradlew install 两个命令,如下图:

img
img
img

从 JitPack 首页也能看出来,其实我们是要粘贴一个 GitHub 项目地址进去,所以我们接下来就要把 library 先上传到 GitHub 上面。

在 GitHub 上新建一个仓库,这里命名为 HelloLibrary,之后 clone 到本地,再把 Project 目录所有的文件复制进去,比如在我这里,仓库 clone 到了桌面的 HelloLibrary 文件夹,如下图:

img
img

把这些文件 push 到 GitHub 上,push 成功之后,点击项目的 releases->Create a new release,填写好版本号等内容,如下图:

img
img

填写好后点击 Publish release 即可,然后我们复制下图红框中的项目地址,粘贴到 JitPack.io 上面,Look up->Get it,在下面就能看到使用方法了。

img
img

首先打开 Project root 的 build.gradle,在 repositories 节点添加上 maven { url "https://jitpack.io" },之后打开想依赖这个 library 的模块,比如这里我们是 app 这个 module,在 dependencies 节点添加上 compile 'com.github.icodeu:Hellolibrary:v1.0',Sync 一下 Gradle,这样就可以了。如果 Sync 成功了,那我们在 app 中就成功依赖了 GitHub 上的 library,此时可以打开 app 的 Module Settings,看一下它的 Dependencies,如下图:

img
img
img

好了,到此就完成了使用 JitPack.io + GitHub 发布开源库了,相比 jCenter 和 MavenCentral 方式简直爽的不要不要的

个人GitHub: http://github.com/icodeu

CSDN博客:http://blog.csdn.net/icodeyou

个人微信号:qqwanghuan 技术交流

image