Gradle解析

使用android studio有很长一段时间了,记得当初使用android studio的时候,最不适应的部分就是gradle了,现在android开发还是比较火热,越来越多的人进入这个领域,也发现有很多人对gradle很迷惑,今天就来对gradle进行简单的解析,希望新来的开发者能尽快的了解gradle,最起码知道一些概念,无论学什么东西,知道此东西为什么会出现?它有什么用?关于它的一些概念是什么意思?这是学习东西的一个有效方法,也是作为一个初学者进入更高层次首先要解决的问题。

什么是Gradle?有什么用?

专业术语:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。维基百科

看官:这是什么啊?什么构建工具,什么又是Groovy语言啊?你这明显是用未知解释未知?有个毛用啊,都看不懂!

博主:看不懂?我学习的时候也看不懂,好吧,我就以人类的语言加上举例子这种终极武器来解释什么是Gradle.

博主:gradle在哪里使用?

看官:在开发工具中使用!

博主:那如果我们不同开发工具,而是直接在编辑器中编写代码,然后用sdk中提供的编译打包工具手动的进行编译和打包,我们还需要使用gradle吗?

看官:那当然不用使用gradle了,直接手工直接整就行啦,你到底有没有水平啊,问题问的这么弱智。。。,唉?不对,等等,我好像知道什么是构建工具了。

博主:那你说说什么是构建工具?

构建工具就是一个把我们本来必须要使用手工进行编译打包的方式来用自动化的方式来完成。

博主:嗯,定义下的不错,其实说白了,就是在我们编译打包的时候,我们只需要点击编译工具上的一个按钮,但是这时候是gradle来负责调用sdk中的编译打包工具的,如aapt.exe等,好像这里还有点面向对象的味道。

一个android项目中Gradle的种类

如下图所示(以下图片均来自网络):

可以看出来一般一个项目中有图示的几个gradle文件!

Moudle中的build.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:如果创建的是一个应用,就以com.android.application作为值,而如果创建的是Library,就以com.android.library作为值。
  • // 编译SDK的版本

    compileSdkVersion 21

    // build tools的版本

    buildToolsVersion “21.1.1”

    此处应该比较好理解,配置的是编译版本和构建工具的版本。

  • release {

    minifyEnabled false //false代表不混淆,true代表混淆

    // 混淆文件的位置

    proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.txt’

    }

  • 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’)

    }

    这个部分值很重要的,我们会经常使用到。

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’

这三个表示的是外部依赖,什么是外部依赖呢? 就是有一个网站,它专门收集各种软件库,当我们想要用哪一个库的时候,就添加一个compile 依赖,然后ADT工具就会自动的从该网站上把库下载下来,供我们使用。

整个工程的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

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

allprojects {
    repositories {
        jcenter()
    }
}
  • repositories {

    jcenter()

    }

    看到这了吗?这就是那个存放library的仓库,除了这个仓库还有mavenCentral()仓库。

有的开发者会把这两个仓库和github仓库混淆,其实他们是不一样的,github关注的是合作开发和代码分享,而这两个库专注的是代码的收集和存放。

settings.gradle

include ‘:app‘, ‘:extras:ShimmerAndroid‘

此配置定义的就是当前项目的子目录,从图中可以看出来,此工程中有一个app Modle和一个ShimmerAndroid Moudle.

以上就是在android studio中常用的gradle技能,如有错误,敬请指出,不胜感激!

时间: 2024-11-25 23:25:42

Gradle解析的相关文章

android studio 多渠道打包,调试正式包,build.gradle解析

