Android studio 的构建系统Gradle


Android Studio使用Gradle构建项目,



为什么要用Gradle?

Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑

以下是为什么Android Studio选择Gradle的主要原因:

  •         使用领域专用语言(Domain Specific Language)来描述和处理构建逻辑。(以下简称DSL)
  •         基于Groovy。DSL可以混合各种声明元素,用代码操控这些DSL元素达到逻辑自定义。
  •         支持已有的Maven或者Ivy仓库基础建设
  •         非常灵活,允许使用best practices,并不强制让你遵照它的原则来。
  •         其它插件时可以暴露自己的DSL和API来让Gradle构建文件使用。
  •         允许IDE集成,是很好的API工具


需要准备:

  1.        Gradle 1.6 or 1.7
  2.        SDK with Build Tools 17.0.0 (released 5/16/2013)

Basic Project

      在Gradle项目的根目录下,有个叫build.gradle的文件,它描述了这个项目的整体构建基础。

build文件 

      最基本的java程序,它的build.gradle文件就一句话:

apply plugin: 'java'

 

最基本的Android项目,它的build.gradle如下:

buildscript {
    repositories {
          mavenCentral()
     }

    dependencies {
          classpath 'com.android.tools.build:gradle:0.5.6'
     }
}

apply plugin: 'android'
android {
       compileSdkVersion 17
}

 

我们一步步来分析一下上面三部分的内容。

  • buildscript{...} 配置了驱动build的代码,它声明将在Maven中央仓库,取一个classpath dependency,也就是Android plugin for Gradle v0.5.6
  • apply plugin     指明了用到的plugin是android,就像前面java程序中,用的plugin是java一样
  • android{...}     中配置了所有android构建的参数,这里也就是Android DSL的入口点。

 

默认的,只有目标编译环境是必要的,也就是compileSdkVersion这个属性。这和以前在project.properties中的target属性类似。

值得注意的是,如果你在Android项目中写 apply plugin:java 而不是apply plugin:android的话,将会build失败。





项目结构

两大组件(source sets): main source code 和 test code. 它们分别在以下两个目录中:

src/main/
src/instrumentTest/

这两个目录里面,又分别有各自的代码源文件和资源文件。

java/
resources/

对于 Android plugin, 又有以下额外的目录:

AndroidManifest.xml
res/
assets/
aidl/
rs/
jni/
配置项目结构

根据Gradle文档说明,可以通过以下两个方法来重新配置项目结构。

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }

        resources {
            srcDir 'src/resources'
        }
    }
}

或者:

sourceSets {
    main.java.srcDirs = ['src/java']
    main.resources.srcDirs = ['src/resources']
}

而Android的项目也类似,如下列所示:

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']
        }
        instrumentTest.setRoot('tests')
    }
}

 

注:setRoot这个方法将所有src/instrumentTest目录下的文件及文件夹移到了tests/目录下。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值