正确使用“实施”
Posted
技术标签:
【中文标题】正确使用“实施”【英文标题】:Proper use of 'implementation' 【发布时间】:2019-03-07 05:55:42 【问题描述】:我有一个具有以下结构的项目。
+-MyApplication
+-MyLibrayOne
+-MyLibrayTwo
MyApplication
是我的主要应用程序,而 MyLibrayOne
和 MyLibrayTwo
是导入到项目中的两个库。 MyApplication
使用MyLibrayOne
的某些类,MyLibrayOne
使用MyLibrayTwo
的某些类。
在MyLibrayOne
的.gradle
文件中我使用了- compile project(':MyLibrayTwo')
。一切正常。但是如果我用implementation
替换compile
,它就不能从MyLibrayTwo
导入类。它给出了error: cannot find symbol class XXXX
错误。
【问题讨论】:
您需要使用api
。看到这个帖子:link
【参考方案1】:
首先,我鼓励您查看Google I/O 2017。 编译和实现不是一回事。 compile 允许应用程序访问子库可以访问的所有子依赖项。这意味着如果 MyLibrayOne 依赖于 MyLibraryTwo 并且您还需要从 MyLibrarayTwo 访问该类,则您必须使用 compile 指令直接 gradle 以公开 MyLibrayTwo 中的类。 如果不需要,那么实施就足够了。 我只能猜测你的情况是前者,所以你需要继续使用 compile。由于现在不推荐使用 compile ,因此请使用 api 指令。他们是一样的。 另外,请查看gradle documentation。
【讨论】:
在我的例子中,MyLibrayOne 使用来自 MyLibrayTwo 的类,但 MyLibrayTwo 是独立的 - MyLibrayTwo 不使用 MyLibrayOne 的任何类。如果我使用 'compile',我会收到警告 - “配置 'compile' 已过时,已替换为 'implementation' 和 'api'。它将在 2018 年底被删除” opps - 忘了告诉你。用api替换编译。他们应该是一样的。我将编辑答案以更好地反映这一点。 另一个很好的信息来源是:Implementation Vs Api in android Gradle plugin 3.0【参考方案2】:使用api
而不是implementation
将解决您的问题。 IE。
dependencies
// Enforce the runtime dependencies
api project(':MyLibrayOne')
api project(':MyLibrayTwo')
简单解释一下,api
会让依赖项目看到所有依赖项目的类,但implementation
不能这样做。
【讨论】:
以上是关于正确使用“实施”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GSM 通话正确实施 Call.conference (Android API 23+)?