gradle中compile,provided,compile files,compile project有何区别?

vincgao
  • 53

在一个Android项目的build.gradle中,dependencies闭包中有以下四种形式的声明:

compile 'com.android.support:appcompat-v7:22.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
compile files('libs/picasso-2.4.0.jar')
compile project(':androidPullToRefresh')

我想彻底弄清compile、provided、compile files、compile project四者的区别。
我的理解:
compile所指编译内容可以是本地的,也可以是远程(jCenter)中的。如果是本地的包,最好以aar形式给出

provided 不懂

compile files编译的是jar包

compile project编译的内容必须包含多有java代码、xml布局文件、AndroidManifest等,而且还要在项目的setting.gradle中用include的形式声明引用

以上,求详解

回复
阅读 34.9k
4 个回答

1,3,4本质上是一样的,区别在于:

1 是从repository(默认是jCenter())里下载一个依赖包进行编译并打包
3 是从本地的libs目录下寻找picasso-2.4.0.jar这个文件进行编译并打包。类似的命令有`compile fileTree(dir: 'libs', include: '*.jar')`——将libs目录下所有jar文件进行编译并打包。
4 是将另一个module(等同eclipse中的library)进行编译并打包

至于provided,是提供给那些只编译不打包场景的命令。就是,我在编译的时候对某一个jar文件有依赖,但是最终打包apk文件时,我不想把这个jar文件放进去,可以用这个命令。目前我知道的就一个插件化的场景需要用到这个命令,如果搞不明白,可以先不管。

就如 @食用淡水鱼 所说。
compile file、compile project、compile fileTree都可以看成是compile 的子命令,里面的类和资源会被打包到你使用的App中,而provided不会,但是在运行时还是需你另外提供。

推荐去看看《gradle for android》

chefish12306
  • 1
新手上路,请多包涵

provided是指编译的时候依赖这个jar包,但是最终打包的时候不打进去

你知道吗?

宣传栏