Gradle 的implementation,api,compileOnly,compile 区别

概念背景

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包
 }

你可能感兴趣的:(gradle,kotlin,gradle)