app 不能依赖libiary 库中libs下的jar包

新手上路,请多包涵

我的手机 2019/8/2 15:23:41
Gradle 3.4 添加了 api,implementation等用于替代compie ,但是在3.3中 如果我在moudleA 中的libs 中加入一个jar包 而在app moudle 中 依赖 moudleA (moudleA 中对jar包的依赖是通过compile 实现的,即compile fileTree(include: ['.jar'], dir: 'libs')) ,却出现 app 不能引用 moudleA 中的jar包,而compile不是有传递依赖特性吗?为什么不行呢? 而我把gradle 版本换成 3.4 使用 api 的方式使moudleA 依赖 jar包( api fileTree(include: ['.jar'], dir: 'libs')) 在 app moudle中就可以引用到moudleA 中jar包。不是说api继承了 compile的特性吗?为什么 在3.3中compile 就没有传递特性了呢?

阅读 2.7k
1 个回答
新配置 已弃用配置 行为
implementation compile 依赖项在编译时对模块可用,并且仅在运行时对模块的消费者可用。 对于大型多项目构建,使用 implementation 而不是 api/compile 可以显著缩短构建时间,因为它可以减少构建系统需要重新编译的项目量。 大多数应用和测试模块都应使用此配置。
api compile 依赖项在编译时对模块可用,并且在编译时和运行时还对模块的消费者可用。 此配置的行为类似于 compile(现在已弃用),一般情况下,您应当仅在库模块中使用它。 应用模块应使用 implementation,除非您想要将其 API 公开给单独的测试模块。
compileOnly provided 依赖项仅在编译时对模块可用,并且在编译或运行时对其消费者不可用。 此配置的行为类似于 provided(现在已弃用)。
runtimeOnly apk 依赖项仅在运行时对模块及其消费者可用。 此配置的行为类似于 apk(现在已弃用)。
推荐问题