android - dalvik翻译 - dalvik虚拟机




外部JAR上的“转换为Dalvik格式失败,出现错误1” (20)

在Eclipse中我的Android应用程序中,出现以下错误。

意外的顶级例外:
java.lang.IllegalArgumentException:已经添加:Lorg / xmlpull / v1 / XmlPullParser;
....
转换为Dalvik格式失败,错误1

只有当我将特定的外部JAR文件添加到我的项目时才会出现此错误。 我花了很长时间寻找可能的解决方案,但没有任何可行的解决方案。 我甚至试图更改为Android 1.6而不是1.5(我使用的当前版本)。


Windows 7解决方案:

确认问题是由文件中的ProGuard命令行引起的
[Android SDK安装目录] \ tools \ proguard \ bin \ proguard.bat

编辑以下行将解决问题:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

只需清理该项目

如果这不起作用,请尝试其他解决方案


一般来说,当构建路径中存在不必要的JAR文件时,似乎会出现此问题。

IntelliJ IDEA上工作时遇到了这个问题。 对我来说,它发生是因为我添加了在运行时正在编译的JUnitMockito库。 这需要在模块属性中设置为“测试”。


今天我自己解决了这个问题。 清洁和重建不能解决问题。 删除和重新导入项目也没有帮助。

我终于追溯到我的.class文件的一个不好的补充。 我认为这是由插件工具添加的,当我试图解决另一个问题,删除它摆脱了“转换为Dalvik格式失败,错误1”构建错误:

<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
    <attributes>
        <attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
    </attributes>
    <accessrules>
        <accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
    </accessrules>


以下是另一种场景和解决方案:

如果您在更新ADT for Eclipse后最近遇到此问题:

  1. 在您的应用程序项目中,检查指向您的库项目的任何链接的源文件夹(它们的名称格式为“LibraryName_src”)。
  2. 选择所有这些项目,右键单击,选择“ 构建路径 ” - >“ 从构建路径中删除 ”。
  3. 选择“ 也从项目中取消链接文件夹 ”,然后点击“ ”。
  4. 清理,重建和重新部署项目。

看起来原因在于ADT的某些以前版本将Library项目源文件夹链接到“子”项目,而当前的ADT / Dex组合与该解决方案不再兼容。

编辑:这是由一个Android开发博客条目,特别是这一个 - 见第8段起。


以前提出的解决方案都不适合我。 就我而言,当我从引用库源代码文件夹切换到使用库JAR文件时,问题发生了。 最初,在Android应用程序项目Properties \ Android page \ Library部分下列出了一个Android库项目,并且在项目资源管理器树中还将该库作为链接指向库源目录。

首先,我刚刚从项目树中删除了目录链接,并将JAR库添加到构建路径,但是这导致了异常。

正确的过程是(在更改构建路径并将引用归还给库源之后):

  • 通过实际删除应用程序项目Properties \ Android页面中的引用,正确删除库源目录链接

  • 像平常一样将库JAR添加到应用程序项目构建路径中。


在导出(未)签名的Android应用程序时,通过关闭菜单>“项目”>“自动构建”,您可以轻松解决此问题(使用Eclipse Android开发人员工具,Build:v22.0.1-685705)。 之后,不要忘记再次打开它。


在我的情况下,问题实际上是OpenFeint API项目。 我已经将OpenFeint添加为库项目:

它也被添加到构建路径中,ADT工具16给这个场景提供了错误。

右键单击你的项目,然后点击构建路径,配置构建路径,然后看到图像并从这里删除项目OpenFeint,所有工作都完成了:)


如果您已将Android.jar文件添加到您的构建路径中,也可能是由于Eclipse中的意外快速修复造成的。 右键单击项目 - > 构建路径 - > 配置构建路径 - > android.jar ,删除它。


如果您的ADT修订版本为12+,则应该从4.4 - > 4.6更新您的proguard(如此处所述)。 另外,您应该以原始格式保留... \ bin \ proguard.bat文件。

只需从网上下载它,并将lib文件夹从下载的软件包复制到:

[Android SDK安装目录] \ tools \ proguard \ lib


对我而言,我的构建路径中出现了额外的JAR参考。 我删除了这个,它现在可以工作。


就我而言

project-> properties-> java build path - >按顺序导出tab - > 取消选中 android-support-v4.jar


