Gradle - 项目管理

1,052 阅读2分钟

Android 项目中有两种 build.gradle:

  • 每个Module中的私有的build.gradle,用作私有配置
  • 根目录中的build.gradle,用作全局配置

全局变量

在组件化模式中,每个业务部门都是一个独立的Module,在独自开发时,项目都是一个独立的APP,当需要整体打包测试的时候,将每个部门的项目变成library,通过以下两种方式可以轻易地用配置文件的方式进行环境切换。

当开发多Module工程时,我们需要为每个Module管理targetSdkVersion,新Module比旧Module的minSdkVersion低,“全局变量” 能够对全部Module的targertSdkVersion。

使用RootProject.ext

  • 使用build.gradle 其中一种方法就是在project根目录下的build.gradle定义全局变量
ext {
    minSdkVersion = 16
    targetSdkVersion = 24
}
buildscript {
    // ...
}

然后在各个Module的build.gradle中通过rootProject.ext引用这些变量

android {
    defaultCofig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
}

注:利用rootProject.ext关键字是因为这些变量定义在根目录中,如果在私有的build.gradle文件中定义则不用添加

使用Gradle.properties

另一种方法就是在gradle.properties中定义

org.gradle.parallel = true

isFusion = false

如果定义bool变量,在使用的时候调用toBoolean()

if (!isFusion.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

配置Lint选项

一个完善的Lint对于多人协作的项目相当重要 注⚠️:开发环境中,最好重视Lint的输出,出问题及时修复

Lint默认会做严格的检查,如果遇到报错会终止构建过程,在JenKins环境中,如果开启了严格的检查,那么在构建项目的时候经常会由于Lint错误而终止。

很多时候是因为第三方库的错误,且不能立即修复,那么就会影响到打包的流程,可以通过如下关闭严格检查:

android {
    lintOptions {
        disable 'InvalidPackage'
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errrs in release builds,
        //but continue the build even when errors are found:
        abortOnError false
    }
}

如果是多Module的项目,则可以添加一个全局的过滤配置

task lintCheck() {
    getAlltasks(true).each {
        def lintTask = it.value.findAll {it.name.contains("lint")}
        lintTask.each {
            it.enabled = false
        }
    }
}