【问题标题】:Export failing with the dreaded "Conversion to Dalvik format failed with error 1" error导出失败并出现可怕的“转换为 Dalvik 格式失败并出现错误 1”错误
【发布时间】:2012-11-10 17:07:34
【问题描述】:

我在这里搜索了如何解决这个问题,但我发现没有任何帮助。我怀疑解决方案应该在here,但我错了。启用详细信息后,控制台中没有任何内容,因此很难确定。我可以很好地导出启用了 proguard 的其他项目,但不能导出这个特定的项目。本来以为和我用的opencsv jar有关系,但是我把那个jar去掉了,又去掉了代码中对它的引用,还是报错。

在没有 proguard 的情况下导出应用程序可以正常工作,并且应用程序本身运行良好。

注意:AlternateJavaBridgelib 是我在大多数项目中使用的库。我在其他应用程序中使用 proguard 导出 apk 没有问题(这就是为什么我虽然它可能是 opencsv jar,但它是我没有在其他应用程序中使用的唯一其他 jar)。

这是我的 proguard.cfg,以防我遗漏了什么:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable


-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class au.com.bytecode.**
-keep public class java.beans.**

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keep class * implements java.io.Serializable {
    static final long serialVersionUID;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    public boolean equals(java.lang.Object);    
}


-dontwarn java.beans.**, android.support.v4.**, com.google.ads.**, android.provider.CalendarContract*, com.dropbox.client2.**,
android.view.Display, com.xiledsystems.AlternateJavaBridgelib.components.altbridge.FormFragment, android.widget.Switch, au.com.bytecode.opencsv.**

编辑:似乎 proguard 确实有效。 proguard 由于某种原因运行后似乎失败了。我得到了为项目生成的转储、映射、种子和使用 txt 文件。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    这可能是 ProGuard 中的一个错误,会产生无效代码,然后 dx 会在该错误上报告晦涩的错误。确保您使用的是最新版本的 ProGuard。如果问题仍然存在,您可以在ProGuard 网站上报告它,或者给我邮寄一个可以让我重现问题的项目。

    (我是 ProGuard 的开发者)

    【讨论】:

    • 感谢 Eric,修复了它。我以为我在早些时候升级了,但显然我没有。我现在可以在启用 proguard 的情况下导出应用程序。
    • 我发现了导致此问题的原因。我在处理过程中取消了出口。一旦你这样做,它似乎是bork proguard。这次我做了同样的事情,我不得不删除该项目,并将其重新导入工作区以使其工作。希望这些信息能帮助您找到问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多