[稀土掘金日报] 又一季Android干货来袭。Android静态代码分析。

Android开发者福利来了,今天咱们以为而送及 RxJava 详解、Activity
launchMode 与提高安卓代码的身分及语法等Android开发文化。

Android静态代码分析

直接上andriod干货,下划 Come on⬇️


[TOC]

极品项目中来了重重新的伴,然后每个人之代码风格还无等同,虽然来代码风格文档以及代码review。

给 Android 开发者的 RxJava 详解

而这些事物要花很多人工及岁月来举行,所以尽管钻研了下静态代码分析,能因此工具就的坚毅不用人肉。同时静态代码分析还会缓解过剩密的bug问题。

RxJava
今年进一步火,但由于概念比较复杂,导致比较为难上亲手。现在还不曾成功上手
RxJava 或者已达手但仍对 RxJava 心存疑惑的同校可以来看看这首文章。

下依次对介绍几只Android常用的静态代码分析工具,同时顺便介绍下我厂刘全栈的指向静态代码分析做的家伙
AndroidCodeQuality。

<br />

正文最先发表于Github,如产生转载,请注明转载出处。

CheckStyle

CheckStyle官网

『Checkstyle是一个开发工具用来援助程序员编写符合代码规范之Java代码。它能够自动检查Java代码为空之丁进行这项无聊(但第一)的任务。』

凑巧而Checkstyle的开发者所讲,这个家伙能够扶助你当项目被定义及维系一个不行标准和灵活的代码规范形式。当你启动CheckStyle,它见面因所提供的配备文件分析你的Java代码并告知您意识的有错误。

Checkstyle会发现大量的题材,特别是在你下了大气之条条框框配置,如同你设置了一个坏精确的语法。
尽管我经过Gradle使用checkstyle,例如当我进行推送之前,我仍然推荐而吧IntellJ/Android
Studio使用checkstyle插件(你可由此Android
Studio的工作面板文件/设置/插件直接装插件)。
这种措施下,你可以根据那些为Gradle配置的同文件在你的工程中采用checkstyle,但是多不止这些,你可以一直当Android
Studio中获取带有超链接结果,
这些结果通过超链接在你的代码中对应,这是老有效的(Gradle的这种方法依旧异常要紧的,因为你得运用它自动构建系统,如Jenkins)。

集成

于Android中集成CheckStyle也死粗略,只待以Gradle添加有限配置即可。

apply plugin: 'checkstyle'


// 定义生成文件目录
def checkStyleReportPath = "${project.rootDir}/reports/"

// 在clean时候,自动删除原先生成报告
clean.doFirst {
    delete checkStyleReportPath
}

task projectCheckStyle(type: Checkstyle) {
    source 'src'
    configFile file("checkstyle.xml") // 配置样式
    include '**/*.java'
    exclude '**/gen/**'
    classpath = files()
    ignoreFailures true // 配置是否忽略失败

    // 自定义报告生成路径
    reports {
        html {
            destination "${checkStyleReportPath}/Checkstyle.html"
        }
        xml {
            destination "${checkStyleReportPath}/Checkstyle.xml"
        }
    }
}

tasks.withType(Checkstyle).each { checkstyleTask ->
    checkstyleTask.doLast {
        reports.all { report ->
            // 检查生成报告中是否有错误
            def outputFile = report.destination
            if (outputFile.exists() && outputFile.text.contains("<error ") && !checkstyleTask.ignoreFailures) {
                throw new GradleException("There were checkstyle errors! For more info check $outputFile")
            }
        }
    }
}

// preBuild的时候,执行projectCheckStyle任务
preBuild.dependsOn projectCheckStyle

深切教 Android 中之 Activity launchMode

PMD

PMD官网

实际,PMD是一个工作稍类似Findbugs的精锐工具,但是(PMD)直接检查源代码而不是反省字节码(顺便说词,PMD适用很多言语)。
(PMD和Findbugs)的骨干目标是均等之,通过静态分析方法找有如何模式引起的bug。因此为什么以采用Findbugs和PMD呢?
哼吧!尽管Findbugs和PMD拥有同等之靶子,(但是)他们的检讨方是殊的。所以PMD有时检查有的bug但是Findbugs却检查不出来,反之亦然。

Android系统受之Activity可以说一样宗很赞之统筹,它在内存管理及优秀的宏图,使得多任务管理于Android系统被运行游刃有余。但是Activity绝非启动展示在屏幕而已,其启动方式也充分发知识,本文讲现实介绍Activity的启动模式之不在少数细节,纠正一些开被或许错误的观,帮助大家深刻了解Activity。

集成

apply plugin: 'pmd'

// 定义生成文件目录
def pmdReportPath = "${project.rootDir}/analysis/reports/"

task projectPmd(type: Pmd) {
    ignoreFailures = true
    ruleSetFiles = files("pmd.xml") // 自定义规则
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**', '**/build/**'

    // 定义输出报告
    reports {
        xml {
            enabled = false
            destination "$pmdReportPath/Pmd.xml"
        }
        html {
            enabled = true
            destination "$pmdReportPath/Pmd.html"
        }
    }
}

preBuild.dependsOn projectPmd

<br />

FindBugs

FindBugs官网

findbugs是一个分析bytecode并查找有中可疑部分的一个器。它吃品种配节码做一个圆满扫描,通过有些通用规则去看清或许潜在的部分题材,比如性能,多线程安全等等。

FindBugs基本上只待一个先后来做分析的配节码,所以这是非常容易使用。它能够检测及广大的谬误,如左的布尔运算符。
FindBugs也能检测到由误解语言特色之错,如Java参数调整(这不是真正的出或坐其的参数是传值)。

集成

apply plugin: 'findbugs'

// 定义生成文件目录
def findbugsReportPath = "${project.rootDir}/reports/"

task findbugs(type: FindBugs) {
    ignoreFailures = true
    excludeFilter = new File("findbugs.xml") // 自定义配置文件
    classpath = files()
    classes = fileTree('build/intermediates/classes/')
    effort = 'max'

    source = fileTree('src')
    include '**/*.java'
    exclude '**/gen/**'

    // 定义输出报告
    reports {
        xml {
            enabled = false
            destination "$findbugsReportPath/FindBugs.xml"
            xml.withMessages true
        }
        html {
            enabled = true
            destination "$findbugsReportPath/FindBugs.html"
        }
    }
}

