Gradle for Android系列之二 build.gradle文件

来源:互联网 发布:屏幕录像软件 绿色 编辑:程序博客网 时间:2024/06/12 17:00

  上一篇结合Android 项目大致的介绍了一下Gradle在Android中的应用。其中也多次提到了build.gradle。但是没有详细的介绍其的基本结构和其作用。那么本文就将围绕这些展开。在这之前先看看Android中的Gradle脚本也哪些

  Android项目中的Gradle脚本
  一般情况下,使用Android Studio创建的Android项目会默认产生3个Gradle脚本:
  1.root目录下build.gradle
  2.root目录下setting.gradle
  3.app目录下build.gradle
  如下图

 BaseProject   ├── build.gradle   ├── settings.gradle   └── app       └── build.gradle

  root目录下的build.gradle文件,主要是定义整个项目的所有模块的公共属性,主要内容如下:
  

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.2.3'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

  这就是Android项目实际构建就是从这里开始的,我们使用了JCenter作为我们的仓库,JCenter类似maven库,不需要任何额外的配置,grade还支持其他几个仓库,不论是远程还是本地仓库。仓库包含了一系列的依赖,配置了某个仓库,那么我们就可以使用这个仓库包含的依赖了。allprojects方法给我们提供了一种可以用来定义各个模块的默认属性的途径,这样我们可以自己在allprojects中定义一些tasks,在所有的模块中都能使用。最后一个task clean(也可以定义为别的名字),任务类型是Delete(也可以是Copy),就是每当修改settings.gradle文件后点击同步,就会删除rootProject.buildDir下的文件。
  setting.gradle文件在项目只有一个模块的时候是这个样子:
  

include ':app'

  如果是多模块的话,会相应的include对应的模块,改文件定义了哪一个模块将会被构建(setting.gradle是针对多模块操作的,所以单独的模块工程完全可以删除掉该文件)。在这之后,Gradle会为我们创建一个Setting对象,并为其包含必要的方法,我们不必知道Settings类的详细细节,但是最好能够知道这个概念。
  app目录下的build.gradle文件,只对app模块起作用,而且其可以重写任何在root文件目录build.gradle文件中定义的参数。该文件类似于:
  

apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion "23.0.1"    defaultConfig {        applicationId "com.chuck.moblie.baseproject"        minSdkVersion 10        targetSdkVersion 23        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.1.1'    compile 'com.android.support:design:23.1.1'}

  可以看到该文件的结构很清晰:
  1.apply plugin: ‘com.android.application’该语句中的apply是一个方法,给它传递了一个参数plugin,plugin 的值是’com.android.application’。如果有多个参数,则以逗号隔开。
  2.android:主要配置Android相关的参数属性
  3.dependencies:可以添加需要的依赖包。

  下面来详细的分析一下android这个方法中的内容:
  
  compileSdkVersion
  buildToolsVersion
  defaultConfig
  buildTypes
  compileSdkVersion和buildToolsVersion 是必须的,前者指定编译项目的sdk后者指定构建工具(build tools)的版本。这里的build tools(在sdk/build-tools/目录下)包含了我们在构建项目时的很多实用工具,像aapt,dx等。
25.0.2版本的build-tools
  
  defaultConfig指定的是Android应用的核心属性,在defaultConfig指定之后,会覆盖在AndroidManifest.xml指定的相对应的属性。
  

defaultConfig {        applicationId "com.chuck.moblie.baseproject"        minSdkVersion 10        targetSdkVersion 23        versionCode 1        versionName "1.0"    }

  
  applicationId: 指定项目的包名,该属性会覆盖AndroidManifest.xml指定的package name属性,但是它又package name不完全一样,applicationId可以被用作app在各应用商店或者设备上的唯一标示,package name可以用作资源代码和R文件的包名。
  minSdkVersion:应用最低支持的Android版本。这里我指定是API10应用的Android系统版本就是Gingerbread(Android2.3)了。
  targetSdkVersion:指定最高能支持的Android系统版本。API23对应的是Android M(Android6.0)
  versionCode :改app的版本一般在升级系统时需要用到
  versionName :改app版本名称。
  
  有了这些属性,并且会覆盖AndroidManifest.xml的相应属性,所以可以不用在AndroidManifest.xml文件中定义。
  
  dependencies是Gradle的默认属性,所以不用定义在android方法中,它主要指定对应的模块所需要的依赖。只需要通过compile一句话就可以搞定:

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:23.1.1'    compile 'com.android.support:design:23.1.1'}

  下面介绍一下常用的依赖引用方式:
  1.compile fileTree(dir, ‘libs’ ,include : ‘*.jar’) 依赖本地libs目录下的所有jar文件
  2.compile file(‘libs/xxx’) 依赖当个libs目录(可以自己指定路径,不一定要是libs)下的单个jar文件。
  3. compile project(:xx:xx) 依赖某个工程。
  4. compile ‘group:name:version’ 依赖仓库中的库,当然这里的仓库根据前文介绍是在root目录下的build.gradle中指定的,可以是JCenter也可以是本地的仓库。
  build.gradle的配置基本内容,基本介绍完了,接下来就是根据自己的项目定义一些task来处理。下一篇文章将继续介绍task。

3 0