目前gradle支持的依赖配置有五种,分别是implementation, api, compileOnly, runtimeOnly和annotationProcessor。常用的依赖配置是implementation, api和compileOnly。
1. 第一种:implementation
会将指定的依赖添加到编译路径,并且会将该依赖打包到输出,如apk中,但是这个依赖在编译时不能暴露给其他模块,例如依赖此模块的其他模块。这种方式指定的依赖在编译时只能在当前模块中访问。
当前项目中有两个模块app和decoder
image.png
模块app依赖模块decoder
decoder中添加了远程二进制库依赖joda-time
image.png在decoder模块中使用这个库
image.png在app模块中条用decoder模块提供的方法
image.png尝试在app模块中使用joda-time库
image.png出现错误:
image.png
从上面的例子中我们可以看出,complementation依赖设置表示当前这个依赖在编译时只能在当前这个模块中访问,其他模块在编译时不能访问,依赖这个模块的其他模块在运行时可以访问这个库的实现。
2. 第二种:api
使用api配置的依赖会将对应的依赖添加到编译路径,并将依赖打包输出,但是这个依赖是可以传递的,比如模块A依赖模块B,B依赖库C,模块B在编译时能够访问到库C,但是与implemetation不同的是,在模块A中库C也是可以访问的。
我们修改decoder模块中对joda-time库的依赖配置
image.png在app模块中使用joda-time库
image.png输出
image.png
3. 第三种:compileOnly
compileOnly修饰的依赖会添加到编译路径中,但是不会打包到apk中,因此只能在编译时访问,且compileOnly修饰的依赖不会传递。
image.png编译时通过,运行时报错:
image.png由于写Android的时间比较短,不知道这个配置的具体应用场景,希望有经验的大佬能够在评论区回复一下具体的应用场景。
4. 第四种:runtimeOnly
这个与compileOnly相反,它修饰的依赖不会添加到编译路径中,但是被打包到apk中,运行时使用。没有使用过。
5. 第五种:annotationProcessor
用于注解处理器的依赖配置,还没有使用过。
除了上面五种,还有两种testImplementation和androidTestImplementation两种,用于指定在测试代码的依赖。
对于上面这么多的依赖,其中Implementation是我们最常用的依赖配置选项。
网友评论