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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS后退一页

    JS后退一页Javascript返回上一页:1.history.go(-1),返回两个页面:history.go(-2);2.history.back().3.window.history.forward()返回下一页4.window.history.go(返回第几页,也可以使用访问过的URL)例:向上一页response.Write(“”) response.W

    2022年7月25日
    12
  • 经济基础知识(中级)【2】

    经济基础知识(中级)【2】1.下列经济活动中,会导致企业现金流入的有()。A.购买原材料B.用固定资产对外投资C.对外投资D.收到银行贷款E.销售商品2.下列义务中,属于公司股东法定义务的有()。A.遵守公司章程B.缴纳所认缴的出资C.忠实义务D.勤勉义务E.公司设立登记后,不得抽回出资3.会计确认应该符合一定的标准,企业在确认收入时应当坚持的标准有()。A.及时确认B.取得收入权利的交易已经发生C.按照权责发生制要求进行确认D.取得资产所有权的交易已经发生E.年底统一确认4.下列统计

    2022年5月8日
    57
  • CNN做序列标注问题(tensorflow)

    CNN做序列标注问题(tensorflow)

    2021年11月20日
    40
  • Qt QFile按行读写数据

    Qt QFile按行读写数据1.包含的头文件#include<QDebug>#include<QFile>2.读数据QFilefile(“inputFile.txt”);if(file.open(QIODevice::ReadOnly|QIODevice::Text)){while(!file.atEnd()){QByt…

    2022年6月6日
    38
  • 数据结构——查分数组

    数据结构——查分数组介绍查分数组是一个数据结构。相当于前缀和的逆运算。查分数组的功能是修改区间,查询点。修改区间的时间复杂度是O(1).查询点的时间复杂度是O(n)。若配合树状数组时间复杂度可达到O(logn)。修改区间操作x位置加上修改量,y+1位置减去修改量。这样就相当于整个区间的元素都修改了。staticvoidupdate(intx,inty,intz){ b[x]+=z; b[y+1]-=z;}查询刚刚修改方便了,但是查询的时候就需要全部都加一遍了。staticint

    2022年4月29日
    49

发表回复

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

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