我遇到了unable to merge dex问题,很多帖子似乎都在抱怨这个问题。在做了一些研究之后,我想我已经找到了问题的根源,但我不知道如何着手解决它。
我目前正在组装各种第三方组件,以创建一个Android应用程序。它由以下部分组成:
app:应用程序本身,它是一个很小的应用程序,带有从Android创建的Kotlin活动libs:两个.aar文件,A.aar和B.aar,A.aar依赖于B.aarbase:一个第三方java模块,它提供了一些接口、助手函数,并为它们提供了一些依赖项。这个模块有自己的build.gradle文件。我按照以下步骤对它们进行了集成:
base添加为app的依赖项,则所有内容都将生成implementation B.aar)的依赖项添加时,gradle构建会失败,错误是:Unable to merge dex。查看Gradle堆栈跟踪,我发现它正在抱怨多个dex文件定义了Lcom.google.common.io.ByteSink,这似乎是谷歌的番石榴库。
使用Android中的Project,B.aar似乎实际上包含了其中18.0版的番石榴(在“classes.jar”部分下)。我认为这与base在其build.gradle中用于番石榴20.0的implementation依赖项相冲突。
因此,我想我已经找到了冲突的根源(两种不同版本的番石榴碰撞),但我不知道如何进行。第三方将番石榴打包到.aar中是错误的吗?如果是这样的话,除了要求第三方解决这个问题外,我有没有其他办法解决这个问题?
我们已经尝试过但没有成功的事情:
implementation语句中使用implementation语句(我怀疑它可能只适用于外部依赖项,而不是内置在AAR中的代码)preDexLibraries (true为我们中的一些人工作,false为其他人工作--这不是一个解决方案!)我更像一个C++/C的家伙,所以我可能需要掌握一些特定于Java的概念。我预先感谢您的帮助。
发布于 2018-01-24 18:19:35
我们找到的唯一解决方案是对第三方AAR执行以下操作:
com目录google子目录然后,我们将番石榴作为一个依赖项添加到gradle文件中,它可以工作,这是正确的做法,我们正在等待第三方提供者的ok。
https://stackoverflow.com/questions/48361618
复制相似问题