gradle中'all'和'each'之间有什么区别?

时间:2015-08-04 07:05:25

标签: android-studio gradle

我正在使用Android Studio和gradle构建脚本。当我要更改某些设置时,我需要iterate一些字段。但我不清楚differenceall之间的each

例如我用google搜索一些代码来更改输出apk文件名。代码按applicationVariantsall variant.outputs迭代each

applicationVariants.all { variant ->
   variant.outputs.each { output ->
      output.outputFile = new File(output.outputFile.parent, "MyApp.apk")
   }
}

2 个答案:

答案 0 :(得分:3)

DomainObjectCollection.all的{​​{3}}说:“针对此集合中的所有对象,以及随后添加到此集合中的所有对象执行给定的闭包。”

答案 1 :(得分:2)

each是一个简单的常规构造。它用于迭代给定对象,不会修改它(原始对象)并在完成后返回(未更改的)对象。参见:

assert [1, 2, 3] == [1, 2, 3].each { println it }

虽然all是gradle本身添加的方法。因此,android插件会添加this扩展名,其中包含getApplicationVariants方法。由于groovy允许省略get,因此可以使用applicationVariants。现在,所提到的扩展使用this类来保留变体的集合,其扩展为 - this。在后一种all方法中定义了,据我所知,只是批处理。