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

Gradle for Android系列之三 tasks

$
0
0

  在之前第一篇文章中说过,Gradle最重要的概念是project和tasks,而一个Project也可以说只是包含了多个task的容器,所以在gradle中tasks的重要性不言而喻了。为了更好的介绍Android中常用的tasks,先来介绍task的基本知识。

  我们可以在app的build.gradle文件中定义两个简单task分别hello,hello1:
  

task hello <<{
    print("hello task")
}

task hello1 {
    doLast{
        print("hello task")
    }
}

  hello中的“<<”表示追加的意思,即向hello中加入执行过程。我们还可以使用doLast来达到同样的效果,如hello1。
  同步之后,我们可以在Android Studio的Gradle标签页看到可以使用的task,我们定义的在other下:
    
    
    

  双击相应的task,task将会边执行,例如我们双击hello,那么我们可以得到以下结果:
  这里写图片描述
   打印出了hello task,得到了我们想要的结果。
   注:这里我们也可以通过命令行运行gradlew tasks命令得到我们可以使用task。

  从上边的小例子可以看出,Gradle创建task还是非常自然,非常简单的,上面的task关键字实际上是一个方法调用,该方法属于project。project中存在多个重载的task()方法。并且我们在调用这些方法可以不用将参数放在括号里面。这里还要介绍一个概念TaskContainer,我们自定义的2个task都位于TaskContainer中,project中的tasks属性即表示该TaskContainer。接着看下边的例子:
   

task showTasks {
   println tasks.class
   println tasks.size()
}

  该task主要打印了TaskContainer的信息和其包含的task的数量,我们在没有加入hello,hello1和加入之后的结果作比较:
  这里写图片描述
  
  这里写图片描述
  可以看出tasks的类型为

class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated

  在加入hello,hello1这两个task之前tasks的size为14,加入之后为16。这里还要说名一下计算的size是包括showTasks本身的。
  在上文中我们讲到,通过task()方法创建的Task都被存放在了TaskContainer中,而project又维护了一个TaskContainer类型的属性tasks,那么我们也可以通过create()方法直接向TaskContainer里面添加Task:
  

tasks.create(name: 'hello2') <<{
    print("hello2 task")
}

  同时,task之间也是可以相互依赖的,例如我要定义一个hello3的task依赖hello这个task,我们可以这样写:
  

task hello3(dependsOn: hello) {
    print("hello3 task");
}

  关于tasks的基本知识就介绍这么多了。下面来看一下Android 常用的tasks。从上边的截图我们可以清楚的看到,当创建一个Android工程时,这个工程将包含android tasks,build tasks,build setup tasks,help tasks,install tasks,verification tasks等。平时我们用的比较多是build tasks,因为它包含了apk打包相关的task:
  assemble/assembleDebug/assembleRelease:针对每个版本/debug版/Release版创建一个apk。
  clean :清除所有的构建任务的output,包含apk文件
  check: 执行Lint检查并且能够在Lint检测到错误后停止运行
  build :执行assemble和check
  connectedCheck: 在测试机上执行所有测试任务
  deviceCheck :执行所有在远程设备上的测试任务
  installDebug和installRelease :在设备上安装一个Debug/Release版本
  关于assemble,还要说明一点,我们还可以根据要发版的渠道定义相对应的assemble,举个例子,我们想要在豌豆荚发布,那么我们可以定义一个assembleWanDouJia来输出发布到豌豆荚的apk。
  build task依赖于check任务,但是不依赖于connectedCheck或者deviceCheck,执行check任务时Lint会产生一些相关文件,可以在app/build/outputs中查看。
  在上文已经讲过,除了上边已经存在的task,我们还可以自己定义。这需要结合自己的需求了。Gradle For Android中的tasks就先讲到这儿了,下一篇我准备将一下依赖包的管理。
  

作者:chenkai19920410 发表于2017/1/7 15:06:55 原文链接
阅读:11 评论: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>