gradle 的 implementation、api 和 compile

14 篇文章 1 订阅

文章目录

区别

在 android gradle 插件 3.0 之前,我们使用 compile 来依赖第三方库或 module。

在 3.0 后,废弃了 compile,使用 implementationapi 来代替。

api 等同于 compile,意思是:我会把你暴露给第三方。

implementation 意思是:我不会把你暴露给第三方。

比如有三个 module,app、lib1、lib2,app 依赖于 lib1,lib1 依赖于 lib2。

如果是这样:

// app/build.gradle
implementation project(":lib1")

// lib1/build.gradle
implementation project(":lib2")

在 app 中是无法访问 lib2 的代码的。

如果是这样:

// app/build.gradle
implementation project(":lib1")

// lib1/build.gradle
api project(":lib2")

在 app 中就可以访问 lib2 的代码了。

原因

为什么要这么分呢?为了提高编译效率。

还用上面的例子来看:

// app/build.gradle
implementation project(":lib1")

// lib1/build.gradle
api project(":lib2")

这时 lib2 会暴露给 app,那 app 就有可能用到 lib2,所以 lib2 发生改变时,lib2、lib1、app 都需要重新编译一遍。

如果是这样:

// app/build.gradle
implementation project(":lib1")

// lib1/build.gradle
implementation project(":lib2")

这时 lib2 没有暴露给 app,那 app 一定没用到 lib2,所以 lib2 发生改变时,只有 lib2、lib1 需要重新编译一遍。

补充

// app/build.gradle
compile project(":lib1")

// lib1/build.gradle
compile project(":lib2")

在 android studio 升到 3.2.1 后,使用 android 插件版本 2.2.3,发现像上面这样,使用 compile 时 app 忽然引用不到 lib2 了。

只能在 app 中再依赖一遍才可以:

// app/build.gradle
compile project(":lib1")
compile project(":lib2")

// lib1/build.gradle
compile project(":lib2")

更新:该问题在 3.3 版本上已修复。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值