api 和 implementation 区别

官网

implementation

Gradle 会将依赖项添加到编译类路径,并将依赖项打包到构建输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能使用该依赖项。
使用此依赖项配置代替 api 或 compile(已弃用)可以显著缩短构建时间,因为这样可以减少构建系统需要重新编译的模块数。例如,如果 implementation 依赖项更改了其 API,Gradle 只会重新编译该依赖项以及直接依赖于它的模块。大多数应用和测试模块都应使用此配置。

api

Gradle 会将依赖项添加到编译类路径和构建输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。
此配置的行为类似于 compile(现已弃用),但使用它时应格外小心,只能对您需要以传递方式导出到其他上游消费者的依赖项使用它。 这是因为,如果 api 依赖项更改了其外部 API,Gradle 会在编译时重新编译所有有权访问该依赖项的模块。 因此,拥有大量的 api 依赖项会显著增加构建时间。除非要将依赖项的 API 公开给单独的模块,否则库模块应改用 implementation 依赖项。

从 Gradle 3.4 开始,compile 已经过时,取而代之的是 api 和 implementation,两者最大的区别是依赖程度的不同api 和 compile 一样是强依赖,当主模块使用 api 依赖库时,这个库所依赖的库中类是可见的,而 **implementation 是弱依赖,**刚好和 api 相反。在编译时间上看, implementation 相对 api 会快一些,因为它不需要对库中依赖的库进行编译时检查,所以一般情况下我们选用 implementation 来依赖第三方库。

  • implementation类似于“praivte”,module引用implementation只应用于自身,其他module如果dependency该module,无法使用implementation表明的路径。

  • api类似于“public”,​其他module如果dependency该module,可以使用implementation表明的路径。也就跟compile类似​​​​。

其他依赖项配置

配置含义
provided、compileOnly只在编译时有效,不会参与打包
apk、runtimeOnly只在生成apk的时候参与打包,编译时不会参与。
testCompile 、testImplementation只在单元测试代码的编译以及最终打包测试apk时有效。
debugCompile、debugImplementation只在debug模式的编译和最终的debug apk打包时有效
releaseCompile、releaseImplementation仅仅针对Release 模式的编译和最终的Release apk打包。

更多

implementation和api的区别
implementation、api、compileOnly区别详解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值