首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >添加第三方.aar文件后无法合并dex

添加第三方.aar文件后无法合并dex
EN

Stack Overflow用户
提问于 2018-01-20 22:12:44
回答 1查看 467关注 0票数 0

我遇到了unable to merge dex问题,很多帖子似乎都在抱怨这个问题。在做了一些研究之后,我想我已经找到了问题的根源,但我不知道如何着手解决它。

我目前正在组装各种第三方组件,以创建一个Android应用程序。它由以下部分组成:

  • app:应用程序本身,它是一个很小的应用程序,带有从Android创建的Kotlin活动
  • libs:两个.aar文件,A.aar和B.aar,A.aar依赖于B.aar
  • base:一个第三方java模块,它提供了一些接口、助手函数,并为它们提供了一些依赖项。这个模块有自己的build.gradle文件。

我按照以下步骤对它们进行了集成:

  • 如果我将base添加为app的依赖项,则所有内容都将生成
  • 当我将A.aar作为依赖项添加到应用程序的build.gradle中时,它仍然会生成
  • 然后,当我将B.aar作为应用程序(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中是错误的吗?如果是这样的话,除了要求第三方解决这个问题外,我有没有其他办法解决这个问题?

我们已经尝试过但没有成功的事情:

  • 在包含AAR的implementation语句中使用implementation语句(我怀疑它可能只适用于外部依赖项,而不是内置在AAR中的代码)
  • 使用preDexLibraries (true为我们中的一些人工作,false为其他人工作--这不是一个解决方案!)

我更像一个C++/C的家伙,所以我可能需要掌握一些特定于Java的概念。我预先感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 18:19:35

我们找到的唯一解决方案是对第三方AAR执行以下操作:

  • 用.zip文件编辑器打开AAR文件(ex: 7-zip)
  • 在AAR中打开classes.jar
  • 导航到com目录
  • 删除google子目录

然后,我们将番石榴作为一个依赖项添加到gradle文件中,它可以工作,这是正确的做法,我们正在等待第三方提供者的ok。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48361618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档