Gradle依赖之‘五种依赖配置’

目前gradle支持的依赖配置有五种,分别是implementation,api,compileOnly,runtimeOnly和annotationProcessor。常用的依赖配置是implementation, api和compileOnly。

第一种:implementation

会将指定的依赖添加到编译路径,并且会将该依赖打包到输出,如apk中,但是这个依赖在编译时不能暴露给其他模块,例如依赖此模块的其他模块。这种方式指定的依赖在编译时只能在当前模块中访问。

当前项目中有两个模块app和decoder

模块app依赖模块decoder

decoder中添加了远程二进制库依赖joda-time

在decoder模块中使用这个库

在app模块中条用decoder模块提供的方法

尝试在app模块中使用joda-time库

出现错误:

从上面的例子中我们可以看出,complementation依赖设置表示当前这个依赖在编译时只能在当前这个模块中访问,其他模块在编译时不能访问,依赖这个模块的其他模块在运行时可以访问这个库的实现。

第二种:api

使用api配置的依赖会将对应的依赖添加到编译路径,并将依赖打包输出,但是这个依赖是可以传递的,比如模块A依赖模块B,B依赖库C,模块B在编译时能够访问到库C,但是与implemetation不同的是,在模块A中库C也是可以访问的。

我们修改decoder模块中对joda-time库的依赖配置

在app模块中使用joda-time库

输出

第三种:compileOnly

compileOnly修饰的依赖会添加到编译路径中,但是不会打包到apk中,因此只能在编译时访问,且compileOnly修饰的依赖不会传递。

编译时通过,运行时报错:

由于写Android的时间比较短,不知道这个配置的具体应用场景,希望有经验的大佬能够在评论区回复一下具体的应用场景。

第四种:runtimeOnly

这个与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到apk中,运行时使用。没有使用过。

第五种:annotationProcessor

用于注解处理器的依赖配置,还没有使用过。

除了上面五种,还有两种testImplementation和androidTestImplementation两种,用于指定在测试代码的依赖。

对于上面这么多的依赖,其中Implementation是我们最常用的依赖配置选项。

猜你喜欢

转载自blog.csdn.net/guodashen007/article/details/112958299