该api
配置应用于导出到外部的依赖项modules
(传递依赖项)。Vice-Versaimplementation
配置应该用于组件内部的依赖项(不是传递依赖项)。
实现与compileOnly:
他们的工作没有相似之处,compileOnly
是
- 从 java-plugin 继承的配置
- 编译时需要
- 也不包含在运行时类路径中或暴露给依赖项目。
所以compileOnly
不会替换implementation
配置作业,例如:
implementation 'com.android.support:appcompat-v7:25.1.0' // can't use compileOnly here
testCompile 'junit:junit:4.12'
compile "com.google.dagger:dagger:2.8" // can't use here also
annotationProcessor "com.google.dagger:dagger-compiler:2.8" // can't use here also
compileOnly 'javax.annotation:jsr250-api:1.0' // we can use compileOnly here because it's required on run time only.
由于您的案例是“多模块”,因此您必须使用api
配置,直到您到达最终模块,最好使用implementation
.
下图描述了这些配置:
表现?
我认为api
需要更多内存,因为gradle将快照该传递 模块中的每个类,反之亦然implementation
是首选配置,因为(如上所述)它用于自己的内部实现。