我在经过四个小时测试所有解决方案后发现的我自己的唯一解决方案是这里提供的许多解决方案的组合:

  • 从Eclipse中Delete项目
  • 从项目文件夹中删除\bin\gen文件
  • 删除对根项目文件夹中的.classpath文件库的引用
  • 用命令行重新启动Eclipse: eclipse -clean
  • Import项目
  • 右键单击项目 - 选择“ Properties >“ Java Build Path >“ Libraries并删除Android XX.Y以外的所有内容
  • 最后clean项目,等待自动构建或Build
  • 启动,现在它的作品! 至少对于我来说...

我一次又一次地尝试了每一步,并且有许多组合,但是只有所有步骤的继承一次成功! 我希望我不会再面对这个......


我正在使用Android 1.6并有一个外部JAR文件。 对我而言,工作是删除所有库,右键单击项目并选择Android Tools - > * Fix Project Properties(添加了Android 1.6),然后添加外部JAR文件。


我解决了这个问题。

这是一个JAR文件冲突。

看起来我的构建路径上有两个包含相同包和类的JAR文件。

smack.jarandroid_maps_lib-1.0.2

从其中一个JAR文件中删除此软件包可解决此问题。


我遇到了同样的问题,并且这些解决方案都没有工作。 最后,我在控制台看到错误是由于重复的类(一个在现有项目中,一个在添加的jar文件中):

java.lang.IllegalArgumentException: already added: package/MyClassclass;
[2011-01-19 14:54:05 - ...]: Dx1 error; aborting
[2011-01-19 14:54:05 - ...] Conversion to Dalvik format failed with error 1

因此,请检查您是否在项目中添加了具有重复类的jar。 如果是,请尝试删除其中一个。

它为我工作。


我遇到了这个问题,因为Eclipse中的Android-Maven插件显然不能识别两次从两个项目(包括Android库项目)引用的传递引用和引用,并且不止一次地包含它们。 尽管Maven应该处理所有这些,但我必须使用hocus-pocus才能使所有内容都包含在内。

例如,我有一个核心库globalmentor-core,也被globalmentor-google和globalmentor-android(后者是一个Android库)使用。 在globalmentor-android pom.xml我必须将依赖关系标记为“已提供”,并将其从其他传入库中排除:

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!-- android-maven-plugin can't seem to automatically keep this from being
             included twice; it must therefore be included manually (either explicitly
             or transitively) in dependent projects -->
        <scope>provided</scope>
    </dependency>

然后在最终的应用程序pom.xml我必须使用正确的技巧来仅允许一个包含路径---以及明确包含核心库:

    <!-- android-maven-plugin can't seem to automatically keep this from being
        included twice -->
    <!-- <dependency> -->
    <!-- <groupId>com.globalmentor</groupId> -->
    <!-- <artifactId>globalmentor-core</artifactId> -->
    <!-- <version>1.0-SNAPSHOT</version> -->
    <!-- </dependency> -->

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-google</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <!-- android-maven-plugin can't seem to automatically keep this from
                being included twice -->
            <exclusion>
                <groupId>com.globalmentor</groupId>
                <artifactId>globalmentor-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-android</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

更新Proguard到最新版本为我解决了它。

  • 我的proguard路径是C:\Program Files (x86)\Android\android-sdk\tools\proguard\
  • 我从here下载了新版本
  • 并替换了bin和lib文件夹

感谢上帝!


转到项目»属性»Java构建路径»库,并删除所有除“Android XY”(在我的情况下Android 1.5)。 单击确定。 转到项目»清洁»清洁下面选择的项目»选择您的项目,然后单击确定。 这应该工作。

您也可能在项目文件夹中有一个JAR文件(我已将Admob JAR文件复制到我的src文件夹中),然后将其添加为Java Path Library。 它不会在Package Explorer下显示,所以您不会注意到它,但它会计算两次,导致可怕的Dalvik错误1。

另一个可能的原因可能是包名冲突。 假设你在这个包内有一个包com.abc.xyz和一个名为A.java的类,另一个包含相同的com.abc.xyz.A.java库项目(它被添加到这个项目的依赖项中)那么你会得到完全相同的错误。 这意味着,您有多个对同一个文件A.java引用,并且无法正确构建它。

在其他方面,如果您不小心或故意手动编辑/添加类路径文件中的任何东西,可能会发生这种情况。在某些情况下,我们可能会手动将android.jar路径添加到classpath文件以生成java doc.On,在javadoc生成后删除该路径代码将正常工作。请检查这一点,如果任何一个仍然发生。


转到项目,然后取消选中“自动构建”。然后尝试导出项目,错误消失。





android-sdk-1.6