2013-03-13 64 views
36

我的应用程序依赖于一个库项目。此库项目取决于Android兼容包V4。我有不是导出库项目的依赖项。在我自己的项目中,我添加了ACL V13作为依赖项,但编译时我得到的错误基本上存在重复的依赖项。我认为不导出库项目的依赖关系可以解决这个问题,但事实并非如此。Android Dex:意外的顶级例外:已添加

我该如何解决这个问题?

编辑

另外,根据Android tools docs

Android的支持,v4.jar和Android的支持,v13.jar特殊情况。

我们为这两个库做一个特例,因为-v13里面包含一个 完整版本的-v4。如果两者都找到了,那么只有-v13会使用 。

所以这应该只是工作...

+0

你有详细的跟踪吗?它应该提及哪些类已经添加了。 – 2013-03-13 14:09:48

+0

您使用eclipse或intelij的想法? – 2013-03-13 14:10:28

+0

@vmerror,intellij和Android Dex:[abc] java.lang.IllegalArgumentException:已添加:Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; – LuxuryMode 2013-03-13 14:11:00

回答

19

如果您使用完全相同在不同项目(库项目或标准项目)相同的lib瓶子,APK工具都会自动去掉重复者的。

如果您有两个具有相同名称但不在相同修订版本的库,则问题开始。

android-support-v4.jar和android-support-v13。jar文件可以来自不同的修订版本,因为在不同的支持包版本中始终有相同的名称(http://developer.android.com/tools/extras/support-library.html#Notes

我会检查您是否在您的主项目和lib项目中使用完全相同的支持库版本。

为了确保将两个支持库罐(位于android-sdk文件夹中)复制到您的项目库文件夹中。

{android-sdk}/extras/android/support/v4/android-support-v4.jar 
AND 
{android-sdk}/extras/android/support/v13/android-support-v13.jar 

它应该摆脱这个问题。

+1

这不适合我。 user1834249的答案是解决此问题的解决方案。通过制作一个所有模块用来获取android-support-v4.jar的公共库,IntelliJ/dex认识到它是一回事。我认为这可能是IntelliJ和dex编译器集成的一个错误。 – kevinmrohr 2013-12-04 15:05:54

3

嗯,在我的故事我不得不删除这是相同的模块依赖关系,在库中添加它,那么这个库添加到每个模块的依赖。

所以:

  • 模块答:取决于Android的V4(和有它在它的lib文件夹)
  • 模块B:取决于Android的V4(和有它在它的lib文件夹)

    1. 添加到项目“android-v4”(从第一个模块ex)的库。在模块b的lib文件夹中删除它。

    2. 删除模块A和B的Android-V4的依赖性

    3. 添加到每个模块的依赖 - >库 - >机器人-V4(你在2步骤中创建)

我不确定它是否是正确的解决方案,但它的工作原理。

+0

我知道这个,intellij想法对于这个很糟糕 – crossle 2013-05-13 03:54:24

1

您是否试图将库的从属关系从v4更改为v13并将其导出?

8

从库中删除v4软件包。

清理项目。

4

在我的情况下,我刚更新了libs /文件夹中的一个JAR到新版本。

所有花了修复它是运行构建 - >重建项目之前,即发出“干净的”任务“assembleDebug”等

0

有时简单地删除V4支持库是不行的,还需要重建或项目。