目前gradle支持的依赖配置有五种,分别是
- implementation
- api
- compileOnly
- runtimeOnly
- annotationProcessor。
常用的依赖配置是implementation、api、compileOnly。
一、implementation
依赖不可传递
会将对应的依赖添加到编译路径,并将依赖打包输出
假设项目下有两个模块A(app)、B,A依赖B,A可以访问B,B使用implementation方式依赖C,B可以访问到C,但是A是无法访问到C的。
implementation依赖设置表示当前这个依赖在编译时只能在当前这个模块中访问,其他模块在编译时不能访问,依赖这个模块的其他模块在运行时可以访问这个库的实现。
二、api
依赖可传递
会将对应的依赖添加到编译路径,并将依赖打包输出
模块A依赖模块B,B依赖库C,模块B在编译时能够访问到库C,在模块A中库C也是可以访问的。
三、compileOnly
依赖不可传递
会添加到编译路径中,但是不会打包到apk中,只能在编译时访问
可保证编译正常,但是在运行时会报错java.lang.noClassDefFoundError: failed resolution of ...
使用场景:例如封装一个网络库N,需要用到json库A,这个网络库N可能被宿主工程引用,而此时宿主工程也用到了同一个json库,此时就会存在包依赖冲突的问题,这种场景可以使用compileOnly来解决,但是要注意的是,在宿主工程中,必须得impementaion或者api的方式添加这个json库的依赖,否则会报
java.lang.noClassDefFoundError: failed resolution of ...
找不到这个json库的错误。
四、runtimeOnly
依赖不可传递
与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到apk中,运行时使用。
不太常用
五、annotationProcessor
用于注解处理器的依赖配置,不太常用。
其他
除了上面五种,还有两种testImplementation
和androidTestImplementation
两种,用于指定在测试代码的依赖。
对于上面这么多的依赖,其中Implementation
是我们最常用的依赖配置选项。
网友评论