前言

Android Studio开发中,经常用的apicomplieonlyimplementation的配置,今天简单记录一下他们的作用以及区别。

记录于此,方便自己查阅。

正文

api

该依赖方式会传递所依赖的库。

当其他module依赖了该module时,可以使用该module下使用api依赖的库‌。

complieonly

只在编译时有效,不会参与打包。

可以在自己的moudle中使用该方式依赖一些比如com.android.support,gson这些使用者常用的库,避免冲突。

implementation

当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。

区别

complieonly 比较好理解,只是编译时有效,且不参与打包。

下面主要介绍api和implementation的区别。

api、implementation区别

这部分内容来源于参考文1

这两个的区别主要体现在moudle相互依赖上。

假设有三个module,分别是A、B、C,C中依赖一个第三方库Gson。

情况一

当C使用implementation引用Gson的时候,无论A、B 使用哪些方式引用C,

则C可以使用Gson,A、B都不能使用Gson。

情况二

当C使用api引用Gson的时候,当A api B,B api C,

则A、B、C都可以使用Gson

情况三

当C使用api引用Gson的时候,当A implementation B,B api C,

则B、C都可以使用Gson,而A不行。

情况四

当C使用api引用Gson的时候,当A api B,B implementation C,

则A、B都不可以使用Gson,而C可以。

总结

在同一个module下,无论使用implementation,还是api引入第三方库,本modle都可以使用。

在不同module下,使用api引入的包对于其他module来说是可见的,也就是其他module也可以直接使用,而用implementation引入是对其他module是不可见的,也就是其他module无法直接使用。

如果compile不废弃不过期的话,它的作用跟api是一样的。

参考文章

  1. 关于安卓api、implementation、compile的区别

  2. Gradle 的implementation,api,compileOnly,compile 区别

相关文章

暂无评论

none
暂无评论...