gradle中的implementation,api,compile的区别及其他依赖的区别

前言

首先是2.x版本的依赖方式

再来看看3.0的

 

 可以看出3.0中compile已经被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代。

implementation和api的区别:

api:跟 2.x 版本的 compile完全相同

implementation:使用了该命令编译的依赖,1. 加快编译速度。2. 隐藏对外不必要的接口。例如:模块B依赖模块A,模块C依赖模块B,那么那么C将依赖不到A,这就是implementation关键字的作用。

建议:
Google IO 相关话题的中提到了一个建议,就是依赖首先应该设置为implement的,如果没有错,那就用implement,如果有错,那么使用api指令,这样会使编译速度有所增快。

为什么能加快编译速度呢?
这对于大型项目含有多个模块的,,比如我们改动 模块A 接口的相关代码,这时候编译只需要单独编译模块B就行, 如果使用的是api或者旧时代的compile,由于C也可以访问到 A,所以C部分也需要重新编译。当然这是在全编的情况下。

provided(compileOnly) 只在编译时有效,不会参与打包 

apk(runtimeOnly) 只在生成apk的时候参与打包,编译时不会参与,很少用。

testCompile(testImplementation) testCompile 只在单元测试代码的编译以及最终打包测试时有效。

debugCompile(debugImplementation) debugCompile 只在 debug 模式的编译和最终的 debug打包时有效

releaseCompile(releaseImplementation) Release compile仅仅针对 Release 模式的编译和最终的 Release 打包。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gradle implementationcompile都是在项目使用的依赖管理关键字。 在旧版本Gradle,使用的是compile关键字来引入项目所需要的依赖库。例如,使用compile 'com.android.support:appcompat-v7:28.0.0'来引入Android Support库的appcompat库。 然而,在Gradle 3.0及以上的版本compile已经被implementation所取代。这是由于implementation可以更好地处理依赖的传递性问题。所谓的传递性问题是指当一个库依赖另外一个库时,是否需要将被依赖的库也自动地引入到项目。 通过使用implementation关键字,Gradle能够更好地优化编译过程,只将直接使用的库引入项目,而不会将间接使用的库也引入项目。这可以有效减少项目的编译时间,并减少最终应用包的大小。 例如,假设库A依赖库B,而项目只直接使用了库A。如果使用compile关键字,则会将库B也引入到项目,即使项目并没有直接使用库B。但如果使用implementation关键字,则只会将库A引入项目,不会引入库B,从而减少了项目的依赖。 除了implementation之外,还有另外两个依赖管理关键字:api和testImplementationapi关键字可以将依赖库引入到项目的编译路径,并可以传递给依赖项目。而testImplementation关键字则是专门用于引入测试时所需的库。 总而言之,compile和implementation都是用于项目依赖管理,但Gradle 3.0及以上的版本推荐使用implementation来更好地管理项目的依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值