1,讲解build.gradle文件. 1.1根目录Android 1.1.1 defaultConfig是Android的根目录,可以配置包名等信息,若AndroidMainfest.xml也配置了,以defaultConfig的为准. 1.1.2 signingConfigs是Android的根目录,可以配置签名,如下图: 调试时若想直接用正式的签名包可以在buildType里配置. buildTypes { debug { signingConfig signingConfigs.rele

收藏-Gradle史上最详细解析

前言 对于Android工程师来说编译/打包等问题立即就成痛点了.一个APP有多个版本,Release版.Debug版.Test版.甚至针对不同APP Store都有不同的版本.在以前ROM的环境下,虽然可以配置Android.mk,但是需要依赖整个Android源码,而且还不能完全做到满足条件,很多事情需要手动搞.一个app如果涉及到多个开发者,手动操作必然会带来混乱.library工程我们需要编译成jar包,然后发布给其他开发者使用.以前是用eclipse的export,做一堆选择.要是能自

Gradle史上最详细解析

前言 对于Android工程师来说编译/打包等问题立即就成痛点了.一个APP有多个版本,Release版.Debug版.Test版.甚至针对不同APP Store都有不同的版本.在以前ROM的环境下,虽然可以配置Android.mk,但是需要依赖整个Android源码,而且还不能完全做到满足条件,很多事情需要手动搞.一个app如果涉及到多个开发者,手动操作必然会带来混乱.library工程我们需要编译成jar包,然后发布给其他开发者使用.以前是用eclipse的export,做一堆选择.要是能自

zz深入理解Android之Gradle

http://blog.csdn.net/innost/article/details/48228651 Gradle是当前非常“劲爆”得构建工具.本篇文章就是专为讲解Gradle而来.介绍Gradle之前,先说点题外话. 一.题外话 说实话,我在大法工作的时候,就见过Gradle.但是当时我一直不知道这是什么东西.而且大法工具组的工程师还将其和Android Studio大法版一起推送,偶一看就更没兴趣了.为什么那个时候如此不待见Gradle呢?因为我此前一直是做ROM开发.在这个层面上,我们

深入理解Android之Gradle

深入理解Android之Gradle 格式更加精美的PDF版请到:http://vdisk.weibo.com/s/z68f8l0xTYrZt 下载 Gradle是当前非常"劲爆"得构建工具.本篇文章就是专为讲解Gradle而来.介绍Gradle之前,先说点题外话. 一.题外话 说实话,我在大法工作的时候,就见过Gradle.但是当时我一直不知道这是什么东西.而且大法工具组的工程师还将其和Android Studio大法版一起推送,偶一看就更没兴趣了.为什么那个时候如此不待见Gradl

Gradle build Android application groovy—DSL特定领域语言

前言 现在,搞APP开发居多,编译/打包等问题立即就成痛点了.一个APP有多个版本,Release版.Debug版.Test版.甚至针对不同APP Store都有不同的版本.在以前ROM的环境下,虽然可以配置Android.mk,但是需要依赖整个Android源码,而且还不能完全做到满足条件,很多事情需要手动搞.一个app如果涉及到多个开发者,手动操作必然会带来混乱. library工程我们需要编译成jar包,然后发布给其他开发者使用.以前是用eclipse的export,做一堆选择.要是能自动

【译】Gradle 的依赖关系处理不当,可能导致你编译异常

文章 | Ashesh Bharadwaj 翻译 | 承香墨影 授权 承香墨影 翻译.编辑并发布 在 Android Studio 中,Gradle 构建过程对于开发者来说,很大程度上是抽象的.作为一个新的 Android 开发者,我们第一次遇到 Gradle 通常是在 build.gradle 文件中添加一个远程依赖项. 让我们看看如何阅读 Gradle 依赖关系树,并解决与依赖关系有关的问题. 这是我工作中管理的一个项目,我想将 targetVersion 升级到 27,我也在 Gradle

booster 框架学习(一)

结合booster wiki以及官方博客学习booster的代码. booster主要分为两个部分,一个是基于其task spi的自定义task,一个是基于transformer api 自定义 transformer,我的理解,其中所说的spi类似api一样的存在. SPI全称Service Provider Interface,在Java中还是一个比较重要的概念,是Java提供的一套用来被第三方实现或者扩展的API,或者换句话说,SPI是一种服务发现机制.(摘之仓颉博客) task spi

Android 热修复Nuwa的原理及Gradle插件源码解析

现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析. Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于hotpatch生成的gradle插件地址 https://github.com/jasonross/NuwaGradle 而Nuwa的具体实现是根据QQ空间的热修复方案来实现的.安卓App热补丁动态修复技术介绍.在阅读本篇文章之前,请先阅读该文章. 从QQ空间终端开发团队的文章中可以总结出要进行热更