概念背景
compile依赖关系已被弃用,被implementation和api替代;
provided被compile only替代;
apk被runtime only替代;
api:跟2.x版本的 compile完全相同。
作用
compileOnly作用:
只在编译时有效,不会参与打包 可以在自己的moudle中使用该方式依赖一些比如com.android.support,gson这些使用者常用的库,避免冲突。
runtimeOnly作用:
只在生成apk的时候参与打包,编译时不会参与,很少用。
testImplementation作用:
只在单元测试代码的编译以及最终打包测试apk时有效。
debugImplementation作用:
只在debug模式的编译和最终的debug apk打包时有效
releaseImplementation作用:
仅仅针对Release 模式的编译和最终的Release apk打包。
api作用:
会把依赖库传给使用者,使用者的项目External Libraries 中能够看的见。可以在其他module使用,会参与打包。
implementation作用:
当其他模块依赖此模块时,此模块使用implementation声明的依赖包只限于模块内部使用,不允许其他模块使用。
问题
报错:
All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes
当我们使用android studio添加一些第三方的依赖库时,很可能会提示上面这个错误。
大致意思就是com.android.support的包版本号要保持一致,但是可能我们自己新建的项目的com.android.support包版本号要高一些,一些第三方的库的com.android.support可能没有及时更新support库,就会出现这个错误。
解决方法(同样的适用于其他的依赖冲突。)
1、修改自己项目中的com.android.support的版本号,与所依赖的库版本号一致,但是当我们依赖的库中的com.android.support版本号有好几个版本就不行了。(不推荐)
2、依赖第三方库时候排除掉对com.android.support包的依赖,这样自己的项目随便依赖什么版本都可以,但是这种方法需要你先找到哪些库存在冲突
3、通过groovy脚本强制修改冲突的依赖库版本号 (推荐)
4、将项目迁移至AndroidX(推荐)
3的解决示例:
开发中添加了一个第三方框架,结果框架里的 design 包为25,我的版本为24,由于网络原因,不想下载.但是或报错.
Error:Failed to resolve: com.android.support:design:25.1.0
运用exclude group 关键字就可以
compile ('com.***.***:XXX:1.0.0') { // 所加的第三方框架
exclude group: 'com.android.support', module:'design' // 加载时排除框架中的design包
}