欢迎使用CSDN-markdown编辑器

Gradle

gradle简介

gradle跟ant/maven一样,是一种依赖管理/自动化构建工具。但是跟ant/maven不一样,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。

  • 采用了Domain Specific Language(DSL语言)来描述和控制构建逻辑。
  • 构建文件基于Groovy,并且允许通过混合声明DSL元素和使用代码来控制DSL元素以控制自定义的构建逻辑。
  • 支持Maven或者Ivy的依赖管理。
  • 插件可以提供自己的DSL和API以供构建文件使用。
  • 良好的API工具供IDE集成。

基本的构建文件

build.gradle

buildscript {
    repositories {
        jCenter() //gradle脚本相关的仓库
}

dependencies {
        //构建Android项目需要的插件
        //声明android gradle plugin的版本,不是gradle的版本
        classpath 'com.android.tools.build:gradle:0.11.1'
    }
}

//声明使用插件,会自动生成tasks
apply plugin: 'com.android.application'

//DSL
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"
}   

//这里是整个项目的仓库源,在这里声明就不需要每个模块都单独声明
allprojects {
    repositories {
        jcenter()
    }
}

项目结构

基本的项目开始于两个名为“sourceSets”的组件,分别位于:

  • src/main
  • src/androidTest

gradle的默认Android项目结构如下:

  • java/
  • res/
  • assets/
  • aidl/
  • rs/
  • jni/
  • AndroidManifest.xml

如果项目的结构和默认结构不同如(Eclipse的Android项目的目录结构就和默认的不同),那么就需要在build文件的Android域中指明对应的文件路径,以Eclipse目录结构为例:

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('tests')
    }
}

主要项目文件

settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的modue

include ':facebook'
include ':google-play-services_lib'
include ':recyclerview_li_v7'
include ':WeChatMusic'

local.properties

本地属性,不应该加入到版本控制中。在Android studio中就会生成以下内容,指定本地Android
SDK的路径。

sdk.dir=E:\\android-sdk-windows

gradle.properties

从名字上就知道它是一个配置文件,这里面可以定义一些常量供build.gradle使用,比如可以配置签名相关信息如keystore位置,密码,keyalias,代理等。

Android plugin

tasks

gradle添加插件会自动创建一系列的构建任务build tasks去执行。Android plugin会创建以下任务:

  • assemble 这个task用于组合项目中的所有输出。
  • check 这个task用于执行所有检查。
  • connectedCheck 这个task将会在一个指定的设备或者模拟器上执行检查,它们可以同时在所有连接的设备上执行。
  • deviceCheck 通过APIs连接远程设备来执行检查,这是在CL服务器上使用的。
  • build 这个task执行assemble和check的所有工作。
  • clean 这个task清空项目的所有输出。
APK属性

同时Android plugin提供了大量的DSL来定制大部分的属性:和AndroidManifest.xml的区别?

  • minSdkVersion
  • targetSdkVersion
  • versionName
  • applicationId (有效的包名 – 更多详情请查阅ApplicationId 对比 PackageName)
  • package Name for the test application
  • Instrumentation test runner

以前在AndroidManifest.xml中定义的packageName既决定了APK在手机上的唯一标识,又会生成对应的包名的R文件,如:com.example.app.R。这样如果我们需要为我们的APP构建不同版本(免费版,付费版),让它们可以同时在手机上安装,就必须修改包名,而修改包名就必须修改代码。所以gradle将packageName的两个作用解耦,唯一标识现在有applicationId决定。
例如:

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        versionCode 12
        versionName "2.0"
        minSdkVersion 16
        targetSdkVersion 16
    }
}
//在android元素中的defaultConfig元素中定义所有配置。
buildType

默认情况下,debug 和 release 实例都会被创建。Android plugin 允许像创建其他 Build Type 一样定制这两个实例。可以在 buildTypes 的 DSL 容器中完成:

android {
    buildTypes {
        debug {
            //设置包名为 <app appliationId>.debug,以便能够在同一个设上安装 debug 和               release 版的 apk
            applicationIdSuffix ".debug"
        }

        jnidebug {
        //创建了名为 jnidebug 的新 BuildType,并且用 debug build type 的默认配置来初始化自身
            initWith(buildTypes.debug)
            packageNameSuffix ".jnidebug"
            jnidebugBuild true
        }
    }
}

另外,每个 Build Type 都会创建一个新的 assemble 任务。

签名
proguard
依赖

有以下3种不同的依赖:

  1. 本地包
    dependencies {
    compile files('libs/foo.jar')
    }
  2. 远程包
    compile ‘url:包名:版本’
    dependencies {
    compile 'com.google.guava:guava:11.0.2'
    }
  3. 本地lib
    compile project(':google-play-services_lib')
    compile project(':WeChatMusicEngine') //本地项目
    }
多模块

在每个模块下生成一个build.gradle定义构建逻辑,然后在settings.gradle声明相关模块

其他

  • ### gradle wrapper

wrapper是不同系统的脚本文件(window:gradlew.bat,linux shell gradlew),这样其他人在没有安装gradle的情况下也可以构建我们的项目。gradlew会检测系统是否安装了gradle如果安装了,就通过gradle构建项目,否则会先到下载并安装gradle。要生成这些脚本文件,只需要运行wrapper task就可以了。运行后会有以下的文件生成:

gradlew
/
gradlew.bat

gradle/wrapper/

gradle-wrapper.jar

gradle-wrapper.properties

如果要修改wrapper的属性,还可以如下配置wrapper的属性:

task wrapper(type: Wrapper) {
    gradleVersion = '2.0'
}

或者直接修改gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http://services.gradle.org/distributions/gradle-2.4-all.zip

wrapper先会到GRADLE_USER_HOME/wrapper/dists检测gradle是否安装了,如果没有就检测GRADLE_USER_HOME/wrapper/dists是否有zip文件,如果没有才到最后的url下载对应的版本。

Android studio会自动生成对应的文件,如果选择了使用wrapper的话。

  • ### .iml文件和.idea文件夹
    这些是和IDE相关的文件,不应该加入到版本控制中,Anddroid Studio 会自动生成这些文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值