Gradle进阶之路(一)

简介

Gradle是一个自动化构建开源工具,使用一种基于Groovy的特定领域语言来声明项目设置,抛弃了基于XML的各种繁琐配置。Groovy语言是基于jvm的动态化语言,支持我们像写脚本一样写项目的构建规则。Gradle之所以能构建Android工程,是因为有基于Android的Gradle插件。

功能
  • 支持多工程的构建
  • 支持多方式的依赖管理,maven仓库、jcenter仓库,本地的jar
  • 支持传递性依赖管理
  • 支持个性化配置
与gradle相关的文件

在Android Studio中,我们新创建一个Android Project,会自动生成以下与gradle相关的文件或者文件夹

android project
   ├── gradlew
   ├── gradlew.bat
   └── gradle/wrapper/
       ├── gradle-wrapper.jar
       └── gradle-wrapper.properties
   ├── build.gradle
   ├── settings.gradle
   ├── gradle.properties
   └── app
       └── build.gradle
复制代码
gradlew、gradlew.bat、gradle/wrapper/ 含义

Android Studio要构建Android程序需要用到Gradle,它们的作用就是下载Gradle。

gradlew是在linux、mac环境下,下载gradle的脚本文件
gradlew.bat是在windows环境下,下载gradle的脚本文件
gradlew-wrapper.jar 是gradle的封装体
gradlew.properties指定了下载gradle的版本以及下载之后存放的位置
复制代码
gradlew.properties 含义

打开该配置文件,它的内容如下:

#Thu Mar 28 11:25:12 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
复制代码

下面来解释一下每个字段的含义

  1. distributionUrl
    指定了下载gradle的地址,3.3是gradle的版本
gradle 有 3 种版本:
gradle-xx-all.zip 是完整版,包含了各种二进制文件,源代码文件,和离线的文档。
gradle-xx-bin.zip 是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。
gradle-xx-src.zip 是源码版,只包含了gradle的源代码,不能用来编译你的工程。
如果只是为了编译,可以不用完整版,只需要二进制版即可。
复制代码

gradle版本详见 2. zipStoreBase以及zipStorePath
指定了下载gradle.zip包存放的位置,其中zipStorePath是zipStoreBase的子目录 3. distributionBase以及distributionPath
指定了解压gradle.zip包存放的位置,其中distributionPath是distributionBase的子目录

distributionBase以及zipStoreBase的取值有两种
GRADLE_USER_HOME 和 PROJECT
其中,GRADLE_USER_HOME 表示用户目录。
在 windows 下是 %USERPROFILE%/.gradle,例如C:\Users.gradle\。
在 Linux下是 $HOME/.gradle,例如~/.gradle。
PROJECT 表示工程的当前目录,即 gradlew 所在的目录。
复制代码
根目录中的build.gradle含义

打开该配置文件,它的内容如下

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

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
复制代码

其中 buildscript代码块是gradle需要用到的 dependencies代码块表示 gradle构建工具依赖的那些插件 repositories代码块表示 gradle依赖的这些插件存放的位置

allprojects代码块表示构建android项目通用的一些配置

settings.gradle含义

打开该配置文件,它的内容如下

include ':app', ':library'
复制代码

settings.gradle是针对多模块的,用来定义哪个模块会被构建,app,library是我定义的两个模块。如果新创建了一个模块叫libraryA,如果libraryA想被构建的话,修改settings.gradle,如下:

include ':app', ':library',':libraryA'
复制代码

如果libraryA不想被构建,把它注释或者删除都可以。

app module 下的 build.gradle 含义

打开该配置文件,其内容如下

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId "com.jalen.gradledemo"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:28.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}
复制代码

apply plugin: 'com.android.application' 的含义是使用一个application的插件,该插件包含了Android相关的所有工具
android代码块描述了app module在构建工程中所用到的参数
dependencied代码块描述了 app module所依赖的库文件

gradle.properties含义

配置gradle的全局管理文件 打开文件,如下:

#编译的SDK版本
COMPILE_SDK_VERSION=28
#编译工具版本
BUILD_TOOLS_VERSION=28.0.3
#android支持库的版本
SUPPORT_VERSION=28.0.3
复制代码

定义了全局的三个参数,在app的build.gradle中使用,代码修改如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion project.COMPILE_SDK_VERSION as int
    buildToolsVersion project.BUILD_TOOLS_VERSION
    defaultConfig {
        applicationId "com.jalen.gradledemo"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "com.android.support:appcompat-v7:${SUPPORT_VERSION}"
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

复制代码

转载于:https://juejin.im/post/5c9dd5c851882567d8609f7a

你可能感兴趣的:(Gradle进阶之路(一))