转载: https://blog.csdn.net/yuzhiqiang_1993/article/details/78366985

2017 年google 后,Android studio版本更新至3.0,更新中,连带着com.android.tools.build:gradle 工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,更加欣喜的是,完全支持Java8。
当然,对于Kotlin的支持,在这个版本也有所体现,Kotlin插件默认是安装的。

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

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

再来看看3.0的:

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

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

                                               implementation依赖关系图

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


                                                           api依赖关系图

compile(api)

api:跟2.x版本的 compile完全相同。用api指令编译,libiary内部依赖对app Module 是可见的,app Module也可以使用Library内部依赖。这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。 
当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile依赖的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打包。

Android Studio3.xx新的依赖方式 implementation、api、compileOnly详解相关推荐

  1. 开发日记-20190916 gradle新的依赖方式implementation,api,compileOnly

    转载于:gradle 新的依赖方式 implementation.api.compileOnly gradle升级之后,有了新的依赖方式,下面我来介绍一下他们的使用 先看看之前的 再看看现在的 区别和 ...

  2. Android M新特性Doze and App Standby模式详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  3. 依赖注入神器:Dagger2详解系列

    依赖注入神器:Dagger2详解系列 序言 Dagger2是啥 Dagger2是啥,Google告诉我们: Dagger is a fully static, compile-time depende ...

  4. 视频会议系统的种类、选择方式、未来发展趋势详解

    视频会议系统的种类.选择方式.未来发展趋势详解 视频会议现在已经非常的方便,解决远距离沟通问题,而视频会议系统主要分为硬件视频会议系统与软件视频会议系统两大类,不过这些年来随着互联网浪潮的推进,很难再 ...

  5. android相册和拍照并裁剪图片大小,Android 拍照并对照片进行裁剪和压缩实例详解...

    Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码. 调用摄像头拍照,对拍摄照片进行裁剪,代码如下. ...

  6. 依赖注入容器Autofac的详解[转]

    依赖注入容器Autofac的详解 发表于 2011 年 09 月 22 日 由 renfengbin 分享到:GMAIL邮箱         Hotmail邮箱 delicious digg Auto ...

  7. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  8. android Camera2 API使用详解

    原文:android Camera2 API使用详解 由于最近需要使用相机拍照等功能,鉴于老旧的相机API问题多多,而且新的设备都是基于安卓5.0以上的,于是本人决定研究一下安卓5.0新引入的Came ...

  9. Java操作数据库方式二DBCP使用详解

    ##概述 DBCP的全称是:DataBase connection pool,翻译是:数据库连接池. 在Java操作数据库方式一JDBC使用详解中说到直接使用JDBC非常消耗资源.为了避免频繁关闭链接 ...

最新文章

  1. ICCV 2021 | 最新开源!多视角几何和注意力机制实现新视角合成
  2. java 和 Android Base64加密
  3. 用户态线程在AI中的应用
  4. cdn与服务器的关系_IPFS是一个天生的CDN,将会在全世界进行内容加速
  5. 线段树模板hdu 1754:I Hate It
  6. Python数据清理之数据质量
  7. 怎样使用http代理IP判断公立幼儿园和私立幼儿园的差距
  8. ListView系列(七)——Adapter内的onItemClick监听器四个arg参数 (转)
  9. node -v 突然显示 killed 9 处理历程
  10. git 暂存文件操作 stash
  11. 计算机桌面维护介绍,电脑桌面基础知识介绍
  12. rime android汉字,irime输入法安卓下载-iRime输入法 安卓版v3.0-PC6安卓网
  13. pic12f1823单片机入门_PIC单片机:如何建立PICKit3程序编写电路
  14. Hackintosh-OpenCore系列篇-macOS install
  15. Excel_一维二维表转换(行列转换)的几种方法
  16. 双显卡只用独显好吗_双显卡怎么切换到独立显卡 双显卡只用独显方法
  17. GMT北京时间表示的时间算法
  18. 日均调用量超13亿次,阿里达摩院研发全球首个实时翻译直播-1
  19. 不同页面 共享cookie及localStorage
  20. 萤石云视频直播切换出现no source found in video tag.的问题解决方法

热门文章

  1. 无人直播硬改系统-技术分析
  2. [问题解决]解决编译时,Androidx和其他三方库冲突
  3. 转载:MDA的一些资源的连接
  4. 四通道数字隔离器π141E60 代替Si8641BB-B-IS
  5. win10打开英雄联盟假死黑屏
  6. 【构造+贪心+分解质因数】CF868div2 C. Strongly Composite
  7. ARM 架构 ARM7 ARM9 STM32 Cortex M3 M4 51 AVR 有啥区别
  8. ARM7的相关寄存器
  9. 【ClassLoader】实现自定义类加载器加载指定路径下的Class文件和Jar包
  10. 日本感动我的几个瞬间