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”关键字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/202896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day32_Git

今日内容 零、 复习昨日 零、 复习昨日 一、引言 在单人开发过程中,需要进行版本管理,以利于开发进度的控制。 在多人开发过程中,不仅需要版本管理,还需要进行多人协同控制。 版本控制(VS) SVN GIT 二、介绍 Git是一个开源的…

vue3+vite搭建cesium项目

1.创建项目 cnpm create vite 2.安装依赖 npm i cesium vite-plugin-cesium vite -D 3.在vite.config.js里进行配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import cesium from vite-plugin-cesium; export default defineConfig({plugins…

vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options

在运行vue项目中,遇到报错:ValidationError: webpack Dev Server Invalid Options,如下图截图: 主要由于vue.config.js配置文件错误导致的,具体定位到proxy配置代理不能为空,导致运行项目报错,需…

Apache Flink(二):数据架构演变

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

CSS:calc() 函数 / 动态计算长度值 / 不同场景使用

一、理解 css calc() 函数 CSS calc() 函数是一个用于计算 CSS 属性值的函数。它可以在 CSS 属性值中使用数学表达式,从而实现动态计算属性值的效果。calc() 函数可以使用加减乘除四种基本数学运算符来计算属性值,还可以使用括号来改变优先级。 二、ca…

堆在排序中的应用

堆排序 1、堆排序原理 堆排序是利用到了堆这种数据结构,我们首先回顾一下二叉堆的特性: 最大堆的堆顶是整个堆中的最大元素。最小堆的堆顶是整个堆中的最小元素。 以最大堆为例,如果删除一个最大堆的堆顶(并不是完全删除&…

【MATLAB】RLMD分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 RLMD分解FFTHHT组合算法是一种强大的分析方法,结合了局部均值分解(LMD)、快速傅里叶变换(FFT)和希尔伯特-黄变换(H…

Wireshark之Intro, HTTP, DNS

源码地址👇 moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络-自顶向下方法(原书第6版)》编程作业,Wireshark实验文档的翻译和解答。 (github.com) 目录 🌼Introduce 🎧前置 🎧过…

基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

基于three.js生成动态波浪背景效果

文章目录 前言一、安装three二、新建waves.js文件三、引入waves.js文件比查看效果如有启发,可点赞收藏哟~ 前言 基于three.js生成动态波浪背景效果 一、安装three npm i three -S二、新建waves.js文件 注意geometry.setAttribute和geometry.addAttribute和在不同…

【腾讯地图】【微信小程序】地图选点

【相关文章】 【腾讯地图】【微信小程序】地图选点 【腾讯地图】【微信小程序】路线规划 【腾讯地图】【微信小程序】城市记录(基于地图选点入门版) 【效果展示】 【官方文档】 微信小程序插件-地图选点插件 【完善流程】 当前操作和官方文档操作有部…

Attacking Fake News Detectors via Manipulating News Social Engagement(2023 WWW)

Attacking Fake News Detectors via Manipulating News Social Engagement----《通过操纵新闻社交互动来攻击假新闻检测器》 摘要 在年轻一代中,获取新闻的主要来源之一是社交媒体。随着新闻在各种社交媒体平台上日益流行,虚假信息和毫无根据的言论的传…

【端到端可微2】链式法则,论文:Introduction to Gradient Descent and Backpropagation Algorithm

论文:Introduction to Gradient Descent and Backpropagation Algorithm 文章目录 0 前言1 链式法则定义作用 2 单神经元的正向传播forward propagation定义z 激活函数 3 损失函数定义 4 损失函数对权重张量的偏导数定义z对w求偏导l对z求偏导 5 多个神经元的正向传播…

企业软件的分类|app小程序网站定制开发

企业软件的分类|app小程序网站定制开发 企业软件是指为满足企业管理和运营需求而设计和开发的一类软件,它通常用于支持企业的各项业务活动和流程。根据其功能和应用领域的不同,可以将企业软件分为以下几类。 1. 企业资源计划(ERP&#xff09…

Android性能优化 - 从SharedPreferences到DataStore

前言 对于android开发者们来说,SharedPreferences已经是一个老生常谈的话题了,之所以还在性能优化这个专栏中再次提到,是因为在实际项目中还是会有很多使用到的地方,同时它也有足够的“坑”,比如常见的主进程阻塞&…

k8s中批量处理Pod应用的Job和CronJob控制器介绍

目录 一.Job控制器 1.简介 2.Jobs较完整解释 3.示例演示 4.注意:如上例的话,执行“kubectl delete -f myJob.yaml”就可以将job删掉 二.CronJob(简写为cj) 1.简介 2.CronJob较完整解释 3.案例演示 4.如上例的话&#xf…

Tomcat的安装及其使用

一.下载安装 本文下载的是8.5版本的,下载链接:Apache Tomcat - Welcome! 切记解压缩的目录不要有中文存在。 二.启动Tomcat 在解压缩之后,会有很多文件存在,但是我们只需要在意两个文件! webapps 目录 . web applica…

亚马逊产品如何在 TikTok 上推广?

对亚马逊卖家而言,TikTok是提升品牌社交媒体影响力的理想平台。该平台在过去一年中实现了飞速增长,使得营销变得既快捷又有趣,且高效。本文将详细阐述如何在TikTok推广亚马逊产品,并如何策划更强大的品牌营销活动。 各大品牌纷纷…

Anemone库的爬虫程序代码示例

以下是代码: ruby require anemone # 设置代理服务器 Anemone.proxies { http > "", https > "" } # 定义爬取的URL url # 使用Anemone进行爬取 Anemone.crawl(url) do |page| # 使用正则表达式找出所有的视频链接 video_…

Chrome显示分享按钮

分享按钮不见了! Chrome://flags Chrome Refresh 2023 Disabled 左上角的标签搜索会到右上角。