afterEvaluate {
    tasks.withType(Task).each { task ->
        task.doLast {
            if (task.name.startsWith("assemble")) {
                tasks.findByName("findbugs").execute()
            }
        }
    }
}

Infer

Facebook infer官网

Infer 是Facebook的一个开源代码扫描工具。目前以移动端, Infer
是比好用的一个检查空对象引用的静态扫描工具.

每当mac上面使用infer比较简单,参考如下步骤即可,其他平台可以参见官网教程。

首先使brew安装infer

brew install infer

然后在类型根本目录运行如下命令即可,最后见面在根本目录下面生成infer-out目录。

./gradlew clean; infer -- ./gradlew build

再者Github上面有只Infer的Gradle插件,地址,可以参见下。

运啊比较简单,根目录添加插件依赖

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        ...
        classpath "com.uber:infer-plugin:0.7.4"
    }
}

Java项目方可采用如下配置

apply plugin: 'java'
apply plugin: 'com.uber.infer.java'

Android的配置

apply plugin: 'com.android.application'
apply plugin: 'com.uber.infer.android'

又支持配置

inferPlugin {
    infer {
        include = project.files("<PATH_TO_INCLUDE>")
        exclude = project.files("<PATH_TO_EXCLUDE>")
    }
    eradicate {
        include = project.files("<PATH_TO_INCLUDE>")
        exclude = project.files("<PATH_TO_EXCLUDE>")
    }
}

如何增强安卓代码的色及语法

Lint

Lint官网

Lint
Api

Lint是Android官网出的同样款功能强大的静态代码分析工具,不仅可以分析代码,还可分析布局文件,而且还可以硬编码、多余请勿使用的资源,以及可能出现的bug等。

这里发生同一篇介绍Lint使用的博客

Lint可以当Gradle中融为一体,当然也可于定义输出,也可以于Android
Studio中独立行使,使用『Analyze』->『Inspect Code』即可。

android {
    lintOptions {
        abortOnError false
        disable 'LogNotTimber', 'IconMissingDensityFolder'
        htmlReport true
        htmlOutput file("${project.rootDir}/analysis/reports/lint-report.html")
        xmlReport true
        xmlOutput file("${project.rootDir}/analysis/reports/lint-report.xml")
    }
}

文章被笔者提出了用自动工具(例如Checkstyle、 Findbugs、 PMD和Android
Lint)提高安卓代码质量和语法的异方法。

CI集成

CI介绍

互联网软件之开支和宣告,已经形成了同仿照标准流程,最重点之一部分就是络绎不绝集成(Continuous
integration,简称CI)。

必威 1

CI

绵绵集成指的凡,频繁地(一龙频繁)将代码集成及核心,它的补益主要有零星个。

(1)快速发现错误。每成功一点创新,就合到基本,可以迅速发现错误,定位错误为于轻。

(2)防止分支大幅偏离主干。如果不是经常集成,主干而于不断更新,会造成以后并的难度变死,甚至为难集成。

每当每次交代码后,都见面发生CI服务器被代码做一样不成编译和代码检查,那么对软件开发的色为会见起老挺之加强,如果在智能一点,可以由此邮件、短信、slack通知开发,那么周开发流程也会见越来越友好。

延续考虑单独做一个落实一个gradle的插件,自动集成上面几乎种植静态代码检查措施,同时可兑现同件配置,以及告输出。

<br />

连锁链接

CheckStyle官网

Android Studio配置CheckStyle

Github
AndroidCodeQuality

PMD官网

FindBugs官网

Facebook infer官网

Infer插件

Infer参考

Infer参考

Android lint
参考

Lint
Api

CI介绍

Archi – 用三栽 Android 代码架构来重构一个运

章被笔者提出了为此自行工具(例如Checkstyle、 Findbugs、 PMD和Android
Lint)提高安卓代码质量与语法的例外方式。

<br />

BGARefreshLayout – Android必威 下拉刷新效果库

Android开发者使用BGARefreshLayout-Android可以本着各种控件实现多下拉刷新功能、上拉加载重多跟安排从定义头部广告位。

<br />

专访DroidPlugin作者张勇:安卓黑科技是什么样炼成的

前段时间,奇虎360当Github上揭示了一个Android开源项目DroidPlugin,这是一个实现动态加载的Android插件框架,可以无安装、免修改的运转第三正APK。DroidPlugin的目的是改善大型APP的架,实现多组织协作开发。

<br />

认为今天之日报很赞?
点击分享按钮,发给你边发呆的同事吧。

情人围太杂,微博太乱;身处互联网领域的汝,是匪是经常感慨找不交看技术文章的地方?稀土团队多年来出了平迟迟让「掘金」的用,给屏幕面前死热衷让新颖的互联网技术以不甘心的卿,和我们的
Co-editor
一起来打互联网最优质的互联网技术干货吧!

相关文章

Leave a Comment.