初步探索Android中的Gradle构建工具

最近发现挺多人对Gradle没有一个清晰的概念和理解,对于Gradle的使用也仅限于一些简单的操作,于是便简单整理了一份关于Gradle的基本概念,可以让对Gradle不熟悉的朋友对它的整体有一个初步的了解

什么是Gradle

 Gradle 是一高级构建工具包来自动执行和管理构建流程,同时也允许开发者定义灵活的自定义构建配置。 每个构建配置均可自行定义一组代码和资源,同时对所有应用版本共有的部分加以重复利用。 Android Studio 使用它构建系统编译应用资源和源代码、管理依赖,然后将它们打包成可供测试、部署、签署和分发的 APK。

Gradle工具包和Gradle插件

在AS中使用Gradle需要同时配置Gradle工具包和Gradle插件,AS在安装时就默认配置了。可能有些人会认为Gradle工具包和Gradle插件是一个东西,因为在AS项目中的配置里也没有明显的标识Gradle工具包和Gradle插件的区别。Gradle工具包就是一款自动化构建工具的集合,它使用一种基于Groovy特定领域语言来声明项目设置。Gradle插件的全称是Android Plugin for Gradle,Gradle不是专属于Android的构建工具,Gradle插件的出现是为了更方便的让我们在AS中构建Android项目。其中Gradle工具包可以脱离AS单独使用,但是AS要想使用Gradle就必须配置Gradle插件。

Gradle工具包在AS工程目录下的gradle/wrapper/gradle-wrapper.properties中配置

Gradle插件在工程根目录中的build.gradle中的dependencies中配置

当然,Gradle插件版本和Gradle工具包的版本是需要对应的,为获得最佳性能,谷歌推荐应该使用Gradle和插件的最新版本。

AS项目中的Gradle配置文件

新建项目时,Android Studio 会自动创建其中的部分文件(下图所示),并为其填充合理的默认值

Android 应用模块的默认项目结构

其中后缀带gradle的都是 Android 应用标准项目结构的组成部分,后面的自定义配置构建都是基于这几个文件进行操作。我们必须了解其中每个文件的范围和用途及其应定义的基本 DSL 元素,才能着手配置构建。

Gradle设置文件

Gradle设置文件对应项目根目录的settings.gradle文件,用于指示 Gradle 在构建应用时应将哪些模块包括在内。 对大多数项目而言,该文件很简单,针对上面的默认项目,它包括以下内容:

include ‘:app’

顶级构建文件

顶级构建文件build.gradle同样位于项目根目录中,用于定义适用项目中所有模块的构建配置。我们可以在它的buildscript块中为Gradle本身配置存储库和依赖项,在allprojects块配置所有模块通用的存储库和依赖性。例如,buildscript块包含Gradle的Android插件作为依赖项,因为它提供了Gradle构建Android应用程序模块所需的其他指令。

buildscript {

    repositories {
        google()
        jcenter()
    }
  
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
    }
}

allprojects {
   repositories {
       google()
       jcenter()
   }
}

模块级构建文件

模块级build.gradle文件在各module目录下,用于定义适用于其所在模块所需构建配置,可以通过这些构建配置来提供自定义打包选项(例如附加构建类型和产品风格),以及替换 main/ 应用清单或顶级 build.gradle 文件中的设置。

下面是一个官方的模块级构建文件示例。包括了基本的DSL元素和设置。

apply plugin: 'com.android.application'

android {

  compileSdkVersion 28

  buildToolsVersion "28.0.3"

  defaultConfig {

    applicationId 'com.example.myapp'

    minSdkVersion 15

    targetSdkVersion 28

    versionCode 1

    versionName "1.0"
  }

 
  buildTypes {

    release {
        minifyEnabled true // Enables code shrinking for the release build type.
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  flavorDimensions "tier"
  productFlavors {
    free {
      dimension "tier"
      applicationId 'com.example.myapp.free'
    }

    paid {
      dimension "tier"
      applicationId 'com.example.myapp.paid'
    }
  }

}

dependencies {
    implementation project(":lib")
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

Gradle属性文件

Gradle 还包括两个属性文件,均位于项目根目录中,可用于指定适用于 Gradle 构建工具包本身的设置:

gradle.properties

可以在其中配置项目范围 Gradle 设置,例如 Gradle 后台进程的最大堆大小。

local.properties

为构建系统配置本地环境属性,例如 SDK 安装路径。 这个文件由AS自动生成并用于本地开发环境,因此我们不应该去手动修改它。

自定义构建配置

自定义构建配置一般只是针对模块的构建文件,那为什么还介绍上面一堆其他内容呢?局部源于整体,了解了上面的内容可以加强对Gradle的整体概念,不光知道怎么用,还要知其所以然。

那么Gradle可以帮我们自定义那些配置呢?

默认设置

defaultConfig块,可以设置应用Id,最小支持sdk版本、目标sdk版本、版本名称、版本码等等一些基础配置

构建类型

buildTypes块定义 Gradle 在构建和打包应用时使用的某些属性,通常针对开发生命周期的不同阶段进行配置。例如调试构建类型支持调试选项、使用调试秘钥签署应用,发布构建类型支持代码混淆、资源压缩、优化png大小、使用发布秘钥签署应用。 Android Studio 默认情况下会创建调试和发布构建类型。当然我们也可以添加自己的构建类型,比如development 构建类型,并在里面添加我们需要的配置。

产品风味

productFlavors可以向用户发布的不同版本的应用,比如免费版和付费版,我们可以为不同的产品风格定义使用不同的代码和资源,同时对所有应用版本共有的部分加以共享和重复利用。 比较常见的使用就有用来进行多渠道打包。

构建变体

构建类型 + 产品风味 = 构建变体。构建类型的数量乘以产品风味的数量就是构建变体的数量。那多渠道打包为例,构建类型有debug和release,产品风味有_360、xiaomi,那么构建变体就有_360Debug、_360Release、xiaomiDebug、xiaomiRelease。

动态属性

这里的动态属性是指通过build.gradle动态设置的java属性。通过buildConfigField(type, name, value)向生成的BuildConfig类添加一个新字段,如果类型是String,则该值应包含引号。然后在java代码中通过BuildConfig.xxx引用。

清单条目

除了指定java中的动态属性值,还可以在构建文件中配置一些值,这些值可以替换清单文件中现有的值。通过manifestPlaceholders = [name : value]指定。

ProGuard

代码混淆的配置规则文件,构建系统可在构建过程中运行 ProGuard 对类进行压缩和混淆处理。并且可以为不同的构建变体指定不同的 ProGuard 规则文件

签署

signingConfigs块,配置签署信息,并可在构建过程中自动签署您的 APK,可以指定秘钥文件、签署密码、签署别名等等。签署信息可以放在gradle.properties中保存。

依赖

dependencies块,这个应该都知道,可以说是我们能感受到gradle方便的最直接的一项了。以往我们用第三方库的时候都需要下载jar包,再导入到项目中。有了gradle后就不必手动搜索、下载依赖项的jar包并将它们复制到项目目录内。

发布了45 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Ever69/article/details/90447538