implementation、api、compileOnly区别详解

implementation、api、compileOnly区别详解AndroidStudi x 中 implementati api compileOnly 区别详解以及对比 2 x 依赖的区别

告诉我们配置 compile已过时,已被 implementationapi 取代。

下面我们来看看他们之前的差异:

首先是2.x版本的依赖方式:

这里写图片描述

再来看看3.0的:

这里写图片描述

可以看到在gradle3.0中,compile依赖关系已被弃用,被implementation和api替代,provided被compile only替代,apk被runtime only替代,剩下的看名字就知道了。

我们先来看看implementation和api的区别:

api:跟2.x版本的 compile完全相同

implementation:只能在内部使用此模块,比如我在一个libiary中使用implementation依赖了gson库,然后我的主项目依赖了libiary,那么,我的主项目就无法访问gson库中的方法。这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,如果你需要提供给外部访问,那么就使用api依赖即可


还不熟悉2.x版本依赖的可以看看下面的说明,括号里对应的是3.0版本的依赖方式。

compile(implementation,api)

这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包

implementation:该依赖方式所依赖的库不会传递,只会在当前module中生效。
api:该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。

当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile或api依赖的com.android.support包与我们本地所依赖的com.android.support包版本不一样,所以就会报All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes这个错误。

解决办法可以看这篇博客:com.android.support冲突的解决办法


provided(compileOnly)

只在编译时有效,不会参与打包
可以在自己的moudle中使用该方式依赖一些比如com.android.support,gson这些使用者常用的库,避免冲突。


apk(runtimeOnly)

只在生成apk的时候参与打包,编译时不会参与,很少用。


testCompile(testImplementation)

testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。


debugCompile(debugImplementation)

debugCompile 只在debug模式的编译和最终的debug apk打包时有效


releaseCompile(releaseImplementation)

Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

如果你觉得本文对你有帮助,麻烦动动手指顶一下,算是对本文的一个认可,如果文中有什么错误的地方,还望指正,转载请注明转自喻志强的博客 ,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201701.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:48
下一篇 2026年3月20日 上午8:49


相关推荐

  • java session有效期设置方式「建议收藏」

    java session有效期设置方式「建议收藏」session默认有效期是30分钟,设置session的有效期有三种方法:1.在tomcat中的server.xml中定义:在tomcat中的conf/server.xml文件可以修改服务器上的所有程序的默认有效期,设置单位为毫秒,定义代码如下:<Contextpath=”/test”docBase=”/test”  defaultSessionTimeOut=”360…

    2022年7月12日
    18
  • 局域网,园区网,广域网的区别是什么_局域网和互联网的区别与联系

    局域网,园区网,广域网的区别是什么_局域网和互联网的区别与联系局域网局域网LAN(LocalAreaNetwork):一般不大于10公里,而且通常只使用一种传输介质;地域上看局域网通常是用在一座建筑物或一个工厂内,使用上通常是某一单位或某一部门使用,规模上一般不超过几百个用户。(局域网也是相对而言,一栋楼可以看作一个局域网,一个国家性对于世界来说也可以看作一个局域网。多个楼栋,组成的局域网就可以看作一个园区网。)城域网MAN(MetropolitanAreaNetwork):城域网是一种比局域网更大的网,通常覆盖一个城市,从几十公里到100公里不等,可能

    2022年8月31日
    4
  • js对象与json字符串的互转

    js对象与json字符串的互转今天在面试的时候 面试官问到 js 对象与 json 字符串的互转问题 由于自己平时在用的时候没有在意 而且在工作中由于用的较少 没有答上来 所以今天特地查查资料复习一下 巩固一下这方面的知识 1 js 对象转换成 json 字符串在与后端进行交互时 有时需要把 js 对象转换成 json 字符串格式 这时我们需要去引用一下 json2 js 这个文件 然后调用 JSON stringify 方法

    2026年3月17日
    2
  • PHP与EXCEL PHPExcel

    PHP与EXCEL PHPExcel

    2022年1月10日
    47
  • NOIP2008_2012年12月16号农历是

    NOIP2008_2012年12月16号农历是NOIP2012DAY1T1Vigenère密码纯模拟#include<bits/stdc++.h>chara[105],b[1005],ans[1005];intlen1,len2,h=1,p;intc[105];usingnamespacestd;intmain(){// freopen(“vigenere.in”,”r”,stdin); …

    2022年8月22日
    8
  • [论文简读] Deep Neural Networks for Web Page Information Extraction

    [论文简读] Deep Neural Networks for Web Page Information Extraction

    2021年6月8日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号