Gradle教程–基础篇

2022-09-14 16:50:34 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

Gradle 是什么

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。

安装Gradle

在 Android Studio 中新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的 Gradle 到什么地方呢,或者说Gradle的本地目录在什么地方呢

  • Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists 目录
  • Win平台会默认下载到 C:Documents and Settings<用户名>.gradlewrapperdists 目录

你会看到这个目录下有个 gradle-x.xx-all 的文件夹, 如果下载实在太慢,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下。

Gradle基本概念

我个人理解是 Gradle 在 Android Studio 中有三个意思

  • Gradle plugin(Gradle 插件及插件版本)
  • Gradle(Gradle 的版本)
  • Gradle wrapper(安装辅助工具)

下面我用一个开源项目开详细分析一下,加深自己对 Gradle 理解,首先这个项目有两个Moudle,一个是应用程序模块,一个是库模块

1. 9GAG/build.gradle(Gradle plugin)

代码语言:javascript复制
buildscript { repositories { jcenter() }
    dependencies { classpath 'com.android.tools.build:gradle:1.0.0' }
}

allprojects { repositories { jcenter() }
}

这个文件是整个项目的gradle基础配置文件,内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(),jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了 Gradle Plugin 的版本,这个dependencies中的gradle:1.0.0代表的就是使用Gradle 插件版本 1.0.0。在编译过程中,如果Gradle插件版本与Gradle版本不匹配,编译就会失败。

目前一些的Gradle与Gradle Plugin版本的对应关系如下:

Gradle Plugin 版本

Gradle 版本

2.3.0

3.3

2.1.3 – 2.2.3

2.14.1

2.0.0

2.10 – 2.13

1.5.0

2.2.1 – 2.13

1.2.0 – 1.3.1

2.2.1 – 2.9

1.0.0 – 1.1.3

2.2.1 – 2.3

Android Plugin for Gradle Release Notes

值得注意的是,你的AndroidStudio 版本越高,你的Gradle插件版本越高,目前Android Studio 2.3.2的版本对应的是Gradle Plugin 版本是2.3.2

2. 9GAG/app/build.gradle(Gradle)

代码语言:javascript复制
// 声明是Android程序
apply plugin: 'com.android.application'

android {
    // 编译SDK的版本
    compileSdkVersion 21
    // build tools的版本
    buildToolsVersion "21.1.1"
    defaultConfig {
        // 应用的包名
        applicationId "me.storm.ninegag"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
    }
    // java版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    buildTypes {
        debug {
            // debug模式
        }
        release {
            // 是否进行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    // 移除lint检查的error
    lintOptions {
      abortOnError false
    }
}

dependencies {
    // 编译libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:21.0.2'
    compile 'com.etsy.android.grid:library:1.0.5'
    compile 'com.alexvasilkov:foldable-layout:1.0.1'
    // 编译extras目录下的ShimmerAndroid模块
    compile project(':extras:ShimmerAndroid')
}

这里需要说明几点:

  • 文件开头apply plugin是最新gradle版本的写法,
    • 应用程序的声明是apply plugin: ‘com.android.application’
    • 模块的声明是apply plugin: ‘com.android.library’
  • buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。
  • compileOptions是指java的版本,android 5.0开始默认安装jdk1.7才能编译,但是mac系统自带jdk的版本是1.6,所以需要手动下载jdk1.7并配置。
  • proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 /tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则,由于是开源项目,9GAG里并未进行混淆。
  • compile project(‘:extras:ShimmerAndroid’)这一行是因为9GAG中存在其他Module。
  • 以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续会单独拿出来讲解。

3. 9GAG/gradle/wrapper.properties(Gradle wrapper)

代码语言:javascript复制
#Thu Dec 18 16:02:24 CST 2014
//distributionBase 是解压 gradle-2.14.1-all.zip 的文件的存放位置
distributionBase=GRADLE_USER_HOME

//distributionPath 是 distributionBase 指定的目录下的子目录
distributionPath=wrapper/dists

//zipStoreBase 是下载的 gradle-2.14.1-all.zip 所存放的位置
zipStoreBase=GRADLE_USER_HOME

//zipStorePath 是 zipStoreBase 指定的目录下的子目录
zipStorePath=wrapper/dists

//distributionUrl 是要下载的 gradle 的地址,使用哪个版本的 gradle,就在这里修改
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip

这里需要说明几点:

  • 下载位置可以和解压位置不一样。
  • zipStoreBase 和distributionBase 有两种取值:GRADLE_USER_HOME 和 PROJECT。
    • 其中,GRADLE_USER_HOME 表示用户目录。在 windows 下是 %USERPROFILE%/.gradle,例如C:Users.gradle;在 Linux下是 $HOME/.gradle,例如~/.gradle。
    • PROJECT 表示工程的当前目录,即 gradlew 所在的目录。

4. 9GAG/settings.gradle

代码语言:javascript复制
include ':app', ':extras:ShimmerAndroid'

文件中的 app, extras:ShimmerAndroid 都是module,如果还有其他module都需要按照如上格式加进去

版本变更方法–使用 Android Studio

  • 修改 build.gradle 插件版本号
代码语言:javascript复制
    dependencies { classpath 'com.android.tools.build:gradle:1.0.0' }
  • 修改使用的 Gradle 版本(gradle wrapper 中 distributionUrl 修改 gradle版本与插件版本匹配)

gradle wrapper 中 distributionUrl 修改 gradle版本与插件版本匹配

代码语言:javascript复制
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip
  • 或者直接在图形界面中修改

本文大量参考引用以下两篇文章,包括图片和代码,感谢两位作者

http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/ http://hucaihua.cn/2016/09/27/Gradle_upgrade/

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154153.html原文链接:https://javaforall.cn

0 人点赞