android gradle依赖:implementation和compile、compileOnly的区别
Android Studio 3.0+后的module依赖:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在Android studio3.0+中:
- compile已被弃用,被implementation和api替代
- provided已被弃用,被compileOnly替代
- testCompile已被弃用,被testImplementation替代
- androidTestCompile已被弃用,被androidTestImplementation替代
它们决定了依赖的可见范围。 如:
-
implementation:使用该命令编译的依赖,仅仅对当前的Module提供接口。将该依赖隐藏在内部,而不对外部公开,这是implementation关键字的作用。 该依赖方式所依赖的库不会传递,只会在当前module中生效。 依赖优先设置为implementation的,如果有错,再考虑使用api指令。这样做一来可以隐藏对外不必要的接口,二来可以加快编译速度。可以加速编译的原因是当项目中含有多个Module模块时, 使用implementation指令编译的依赖可以单独在模块内编译。 如果使用的是api或者compile,那么其他模块有引用它时,其他的模块也需要重新编译。
-
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版本号冲突的解决办法》 -
compileOnly:只在编译时有效,不会参与打包。可以在自己的module中使用该方式依赖一些如com.android.support这些常用的库,避免冲突。
-
testImplementation:只在单元测试代码的编译和最终打包测试apk时有效。
谢谢阅读
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/103502959
- 点赞
- 收藏
- 关注作者
评论(0)