这并不是 v4-support 和 v7-appcompat 之间的冲突,尽管如果您有后者,则确实不需要前者。它所抱怨的重复类无论如何都不是来自那里。您应该能够发现,如果在 Android Studio 中转到“导航”>“类”并输入 Escaper,您应该能够看到定义它的多个库。
我制作了一个示例项目,其中仅包含项目中的包含内容,该项目引用了来自 jcenter 的可下载依赖项,并且我可以看到该库提取了它的副本:
compile 'oauth.signpost:signpost-commonshttp4:1.2.1.2'
尽管它是通过signpost-core-1.2.1.2.jar 文件传入的。如果我查看该库的 pom 文件(http://search.maven.org/remotecontent?filepath=oauth/signpost/signpost-commonshttp4/1.2.1.2/signpost-commonshttp4-1.2.1.2.pom http://search.maven.org/remotecontent?filepath=oauth/signpost/signpost-commonshttp4/1.2.1.2/signpost-commonshttp4-1.2.1.2.pom)我可以看到它已经将路标核心作为传递依赖项拉入:
<dependencies>
<dependency>
<groupId>oauth.signpost</groupId>
<artifactId>signpost-core</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
稍后在构建文件中,将其作为显式 jar 文件包含在内,这就是冗余的来源。通过包含signpost-commonshttp,应该不需要包含signpost-core。
顺便说一句,路标根本不应该重新分发这些文件——这看起来像是库中的打包错误。
请注意,如果一切都使用可下载的库而不是显式的 jar 文件,构建系统通常能够避免冗余文件的问题。您是否通过以下方式包含了路标核心:
compile 'oauth.signpost:signpost-core:1.2.1.2'
如果不直接包含其 jar 文件,您就不会看到此问题。
一旦你解决了这个问题,你就会遇到其他问题。 httpmime 与 Android 提供的这些文件的版本发生冲突,并且这个库可能是多余的,但接下来您可以跨过那座桥。