implementation和api的区别是什么

前言:

        平时在做开发的时候,各种依赖三方库。一般就是在build.gradle中添加如下代码:

dependencies {
    implementation 'com.google.android.material:material:1.9.0'
}

这里随便举个例子。

今天在开发的时候,遇到如下错误:

Check your module classpath for missing or conflicting dependencies

        

当时查了好多资料,有说依赖缺失的,有说依赖冲突的,有说清理缓存重新build的,各种姿势我都尝试了,无果之后,请教了同事。同事说,把引入依赖从implementation换成api试试,结果就可以了。

借此机会正好了解下这两个api的区别。

背景:

是在主APP中,使用了module中的第三方库的功能,报了上面的错误。

怎么解决:

把module中的依赖三方库的implementation换成了api

为什么出现这个问题:

查过资料有提到过,应该是kotlin和java的语法bug,如果直接使用java写就没这个问题

一、Implementation(实现)

  • 在Gradle中,”implementation”是一种依赖配置,用于指定项目对外部库的实际依赖。
  • 当我们在项目中使用”implementation”关键字引入外部库时,这些库的实现细节将只在当前模块中可见,并且不会传递给依赖当前模块的其他模块。
  • 这意味着,如果你的模块A依赖于库X并使用”implementation”关键字引入,而另一个模块B依赖于模块A,则模块B无法直接访问库X。这样可以避免库的冲突和隐藏实现细节,提高代码的模块化和隔离性。

二、API(应用程序接口)

  • “api”是Gradle中另一种依赖配置,它用于指定项目对外部库的公共接口。
  • 当我们在项目中使用”api”关键字引入外部库时,这些库的接口将对所有依赖当前模块的其他模块可见。
  • 换句话说,如果你的模块A依赖于库X并使用”api”关键字引入,那么模块B也可以直接访问库X,并使用它所提供的公共接口。这样做可以实现库的共享和交互,但也要注意可能造成的依赖传递和版本冲突问题。

三、区别与用途

  • Implementation和API的依赖范围: “implementation”关键字用于将依赖的库隐藏在当前模块内,只能在当前模块中访问,不会传递给其他依赖该模块的模块。而”api”关键字用于将依赖的库的公共接口暴露给其他模块,可以在其他依赖该模块的模块中直接访问。
  • 使用建议: 通常情况下,推荐使用”implementation”关键字来声明项目对外部库的依赖,这样可以降低库的耦合性,减少潜在的冲突。只有当确实需要在其他模块中访问库的公共接口时,才使用”api”关键字。

猜你喜欢

转载自blog.csdn.net/Steve_XiaoHai/article/details/134705114