【问题标题】:Using ActionBarSherlock & ViewPagerIndicator Synchronously Will Not Compile同步使用 ActionBarSherlock 和 ViewPagerIndicator 不会编译
【发布时间】:2012-04-19 20:30:08
【问题描述】:

同时使用 ActionBarSherlock 和 ViewPagerIndicator 时,出现以下错误;根据我的阅读 - 这是由于两者中的冲突/重复库引起的。

一个解决方案是让 ABS 依赖 VPI(或者相反,我尝试了两种方法)但是即使在清理和重建之后,这仍然给了我同样的错误。现在我只是在两个独立的项目中工作,所以我可以完成我的工作——但我显然想把它们结合起来哈。非常感谢您的帮助!

[2012-04-19 00:39:20 - MashableReader] Dx 
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.processOne(Main.java:418)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.dx.command.dexer.Main.run(Main.java:206)
[2012-04-19 00:39:20 - MashableReader] Dx   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[2012-04-19 00:39:20 - MashableReader] Dx   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[2012-04-19 00:39:20 - MashableReader] Dx   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[2012-04-19 00:39:20 - MashableReader] Dx   at java.lang.reflect.Method.invoke(Unknown Source)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:180)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:702)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:646)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.resources.Project$1.run(Project.java:618)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.resources.Project.build(Project.java:124)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1000)
[2012-04-19 00:39:20 - MashableReader] Dx   at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:147)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:854)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:703)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:928)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1132)
[2012-04-19 00:39:20 - MashableReader] Dx   at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
[2012-04-19 00:39:20 - MashableReader] Dx 1 error; aborting
[2012-04-19 00:39:20 - MashableReader] Conversion to Dalvik format failed with error 1

更新答案: 好的 - 正如下面的答案所得到的,问题是 Eclipse ADT 中的依赖关系解析。基本上我的解决方案是让 ViewPagerIndicator 依赖于 ActionBarSherlock(意思是,在 VPI 属性中,我将 ABS 添加到项目中,就像您在常规项目中所做的那样 - 对于那些可能会向后思考的人)。当我的代码中出现错误说某些方法无法被覆盖时,我仍然遇到了问题 - 这部分是因为您有错误的导入,所以删除所有导入和 CRTL+SHIFT+O(快速导入解决) 并从 android.support.v4 包中选择所有的包,你应该都很好。但后来我仍然遇到了最初的 Dalvik 问题 - 为了解决这个问题,我必须进入我的 VPI 库所在的实际文件夹,并从 /libs 文件夹中删除支持 jar 以阻止它抓取它 - 然后全部设置 :)

【问题讨论】:

  • @CommonsWare - 刚刚检查过,都是最新的。
  • 当您说将 ABS 添加到 VPI 时,您是否还暗示要从 VPI 中删除要支持的 ref(因为它将从 ABS 中获取)?
  • 只是将 ABS 作为库添加到 VPI 会给我带来多引用错误...
  • @towpse - 如果我没记错的话,我从 VPI 中删除了支持 jar,然后将 ABS 作为库包含在内。不过,自从我上次接触到这一点以来,可能已经发生了很多变化。
  • @TJ Biddle - 这也是我的第一个想法,从 VPI 中删除支持。如何添加罐子似乎很直观,但没有那么多删除它们。除非我通过 JavaBuildPath->Libraries 选项卡删除所有 android 依赖项。我似乎不能只选择支持 jar 并删除或删除它。

标签: android dalvik actionbarsherlock android-viewpager


【解决方案1】:

是的,问题是 ActionBarSherlock 和 ViewPagerIndicator 都使用 libs/android-support-v4.jar 依赖项。

最简单的解决方案是将您的工作站升级到最新的 Android SDK 和 Eclipse ADT 插件版本(至少 r17),因为这种情况现在由 SDK 自动处理(自 r17 起),请参阅r17 changelog

依赖解析

当一个项目引用了两个需要相同 jar 文件的库项目时,构建系统必须检测并解决重复问题。

另请注意,从r17开始,libs文件夹下的所有jar文件都会自动填充到项目的类路径中,您不再需要手动将它们添加到项目的构建路径中,r17 changelog中也提到过:

项目具有源文件夹,以及库项目和 jar 文件依赖项。除了在 project.properties 中添加库项目作为依赖项之外,不需要其他设置,项目的类路径会自动填充:

  • 项目的 libs/*.jar 的内容
  • 图书馆项目的输出。
  • 图书馆项目的 libs/*.jar

希望这会有所帮助。

【讨论】:

  • 嗯,我很欣赏详细的回复 - 但我刚刚检查过,我有用于 Android SDK 的 R19 和用于 Eclipse ADT 插件的 v18。
  • 检查您的项目构建路径,确保您没有第二次明确将 android-support-v4.jar 包含为外部 jar 库。
  • 奇怪,我的最后一个镜头是检查两个库项目中的 android-support-v4.jar 是否相同,如更新日志中所述:目前我们的检测非常基础,仅检查文件的大小和 sha1 相同。如果两个库各自在它们的 libs 文件夹中包含一个名为 mylib.jar 的文件,但这两个文件不同,则构建系统将失败并指示依赖项错误。
  • 如果您使用每个项目的最新版本,它们将不会完全相同。您应该将 VPI 中的 .jar 更新为 r7。这将反映在其下一个版本中。
  • 谢谢杰克。有没有一种简单的方法可以做到这一点?尝试了一些不同的东西,并且不得不恢复一个保管箱备份,因为我把它搞得太多了,哈哈。 Android > 添加支持库(提示 R7)给了我这个错误,我将继续处理:code.google.com/p/android/issues/detail?id=4410
【解决方案2】:

我正在使用最新版本的 ADT、SDK 等,但它仍然存在这个问题 - 它似乎仍然不知道从哪个依赖库等中使用哪个支持库。

TJ 的解决方案确实有效,但我使用了另一种方法。

我的解决方案如下:

  1. 进入每个库项目和引用该库的主应用程序项目并删除 libs/android-support-v4.jar 引用
  2. 回到每个项目并从文件系统中拖出 android-support-v4.jar(在我的 Mac 上,我将 SDK 存储在我的文档文件夹中:Users//Documents/Android/android-sdk-mac_x86/extras/ android/compatibility/v4/android-support-v4.jar) 到 libs 文件夹中,然后选择链接到 jar 而不是将其复制到项目中。
  3. 现在我的所有项目都在我的文件系统上引用相同的 .jar 文件,如果我以后更新支持库(通过 Android SDK 管理器),.jar 将被更新,而项目将依次拉入最新的罐子。

所以更新支持库不应该破坏任何东西,并允许您使用最新版本。

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多