Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Gradle for Android系列之一 Gradle基础

$
0
0

  project 和task
  project和task是Gradle中最重要的两个概念。每一次构建,都至少包括一个project,每一个项目又包括至少一个task。相信大家都对Android Studio生成的项目结构已经很熟悉了。一般情况下,在项目的root的目录下会有一个build.gradle文件,这个文件就是代表的一个project,这个文件可以使得新增模块,或者共用插件变得简单一些。然后项目下的每一个module一般也会对应一个build.gradle文件。
  task又是定义在build.gradle中的。当初始化构建过程时,Gradle会基于build文件组装project和task对象。一个task对象又包含一系列的动作,这些动作会安装一定的顺序执行。一个单独的动作就是一段待执行的代码块。是不是和java中的方法类似?在以后的文章中可以深刻的体会到。

  Build的生命周期
  一旦某个tasks被执行,那么它不会再次执行了,不包含依赖的Tasks总是优先执行,一次构建将会经历下列三个阶段:
  1.初始化阶段:project实例在这儿创建,如果有多个模块,即有多个build.gradle文件,多个project将会被创建。
  2.配置阶段:在该阶段,build.gradle脚本将会执行,为每个project创建和配置所有的tasks。
  3.执行阶段:这一阶段,gradle会决定哪一个tasks会被执行,该tasks会被执行完全依赖于开始构建时传入的参数和当前所在的文件夹位置。

  build.gradle配置文件
  基于grade构建的项目通常至少有一个build.gradle,现在就来看看Android的root目录下的build.gradle:
  

uildscript {
    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还支持其他几个仓库,不论是远程还是本地仓库。仓库包含了一系列的依赖,配置了某个仓库,那么我们就可以使用这个仓库包含的依赖了。其他具体,内容篇幅有限,在后边的文章在详细介绍。
  build.gradle文件定义了一个Android构建工具,这个就是Android plugin的来源。Android plugin提供了所有需要去构建和测试的应用。每个Android应用都需要如下插件:
  

apply plugin: 'com.android.application'

  插件用于扩展gradle脚本的能力,在一个项目中使用插件,这样该项目的构建脚本就可以定义该插件定义好的属性和使用它的tasks。
  
  注意:当你在开发一个依赖库,那么你应该使用com.android.library,一个模块要么使用Android application,要么Android library插件,不能同时使用两者,否则会构建失败

  当使用Android 插件的时候,android tag将可以被使用,如下所示:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    ....
}

  更多的属性我们将在后边的文章中进行分析。

  项目结构
  Android Studio构建的项目结构如下所示:

DemoProject
   ├── build.gradle
   ├── settings.gradle
   └── app
       ├── build.gradle
       ├── build
       ├── libs
       └── src
           └── main
               ├── java
               │   └── com.package.demoproject
               └── res
                   ├── drawable
                   ├── layout
                   └── etc.

  在前文已经强调过grade项目通常在root文件夹中包含一个build.gradle,使用的代码在app这个文件夹中,这个文件夹也可以使用其他名字,并不一定是app,例如当你利用Android Studio创建一个project,针对一个phone应用和一个Android wear应用的时候,模块将被默认叫做application和wearable。

  Gradle使用了一个叫做source set的概念,官方解释:一个source set就是一系列资源文件,其将会被编译和执行。对于Android项目,main文件夹就是一个source set,其包含了所有的资源代码。当你开始编写测试用例的时候,你一般会把代码放在一个单独的source set,叫做AndroidTest,这个文件夹只包含测试。

  使用Gradle Wrapper
  Grade只是一个构建工具,其版本迭代速度是很快的,所以使用Gradle Wrapper可以帮助你兼容低版本的Gradle,就和Android SDK提供的V4,V7兼容包一样。Gradle Wrapper提供了一个windows的batch文件和其他系统的shell文件,当你使用这些脚本的时候,当前gradle版本将会被下载,并且会被自动用在项目的构建,所以每个开发者在构建自己app的时候只需要使用Wrapper。所以开发者不需要为你的电脑安装任何gradle版本,在mac上你只需要运行./gradlew,而在windows上你只需要运行gradlew.bat。
  你也可以利用命令行./gradlew -v来查看当前gradle版本。下列是wrapper的文件夹:
  

myapp/
   ├── gradlew
   ├── gradlew.bat
   └── gradle/wrapper/
       ├── gradle-wrapper.jar
       └── gradle-wrapper.properties

  可以看到,Gradle Wrapper有三个部分:
  1.一个对应于Windows系统的bat文件和一个对应于Linux、Mac的shell文件
  2.batch和shell文件所需要的jar文件,
  3.一个配置文件properties。
  配置文件包含参数配置,并能通过distributionUrl决定使用哪一个Gradle版本:
  

#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

  基本的构建命令
  如果你使用的Android Studio那么切换到terminal标签页,一般默认是在项目的root目录路径下的。运行以下命令

$ gradlew tasks

  如果是在linux或者mac下则需要运行:

$ ./gradlew tasks

  这一命令将会列出所以可运行的tasks,你也可以添加–all参数,来查看所有的task。当你在开发的时候,你可以通过运行带有Debug或者Release参数的assemble命令:
  

$ gradlew assembleDebug

  这个任务会生成一个debug版的APK。这里还要提一点,Gradle可以使用驼峰式缩写命令。例如上边的命令,可以简写为
  

$ gradlew assDeb

  或者

$ gradlew aD

  当然必须保证缩写是独一无二的,如果不是唯一的,那么命令是无效的。

  总结:通过本文,我们认识到Gradle的优势,同时也简单的了解了一下Android Studio的项目结构,以及其为我们自动生成的build.gradle文件的结果。在接下来的文章会详细介绍这些内容

作者:chenkai19920410 发表于2017/1/6 16:04:05 原文链接
阅读:20 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>