Android 避免api并始终使用实现?

Android 避免api并始终使用实现?,android,android-gradle-3.0,Android,Android Gradle 3.0,使用Gradle plugin 3构建多模块Android应用程序,而不是使用compile声明依赖项,应该使用实现或api。后者基本上类似于编译。通过使用实现,依赖关系对依赖于此模块的任何模块都是隐藏的 假设我有三个模块A,B和C。B依赖于A,C依赖于B和A,就像这样:A这是关于传递依赖的。请在此处阅读更多信息:一般来说,建议使用实现(它将加快项目构建并防止依赖项泄漏) 但是,如果您的模块在其公共API上使用了一些it依赖项,则这些依赖项应使用API配置添加,否则您的模块用户应手动添加这些依赖

使用Gradle plugin 3构建多模块Android应用程序,而不是使用compile声明依赖项,应该使用实现或api。后者基本上类似于编译。通过使用实现,依赖关系对依赖于此模块的任何模块都是隐藏的


假设我有三个模块A,B和C。B依赖于A,C依赖于B和A,就像这样:A这是关于传递依赖的。请在此处阅读更多信息:

一般来说,建议使用
实现(它将加快项目构建并防止依赖项泄漏)


但是,如果您的模块在其公共API上使用了一些it依赖项,则这些依赖项应使用
API
配置添加,否则您的模块用户应手动添加这些依赖项。

谢谢,但这是我已经知道的。看起来我需要澄清我的问题。1)“实施”依赖关系将加快多模块应用程序的构建(当您有20-30个模块时,构建过程可能会浪费很多时间)2)“实施”将避免您使用不明确的依赖关系。让我们看一个例子。您添加了一些依赖于rxjava1的库。你会发现你可以在你的代码中使用rxjava1,但是有一天他们会迁移到rxjava2,你的构建会失败(但是库api是一样的,你没有在你的代码中做任何更改),所以这种行为非常复杂。这适用于我上面描述的场景吗?再说一遍,我为什么要使用api呢?所以我建议使用实现,而不是api。当您有几个大的、难以设置的模块和一个只执行大模块初始化的瘦模块时,Api可能很有用。我没有其他使用apiHmm的用例,api可能用于模块的公共api所需的依赖项。还有一个支持api的场景:我包括了android.arch.lifecycle:在库模块中使用实现的扩展。依赖应用程序模块抱怨版本冲突可能是由于隐式依赖关系造成的。我不完全理解为什么,但使用api而不是android.arch.lifecycle的实现:扩展就是这样做的。