Gradle教程–基础篇

Gradle教程–基础篇Gradle是什么Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装Gradle在AndroidStudio中新建项目成功后会下载Gradle,貌似这个过程不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。那么下载的Gradle到什么地方呢,或者说Gradle的本

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

Gradle 是什么

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

安装Gradle

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

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

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

Gradle基本概念

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

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

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

9GAG

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

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)

// 声明是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)

#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

include ':app', ':extras:ShimmerAndroid'

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

版本变更方法–使用 Android Studio

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

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

distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
  • 或者直接在图形界面中修改

Gradle图形界面.png


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

http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/

http://hucaihua.cn/2016/09/27/Gradle_upgrade/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年6月28日 上午7:00
下一篇 2022年6月28日 上午7:00


相关推荐

  • 程序员的最炫民族风[通俗易懂]

    程序员的最炫民族风[通俗易懂]最近公司其它项目组加班比较多,自然bug也是海海的,同事有感而发,写下了这首程序员的最炫民族风苍茫的Bug是我的爱绵绵的Bug票起出来什么样的Bug是最呀最难改什么样的变更才是最开怀长长的代码写出来前台的Check到底改不改火辣辣的RedMine是我们的期待改成解决状态才是最自在我们要改就要改得最痛快你是我心中最难的Bug让我用心把你改出来(

    2026年2月14日
    4
  • java json对象和json字符串互转的方法_js中对象转字符串的方法

    java json对象和json字符串互转的方法_js中对象转字符串的方法一、准备工作定义三个json字符串用于以下测试://json字符串-简单对象StringjsonStr=”{\”studentName\”:\”张三\”,\”studentAge\”:18}”;//json字符串-数组类型StringjsonArrStr=”[{\”studentName\”:\”张三\”,\”studentAge\”:18},{\”studentName\”:\”李四\”,\”studentAge\”:17}]”;//json字符串-复杂对象Strin.

    2026年4月15日
    4
  • 请简述什么是Vue组件化开发_vuecli和webpack

    请简述什么是Vue组件化开发_vuecli和webpack前言真实项目开发过程中,我们都是使用组件化的去开发vue的项目,但是组件化的思想又是如何来的呢?下面就从开始讲解演变过程演变过程1.0一般情况下vue都是单页面开发,所以项目中只会有一个inde

    2022年7月30日
    4
  • 中位数和众数的定义_众数是什么意思中位数又是什么意思

    中位数和众数的定义_众数是什么意思中位数又是什么意思在初中数学课本中,我们学习了平均数,但是平均数与中位数、众数有是关系呐,下面我就为大家总结一下:平均数:是指在一组数据中所有数据之和再除以数据的个数。平均数是表示一组数据集中趋势的量数,它是反映数据集中趋势的一项指标。解答平均数应用题的关键在于确定“总数量”以及和总数量对应的总份数。在统计工作中,平均数(均值)和标准差是描述数据资料集中趋势和离散程度的两个最重要的测度值。平均数的分类:(1)算术平…

    2025年12月12日
    7
  • 最新Manus注册详细图文流程|手把手教你国内如何注册Manus账号教程

    最新Manus注册详细图文流程|手把手教你国内如何注册Manus账号教程

    2026年3月15日
    3
  • Windows系统如何配置pycharm的anaconda环境

    Windows系统如何配置pycharm的anaconda环境1 anaconda 和 pycharm 的下载点击进入 anaconda 官网 anaconda 官网或者点击下面直接下载对应版本 点击下载 win64 位的 anaconda 点击下载 win32 位的 anaconda 点击进入 pycharm 官网 pycharm 官网或者点击下面直接下载 32 位 64 位通用 点击下载 pycharm 32 位 amp 64 位 不会安装的小伙伴请看我的另一篇博客 包会 Windows 系统零基础下载安装搭建环境教程 2 pycharm 配置 anaconda 环境两者都安装好后 打开 p

    2026年3月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号